horizon-ledger
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@horizon-ledgershow me decisions related to the database migration"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Horizon Ledger
A local-first, Git-native decision ledger and workspace for humans and AI agents. Built and iterated by Codex.
Horizon Ledger is a small, composable primitive for AI-assisted engineering: not another note app, but a structured, Git-native ledger of decisions that can be read by humans, CI, and coding agents.
It answers questions that ADRs and commit logs usually fail to answer over time:
Why was this chosen?
What alternatives were rejected?
What evidence supports the decision?
What changed since then?
What should an agent know before modifying this file?
Why it exists
Most "why" knowledge dies in three places:
ADRs that are separate from code and never maintained.
PR descriptions that are unsearchable and hard to connect to other decisions.
Slack threads that disappear or lose context.
Horizon Ledger keeps decisions close to code, in Markdown + structured front matter, with explicit evidence, provenance, and graph links.
Related MCP server: LOOM
Install
Install the latest tagged Git release:
bun add github:TTAWDTT/horizon-ledger#v0.27.0or
npm install github:TTAWDTT/horizon-ledger#v0.27.0Quickstart
horizon init --mcp
horizon add --title "Use SQLite for local storage" --summary "SQLite is simple and portable."
horizon list
horizon show D-0001
horizon update D-0001 --status decided
horizon evidence D-0001 --type link --value https://sqlite.org --note "SQLite docs" --strength strong
horizon seal D-0001 E-001
horizon search sqlite
horizon why sqlite
horizon scope src/core
horizon score
horizon validate
horizon graph
horizon import-adr docs/adr --dry-run
horizon context src/core
horizon pr-context --base main --head HEAD
horizon trace --base main --head HEAD
horizon gate --base main --head HEAD
horizon export --format markdown --out DECISIONS.md
horizon doctor
horizon webChange gate
See docs/POLICY.md for opt-in decision policies.
Commit trace and attribution
Horizon can connect implementation history to decisions instead of treating any commit hash as proof:
horizon trace --base v0.25.0 --head HEAD
horizon trace --base main --head HEAD --decision D-0001 --format jsonThe trace classifies a commit as evidence when its SHA is attached, reference when the commit message names the decision, and scope when it touches the decision scope. The read-only horizon_trace MCP tool exposes the same result to agents. In a monorepo, use horizon workspace trace to preserve root provenance.
Use requireEvidence: attributed when a policy must be enforced by an implementation commit:
policy:
mode: block
requireEvidence: attributedThis accepts a commit that touches the decision scope or names the decision in its message. It still treats Git history as immutable local evidence; it does not fetch from a remote or invent proof.
Multi-root workspaces
See docs/PACKS.md for the deterministic pack format.
horizon workspace init
horizon workspace add ../another-repo --name another-repo
horizon workspace list
horizon workspace disable ../another-repo
horizon workspace enable ../another-repo
horizon workspace remove ../another-repo
horizon workspace get D-0001
horizon workspace validate
horizon workspace audit
horizon workspace pr-context --base main --head HEAD
horizon workspace gate --base main --head HEAD
horizon workspace export --format markdown --out WORKSPACE.md
horizon workspace pack export --out WORKSPACE-PACK.json
horizon workspace pack import WORKSPACE-PACK.json
horizon workspace context storage
horizon workspace trace --base main --head HEAD
horizon workspace evidence export --out EVIDENCE-PACK.json
horizon workspace evidence verify EVIDENCE-PACK.json --expect-verdict pass
horizon workspace release export --base main --head HEAD --out RELEASE-AUDIT.json
horizon workspace release inspect RELEASE-AUDIT.json
horizon workspace release verify RELEASE-AUDIT.json --expect-verdict passThe MCP server also exposes read-only horizon_workspace_list, horizon_workspace_audit, horizon_workspace_context, horizon_workspace_validate, horizon_workspace_gate, horizon_workspace_trace, horizon_workspace_pack_export, horizon_workspace_pack_import_plan, horizon_workspace_evidence_export, horizon_workspace_evidence_verify, horizon_workspace_release_export, horizon_workspace_release_inspect, and horizon_workspace_release_verify tools, so coding agents can query cross-root decisions without a cloud service. Workspace packs, evidence packages, and release audits are deterministic and SHA-256-bound, so you can review, archive, or hand off decisions without a cloud service. Pack import defaults to a read-only plan; add --write to apply it. Workspace configs are validated strictly: duplicate IDs, names, and aliases fail fast instead of silently degrading into a partial graph.
To run a local decision dashboard:
horizon web --port 4173Then open http://127.0.0.1:4173. The viewer includes:
a status and quality board
alternatives, evidence, links, scope, tags, and diagnostics
a local decision/evidence graph
search over decisions, evidence, alternatives, and scope
The viewer is served on 127.0.0.1, uses no remote assets, and reads from the Git-native files on every request.
To expose the ledger to an MCP-compatible coding agent:
horizon mcpRead-only is the default. To allow decision capture, use horizon mcp --write.
What you get
local-first, Git-friendly Markdown decisions
structured alternatives, evidence, provenance, and optional sha256 seals
graph, search, scoring, cross-repository workspaces, and portable packs
a local-only human dashboard with no telemetry
optional sha256 evidence seals, commit attribution, hash-bound gate reports, SARIF output, and portable evidence packages
useful for humans, coding agents, and opt-in CI gates
no vendor lock-in, no hosted database, no LLM required
Design principles
Local-first: plain files and plain text. Git is the source of truth.
Evidence-aware: every decision can carry links, commits, docs, tests, and conversations.
Agent-compatible: structured enough for machines, human-readable enough for people.
Boring by default: no magic, no black boxes, no forced workflow.
Roadmap
CLI and Markdown ledger (shipped)
MCP server with tools, resources, and governed prompts (shipped)
local web dashboard (shipped)
GitHub Action validation (shipped)
cross-repository workspace aggregation (shipped)
ADR import (shipped)
policy/evidence change gates, attributed commits, sha256 seals, hash-bound reports, and SARIF output (shipped)
token-budgeted decision context packs and PR context (shipped)
cross-root workspace commit traceability (shipped)
portable workspace packs and decision evidence packages (shipped)
self-contained in-toto release audits and CI release-audit artifacts (shipped)
Why open source
Horizon Ledger is open source under MIT. The project will be developed and iterated by Codex as a local-first, agent-friendly decision ledger.
Contributing
Issues and pull requests are welcome. Please keep changes small and evidence-focused.
CI validation
Add this step to a workflow:
- uses: TTAWDTT/horizon-ledger/.github/actions/validate@main
with:
root: .
strict: trueThe Action installs Horizon from this repository and runs the same decision validator used by the CLI, so warnings and errors fail before the PR is merged.
To enforce opt-in policies, add the gate Action:
- uses: TTAWDTT/horizon-ledger/.github/actions/gate@main
with:
base-sha: ${{ github.event.pull_request.base.sha }}
head-sha: ${{ github.event.pull_request.head.sha }}
root: .
artifact: trueTo retain the decisions and gate verdict as one artifact, add the evidence Action:
- uses: TTAWDTT/horizon-ledger/.github/actions/evidence@main
with:
base-sha: ${{ github.event.pull_request.base.sha }}
head-sha: ${{ github.event.pull_request.head.sha }}
root: .
artifact: trueTo retain decisions, the gate verdict, and commit attribution as one release artifact, add the release-audit Action:
- uses: TTAWDTT/horizon-ledger/.github/actions/release-audit@main
with:
base-sha: ${{ github.event.pull_request.base.sha }}
head-sha: ${{ github.event.pull_request.head.sha }}
root: .
artifact: trueThis server cannot be deployed
Maintenance
Related MCP Connectors
Git-backed platform for skills, tools, and context for AI agents
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Local-first memory and continuity for AI coding agents. No cloud backend; optional hosted lane.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to read and write a local-first knowledge base of plain markdown files in git, with governance gates for safe, hash-anchored edits.1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceA git-native decision journal that uses a local LLM to infer and store the rationale behind code changes, providing MCP tools for AI coding tools to query commit history.314 npmMIT
- AlicenseNot gradedqualityCmaintenanceGives AI coding agents persistent, branch-aware memory and a dependency-tracked task graph by storing decisions, lessons, and tasks as plain JSON and Markdown committed directly into the repository. Agents can record and fuzzy-search past decisions, dump instant project context, and create, claim, complete, and query tasks whose completion automatically unblocks downstream work.MIT
- AlicenseNot gradedqualityBmaintenanceProvides AI coding agents with git-native persistent memory and a dependency-aware task graph, letting them record and fuzzy-recall architectural decisions, lessons, and gotchas while creating, claiming, and completing tasks that auto-unblock downstream work. Stores everything as plain JSON and Markdown committed inside the repository, so context stays branch-aware, team-shared, and reviewable in pull requests.10 npmMIT