A title is a project's public name — the one in its GitHub URL and package managers (beagle, libabc, git). The goal is a deterministic, human-meaningful key for referencing projects, naming store shards, naming submodules etdc. The method: derive the title from the public URL basename (libabc.git→libabc), let an explicit value override it, persist it as reflog/wtlog line 1, use.
The ?/<project>/… URI segment and the shard dir ~/.be/<title>/ are both the title; it is a deterministic public name, not an opaque label (see Store).
be get ?/beagle/submods names project beagle; its shard is ~/.be/beagle/ and its trunk is ?/beagle.beagle; the vendored abc/ submodule is titled libabc, not its on-disk path abc.…/libabc.git share one libabc shard, so Submodules mount once.
Title resolves in three steps off the clone URL: a ?/<title> query segment wins; else a /.be/<seg>/ anchor names it; else the URL path basename (.git and trailing / stripped).
ssh://git@github.com/gritzko/libabc.git → libabc; https://host/beagle.git/ → beagle (the default basename rule).?/<title> slot: be get ssh://host/path/dogs.git?/beagle clones dogs.git but titles it beagle..gitmodules URL is almost certainly the titular one, so a submodule's title is its basename (see Submodules).
The title is carried by the existing line-1 get row of both <project>/refs and the wtlog — its URI's ?/<title> (or basename) is the title; no separate title row exists.
get row in both logs (not a distinct repo/title verb); its URI records the source and the ?/<title>.Titles identify projects, so a shared title means a shared project; a clash between unrelated histories is refused, never merged.
A submodule's title comes from its .gitmodules URL, but a parent cloned from a beagle remote fetches the sub from that same remote by title — the titular URL is only the fallback (see Submodules).
.gitmodules URL is the public, titular one; its basename is the submodule's title.