agentic research

tools for reading code, proving identity, and limiting what agents can do.

An index of what each project is for and how they actually connect. Code and history live on GitHub.

01 / index

projects, by what they solve

01 / identity

How can a machine prove possession without carrying a bearer token?

identity that cannot be copied

experimental · public

How can agents have scoped identities distinct from the people who deploy them?

agent identities, separate from their operators

experimental · public

02 / code intelligence

How can structured data become navigable rather than merely searchable?

code as a filesystem you can walk

active · public

How can an agent navigate an interface through structure instead of pixel guesses?

interfaces as a filesystem

archived · public

How can documentation claims be checked against the code they describe?

checks documentation against the code

experimental · public

03 / execution

How can AI tooling be bundled, constrained, and made traceable?

tool bundles that declare their own limits

experimental · public

04 / coordination

How can agents do the work without deciding what the work is?

work tracked and dispatched across repositories

experimental · public

How can scattered agent activity become one board that survives a restart?

a status board that polls on a schedule

experimental · public

05 / libraries

What can tools share when they run in different places?

storage addressed by content, not location

active · public

How were Mache and ley-line distributed as one tool?

a retired way of shipping two tools as one

archived · public

06 / writing

What ideas and constraints shape this work?

research notebook

active · public

02 / relationships

how they relate, in our words

authored — statements a maintainer makes

These are our descriptions, not read from any file. For dependencies read from the code, see below.

03 / dependencies

dependencies, read from the code

derived — read from a manifest, gated by deps:check

Not authored. Every line is read from a manifest in the repository that declares it, and a build fails when this page stops agreeing with those files. How it is derived · graph.json

canonical-hours → cloister (tenancy, convention, not established) ley-line-open → cloister (tenancy, convention, not established) mache → cloister (tenancy, convention, not established) notme → cloister (tenancy, convention, not established) rosary → cloister (tenancy, convention, not established) canonical-hours → mache (artifact, exact) canonical-hours → notme (library, exact) cloister → canonical-hours (composition, exact) cloister → ley-line-open (artifact, exact) cloister → ley-line-open (composition, exact) cloister → ley-line-open (library, exact) cloister → mache (artifact, exact) cloister → mache (composition, exact) cloister → mache (protocol, exact) cloister → notme (artifact, exact) cloister → notme (composition, exact) cloister → notme (library, exact) cloister → notme (protocol, exact) cloister → rosary (artifact, exact) cloister → rosary (composition, exact) cloister → rosary (protocol, exact) mache → ley-line-open (artifact, exact) mache → ley-line-open (library, exact) rosary → ley-line-open (library, exact) 0 1 2 3 assay canonical-hours cloister ley-line-open mache notme rosary signet exact — established by name — weak convention — weak
Ranked by dependency depth — a repository sits one level above the deepest thing it depends on. Line style carries how the coupling resolved: solid where the target is exact by construction, dashed or dotted where it was matched by name or by convention and so is not established. Weak couplings are drawn rather than omitted, because a picture showing nothing where a weak signal exists reports an absence of fact as a fact of absence. Kind is not in the diagram; it is on every row below. Archived projects are absent. Generated from the same data as the list, which stays canonical; scroll it sideways on a narrow screen.
  1. notme

  2. mache

  3. ley-line-open

  4. cloister

    • canonical-hourscomposition1 declaration
    • ley-line-openartifactcompositionlibrary7 declarations
    • macheartifactcompositionprotocol4 declarations
    • notmeartifactcompositionlibraryprotocol4 declarations
    • rosaryartifactcompositionprotocol4 declarations
  5. rosary

  6. canonical-hours

library
linked or imported at build time from a declared dependency
artifact
a pinned executable or image consumed at run time
protocol
an RPC or wire coupling between running processes
composition
a published file of the target, pinned at an exact commit
tenancy
declares itself mountable under the target's hosting contract
event
reacts to a repository_dispatch event the target sends
resolution
All 28 couplings above resolved exactly — the source either names the repository outright, or names an identifier that repository declares publishing. A further 6 are declared by a source but could only be matched to a repository by name; they are held in graph.json's weak_edges, listed on the project pages, and deliberately not stated here.
unconnected
signet, assay — read, and no manifest declares a coupling in either direction. That is a finding, not a gap.
not on the graph
x-ray, kiln are archived, so nothing is read from them. q-q.dev names no source repository, so there is no coordinate to read from. Absent here means unchecked, not uncoupled.
unexamined
canonical-hours declares couplings in .vigil.toml, which no parser here reads. Seen and not examined — so any coupling declared there is absent from this page rather than recorded, and that absence is a gap rather than a finding.
unresolved
4 declared couplings named a component no manifest resolves to a repository. Recorded in graph.json rather than dropped.
non-public
An edge touching a repository that is not public carries its endpoints and coupling kind only — no version, no commit, no source path.

04 / selected writing

from the notebook