Forgelore is a single static Go binary with no runtime dependencies. It fingerprints a failed command's error, and when the same error comes back — in a different file, through a different command, on a colleague's machine — it hands your coding agent the one line that fixed it last time.
When it has nothing to say, it says nothing and costs nothing.
What it looks like
v0.1.1. The fingerprint is the
same in both halves because the file, the line and the subcommand are not
part of it — the error is. The same transcript is readable as text in
demo.txt.Install
curl -fsSL https://raw.githubusercontent.com/forgeprint/forgelore/main/scripts/install.sh | bash
Or, if npm is the idiom you already have:
npm install -g forgelore
Both give you the same binary. No sudo, nothing outside your home directory, no runtime to install alongside it.
Use it in five minutes
1. Create the store
cd your-project
forgelore init --with-git-hook
That writes .forgelore/records/, which is meant to be
committed, and a .gitignore that keeps the index, the ledger and
your personal scope out of git. The git hook refuses a commit that would
carry a secret into a shared record.
2. Record the first fix
When a command fails and you work out why, keep the answer:
go build ./... 2> err.txt
forgelore record --type fix \
--title "greet lives in internal/greeter; import it" \
--command "go build ./..." --error-file err.txt
A title states the answer, not the question. "greet lives in internal/greeter; import it", never "greet is undefined".
3. Let it answer by itself
Wire your agent up once and you stop running recall by hand —
the hint arrives when the error does. The
agents page has the wiring for each one.
4. Share it
forgelore promote <record id> # move it from your scope to the team's
git add .forgelore/records && git commit
Your colleagues get it on their next pull. There is no server.
It measures whether it helped
Forgelore assigns sessions to a treatment and a control arm — the control gets no injections — and compares them.
forgelore report --days 7
The report says plainly when a difference is not meaningful, which with a small sample it usually is not. That is the intended answer rather than a disappointing one: a tool that claims a saving it has not measured is worse than one that admits it cannot tell yet.
Which agents it supports
| Agent | Checked against a running agent | |
|---|---|---|
| Claude Code 2.1.290 | hooks, both MCP protocol eras, usage reader | A |
| Copilot CLI 1.0.91 | hooks only | B |
| Gemini CLI 0.62.0 | hooks only | B |
| Cursor 2026.10.01 | hooks only | B |
| Codex CLI | nothing yet | unverified |
A tier describes what has been checked against a running agent, not what its documentation promises. Every mapping in this project started as a reading of official docs, and every one of them was wrong somewhere that would have left Forgelore silent — so a capability nobody has exercised is listed as not measured.
Any agent that can run a shell command works today without any wiring:
forgelore init prints the line to add to your
AGENTS.md.
What it will not do
- It will not block your agent. A hook that fails, times out or cannot read its store returns quietly and the agent carries on.
- It will not invent a saving. Cost per session appears only if your agent reports what it spent.
- It will not send anything anywhere. No network calls, no telemetry, no background service. Records are files in your repository.
- It will not promote a memory on its own. Anything an
agent proposes waits in
forgelore reviewfor a person.
Verify what you installed
gh attestation verify forgelore_linux_amd64 -R forgeprint/forgelore
npm audit signatures
Release artifacts are built by a tag-triggered workflow and attested there; the npm packages are published by that same workflow over OIDC, with provenance. Verification prints nothing when it succeeds — the exit status is the answer.