repo memory
Run npx innernet inside a git repo and that repo gets a memory of its own, kept current by the commits you were making anyway.
what lands in the repo#
.innernet/
connection.json # the memory's slug, nothing secret. committed.
hooks/
post-commit # every commit → one capture
post-merge # every pull or merge → the commits it brought
.gitignore # keeps last-sync.log out of git
AGENTS.md # a short block: where the memory is, the four calls
CLAUDE.md # @AGENTS.md, so Claude Code reads the same wordscore.hooksPath is set to .innernet/hooks for this clone. If the repo already uses its own hooks path, npx innernet prints the lines to add instead of taking it over.
the loop#
- You commit.
post-commitsends the message and the diffstat as a capture. It runs in the background; it can never slow a commit down, and a failed send never fails the commit. - You pull.
post-mergecaptures what arrived: first-parent commits fromORIG_HEADtoHEAD, oldest first, up to 40, tagged as coming from a pull. - netti folds. On the server, captures since the last fold are consolidated into the memory's dimensions. The body describes the present; superseded decisions move under
## history. - Any AI reads it. The next session in Claude Code, Cursor or Codex asks
innernet_contextand gets the current picture, including why the last three changes happened.
Write better commit messages and the memory gets better. That is the whole trick.
the repo view#
On the dashboard, a memory tied to a repo shows its repo line: branch, short sha and the last subject, and the commits as they were captured. The chat window shows the same line inside your AI chat.
teammates#
connection.json is committed, so the link travels with the code. Share the memory with a teammate (a room, see sharing); they clone, run npx innernet, and read the same memory. If their account can't see it yet, the command says so and tells them to ask the owner for room access, rather than quietly starting a second memory.
handoffs#
Long work rarely ends in one session. innernet_handoff_write leaves "where I left off" for the next session, whoever or whatever it is; innernet_handoff_read picks it up. Every write is kept (history: true shows the trail), and a scope keeps parallel streams apart. The AGENTS.md block asks every agent to write one at the end.
CI and scripts#
INNERNET_API_KEY=innernet_… npx innernet capture "deployed v2.4 to production" -s ci -t deployA key (minted under connections → api) replaces the browser sign-in. capture finds the memory from .innernet/connection.json in the working directory, or -p <dir>.