diff --git a/synapse/telepath.py b/synapse/telepath.py
index 2f0571772..cf5131317 100644
--- a/synapse/telepath.py
+++ b/synapse/telepath.py
@@ -393,13 +393,43 @@ class Proxy(s_coro.Fini):
 def alias(name):
     '''
     Resolve a telepath alias via ~/.syn/aliases.yaml
+
+    Args:
+        name (str): Name of the alias to resolve.
+
+    Notes:
+        An exact match against the aliases will always be returned first.
+        If no exact match is found and the name contains a '/' in it, the
+        value before the slash is looked up and the remainder of the path
+        is joined to any result. This is done to support dynamic Telepath
+        share names.
+
+    Returns:
+        str: The url string, if present in the alias.  None will be returned
+        if there are no matches.
     '''
     path = s_common.getSynPath('aliases.yaml')
     if not os.path.isfile(path):
         return None
 
     conf = s_common.yamlload(path)
-    return conf.get(name)
+
+    # Is there an exact match - if so, return it.
+    url = conf.get(name)
+    if url:
+        return url
+
+    # Since telepath supports dynamic shared object access,
+    # slice a name at the first '/', look up using that value
+    # and then append the second value to it.
+    dynname = None
+    if '/' in name:
+        name, dynname = name.split('/', 1)
+    url = conf.get(name)
+    if url and dynname:
+        url = '/'.join([url, dynname])
+
+    return url
 
 @s_glob.synchelp
 async def openurl(url, **opts):

Support telepath aliasing for cryotanks
Let's say I have the following aliases file.

~/.syn/aliases.yaml
```
---
cryo: tcp://user:pass@host:port/cryocell
...
```

The telepath expansion when running `python -m synapse.tools.cryo.cat cryo/tank_name` doesn't work while `python -m synapse.tools.cryo.list cryo` does.

Could a change akin to the following be made to support cryo aliases?
```
diff --git a/synapse/telepath.py b/synapse/telepath.py
index 2f057177..590e7322 100644
--- a/synapse/telepath.py
+++ b/synapse/telepath.py
@@ -427,7 +427,12 @@ async def openurl(url, **opts):
     if url.find('://') == -1:
         newurl = alias(url)
         if newurl is None:
-            raise s_exc.BadUrl(f':// not found in [{url}] and no alias found!')
+            # Cryotank
+            cryo_alias, sep, tank = url.rpartition("/")
+            newurl = alias(cryo_alias)
+            if newurl is None:
+                raise s_exc.BadUrl(f':// not found in [{url}] and no alias found!')
+            newurl = sep.join((newurl, tank))
         url = newurl

     info = s_urlhelp.chopurl(url)
```


diff --git a/synapse/tests/test_telepath.py b/synapse/tests/test_telepath.py
index 70e2d1d3c..09bcee161 100644
--- a/synapse/tests/test_telepath.py
+++ b/synapse/tests/test_telepath.py
@@ -6,9 +6,11 @@ logger = logging.getLogger(__name__)
 
 import synapse.exc as s_exc
 import synapse.glob as s_glob
+import synapse.common as s_common
 import synapse.telepath as s_telepath
 
 import synapse.lib.share as s_share
+import synapse.lib.scope as s_scope
 import synapse.tests.common as s_test
 
 from synapse.tests.utils import SyncToAsyncCMgr
@@ -25,6 +27,13 @@ class CustomShare(s_share.Share):
     def boo(self, x):
         return x
 
+class Beep:
+    def __init__(self, path):
+        self.path = path
+
+    def beep(self):
+        return f'{self.path}: beep'
+
 class Foo:
 
     def __init__(self):
@@ -99,6 +108,20 @@ class TeleApi:
         return CustomShare(self.link, 42)
 
 class TeleAware(s_telepath.Aware):
+    def __init__(self):
+        s_telepath.Aware.__init__(self)
+        self.beeps = {}
+
+    def _initBeep(self, path):
+        beep = self.beeps.get(path)
+        if beep:
+            return beep
+        beep = Beep(path)
+        self.beeps[path] = beep
+        return beep
+
+    def onTeleOpen(self, link, path):
+        return self._initBeep(path[1])
 
     def getTeleApi(self, link, mesg):
         return TeleApi(self, link)
@@ -249,12 +272,16 @@ class TeleTest(s_test.SynTest):
 
         with self.getTestDmon() as dmon:
             dmon.share('woke', item)
-            proxy = dmon._getTestProxy('woke')
-            self.eq(10, proxy.getFooBar(20, 10))
+            with dmon._getTestProxy('woke') as proxy:
+                self.eq(10, proxy.getFooBar(20, 10))
+
+                # check a custom share works
+                obj = proxy.customshare()
+                self.eq(999, obj.boo(999))
 
-            # check a custom share works
-            obj = proxy.customshare()
-            self.eq(999, obj.boo(999))
+            # check that a dynamic share works
+            with dmon._getTestProxy('woke/up') as proxy:
+                self.eq('up: beep', proxy.beep())
 
     def test_telepath_auth(self):
 
