diff --git a/synapse/lib/storm.py b/synapse/lib/storm.py
index f462aa012..a1dfde286 100644
--- a/synapse/lib/storm.py
+++ b/synapse/lib/storm.py
@@ -406,6 +406,7 @@ class Runtime(Configable):
         self.setOperFunc('load', self._stormOperLoad)
         self.setOperFunc('clear', self._stormOperClear)
 
+        self.setOperFunc('guid', self._stormOperGuid)
         self.setOperFunc('join', self._stormOperJoin)
         self.setOperFunc('lift', self._stormOperLift)
         self.setOperFunc('refs', self._stormOperRefs)
@@ -1101,7 +1102,7 @@ class Runtime(Configable):
         core = self.getStormCore()
 
         props = {}
-        for k,v in kwlist:
+        for k, v in kwlist:
 
             if not k[0] == ':':
                 raise s_common.BadSyntaxError(mesg='addnode() expects relative props with : prefix')
@@ -1319,3 +1320,9 @@ class Runtime(Configable):
                 [query.add(n) for n in nodes]
 
         return
+
+    def _stormOperGuid(self, query, oper):
+        args = oper[1].get('args')
+        core = self.getStormCore()
+
+        [query.add(node) for node in core.getTufosByIdens(args)]

Ability to lift by tufo guid in storm
thesilence [12:29 PM] 
There may be cases when working at the CLI where "lift by GUID" may be useful, mostly from a copypasta standpoint / repr limitations.

thesilence [12:30 PM] 
I haven't run across this specifically, but (again, "theoretically") there may be node type(s) where properties are too lengthy / complex to type or copy, so the easiest thing to copypasta would be the GUID.

epiphyte 
[12:30 PM] 
yeah - and there is also the use-case @7.389 mentioned for sharing

epiphyte 
[12:31 PM] 
"Hey guys, checkout 'iden=12345 totags()' - its a real doozy"
diff --git a/synapse/tests/test_lib_storm.py b/synapse/tests/test_lib_storm.py
index 3f6b77989..07a5e269e 100644
--- a/synapse/tests/test_lib_storm.py
+++ b/synapse/tests/test_lib_storm.py
@@ -563,6 +563,29 @@ class StormTest(SynTest):
                 ['1.2.3.4', 'vv', '#foo.bar'],
             ])
 
+    def test_storm_guid(self):
+
+        with s_cortex.openurl('ram:///') as core:
+
+            node0 = core.formTufoByProp('inet:ipv4', '1.2.3.4')
+            node1 = core.formTufoByProp('inet:ipv4', '4.5.6.7')
+
+            nodes = core.eval('guid()')
+            self.eq(len(nodes), 0)
+
+            nodes = core.eval('guid(%s)' % node0[0])
+            self.eq(nodes[0][1].get('inet:ipv4'), 0x01020304)
+
+            nodes = core.eval('guid(%s,%s)' % (node0[0], node1[0]))
+            vals = list(sorted(v[1].get('inet:ipv4') for v in nodes))
+            self.eq(vals, [0x01020304, 0x04050607])
+
+            # We can lift dark rows using guid() but kind of an easter egg.
+            core.addTufoDark(node0, 'foo:bar', 'duck:knight')
+            nodes = core.eval('guid(%s)' % node0[0][::-1])
+            self.eq(len(nodes), 1)
+            self.eq(node0[0], nodes[0][0][::-1])
+
 class LimitTest(SynTest):
 
     def test_limit_default(self):

pip install -e .
parse_log_pytest
pytest
nose coverage pytest
apt-get update apt-get install -y build-essential libffi-dev libssl-dev python3 python3-dev python3-pip python3-setuptools
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
cffi==1.15.1
coverage==6.2
cryptography==40.0.2
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
lmdb==1.6.2
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
msgpack-python==0.5.6
nose==1.3.7
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycparser==2.21
pyOpenSSL==23.2.0
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
-e git+https://github.com/vertexproject/synapse.git@f069d21504fad7c0acb6ac96893400b899f9589c#egg=synapse
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tornado==6.1
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
xxhash==3.2.0
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: synapse
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - cffi==1.15.1
      - coverage==6.2
      - cryptography==40.0.2
      - lmdb==1.6.2
      - msgpack-python==0.5.6
      - nose==1.3.7
      - pycparser==2.21
      - pyopenssl==23.2.0
      - tornado==6.1
      - xxhash==3.2.0
prefix: /opt/conda/envs/synapse

synapse/tests/test_lib_storm.py::StormTest::test_storm_guid
synapse/tests/test_lib_storm.py::StormTest::test_storm_addnode synapse/tests/test_lib_storm.py::StormTest::test_storm_addtag synapse/tests/test_lib_storm.py::StormTest::test_storm_alltag synapse/tests/test_lib_storm.py::StormTest::test_storm_cmpr_norm synapse/tests/test_lib_storm.py::StormTest::test_storm_delnode synapse/tests/test_lib_storm.py::StormTest::test_storm_delnode_caching synapse/tests/test_lib_storm.py::StormTest::test_storm_deltag synapse/tests/test_lib_storm.py::StormTest::test_storm_edit_end synapse/tests/test_lib_storm.py::StormTest::test_storm_editmode synapse/tests/test_lib_storm.py::StormTest::test_storm_filt_regex synapse/tests/test_lib_storm.py::StormTest::test_storm_lift synapse/tests/test_lib_storm.py::StormTest::test_storm_lifts_by synapse/tests/test_lib_storm.py::StormTest::test_storm_pivot synapse/tests/test_lib_storm.py::StormTest::test_storm_refs synapse/tests/test_lib_storm.py::StormTest::test_storm_setprop synapse/tests/test_lib_storm.py::StormTest::test_storm_show_help synapse/tests/test_lib_storm.py::StormTest::test_storm_tag_fromtag synapse/tests/test_lib_storm.py::StormTest::test_storm_tag_glob synapse/tests/test_lib_storm.py::StormTest::test_storm_tag_ival synapse/tests/test_lib_storm.py::StormTest::test_storm_tag_jointag synapse/tests/test_lib_storm.py::StormTest::test_storm_tag_query synapse/tests/test_lib_storm.py::StormTest::test_storm_tag_totag synapse/tests/test_lib_storm.py::LimitTest::test_limit_behavior synapse/tests/test_lib_storm.py::LimitTest::test_limit_behavior_negatives synapse/tests/test_lib_storm.py::LimitTest::test_limit_default
synapse/lib/storm.py
synapse/lib/storm.py