@@ -282,3 +309,39 @@ class TeleTest(s_test.SynTest):
             host, port = dmon.listen('tcp://127.0.0.1:0/')
 
             self.raises(s_exc.BadMesgVers, s_telepath.openurl, 'tcp://127.0.0.1/', port=port)
+
+    def test_alias(self):
+        item = TeleAware()
+        name = 'item'
+
+        with self.getTestDmon() as dmon:
+            addr = dmon.listen('tcp://127.0.0.1:0')
+            dmon.share(name, item)
+            dirn = s_scope.get('dirn')
+
+            url = f'tcp://{addr[0]}:{addr[1]}/{name}'
+            beepbeep_alias = url + '/beepbeep'
+            aliases = {name: url,
+                       f'{name}/borp': beepbeep_alias}
+
+            with self.setSynDir(dirn):
+                fp = s_common.getSynPath('aliases.yaml')
+                s_common.yamlsave(aliases, fp)
+
+                # None existent aliases return None
+                self.none(s_telepath.alias('newp'))
+                self.none(s_telepath.alias('newp/path'))
+
+                # An exact match wins
+                self.eq(s_telepath.alias(name), url)
+                self.eq(s_telepath.alias(f'{name}/borp'), beepbeep_alias)
+                # Dynamic aliases are valid.
+                self.eq(s_telepath.alias(f'{name}/beepbeep'), beepbeep_alias)
+
+                with s_telepath.openurl(name) as prox:
+                    self.eq(10, prox.getFooBar(20, 10))
+
+                # Check to see that we can connect to an aliased name
+                # with a dynamic share attached to it.
+                with s_telepath.openurl(f'{name}/bar') as prox:
+                    self.eq('bar: beep', prox.beep())
diff --git a/synapse/tests/utils.py b/synapse/tests/utils.py
index 5647d715a..f59547bc7 100644
--- a/synapse/tests/utils.py
+++ b/synapse/tests/utils.py
@@ -798,6 +798,24 @@ class SynTest(unittest.TestCase):
 
         self.raises(exc, testfunc)
 
+    @contextlib.contextmanager
+    def setSynDir(self, dirn):
+        '''
+        Sets s_common.syndir to a specific directory and then unsets it afterwards.
+
+        Args:
+            dirn (str): Directory to set syndir to.
+
+        Notes:
+            This is to be used as a context manager.
+        '''
+        olddir = s_common.syndir
+        try:
+            s_common.syndir = dirn
+            yield None
+        finally:
+            s_common.syndir = olddir
+
     def eq(self, x, y, msg=None):
         '''
         Assert X is equal to Y

pip install -e .
parse_log_pytest
tornado>=3.2.2 cryptography>=1.7.2 pyOpenSSL>=16.2.0 msgpack-python>=0.4.2 xxhash>=1.0.1 lmdb>=0.92
pytest
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
cffi @ file:///tmp/build/80754af9/cffi_1625814693874/work
cryptography @ file:///tmp/build/80754af9/cryptography_1635366128178/work
importlib-metadata==4.8.3
iniconfig==1.1.1
lmdb==0.99
msgpack==0.5.1
packaging==21.3
pluggy==1.0.0
py==1.11.0
pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work
pyOpenSSL==17.5.0
pyparsing==3.1.4
pytest==7.0.1
PyYAML==3.13
regex==2023.8.8
six==1.17.0
-e git+https://github.com/vertexproject/synapse.git@6f5fc661a88b8cc3f4befb2c9c7ddcebf0b89ba0#egg=synapse
tomli==1.2.3
tornado==5.1.1
typing_extensions==4.1.1
xxhash==1.4.4
zipp==3.6.0

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
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - cffi=1.14.6=py36h400218f_0
  - cryptography=35.0.0=py36hd23ed53_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
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - pycparser=2.21=pyhd3eb1b0_0
  - 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
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - lmdb==0.99
      - msgpack==0.5.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyopenssl==17.5.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pyyaml==3.13
      - regex==2023.8.8
      - six==1.17.0
      - tomli==1.2.3
      - tornado==5.1.1
      - typing-extensions==4.1.1
      - xxhash==1.4.4
      - zipp==3.6.0
prefix: /opt/conda/envs/synapse

synapse/tests/test_telepath.py::TeleTest::test_alias
synapse/tests/test_telepath.py::TeleTest::test_telepath_async synapse/tests/test_telepath.py::TeleTest::test_telepath_auth synapse/tests/test_telepath.py::TeleTest::test_telepath_aware synapse/tests/test_telepath.py::TeleTest::test_telepath_basics synapse/tests/test_telepath.py::TeleTest::test_telepath_blocking synapse/tests/test_telepath.py::TeleTest::test_telepath_server_badvers
synapse/telepath.py
synapse/telepath.py