A harness for steering AI coding agents.
AI coding agents do the typing now. Basou is the harness you steer them from: a declarative workspace you drive each project from, an orientation layer that carries your intent across sessions, and a replayable, local-first trail of what the agents actually did — all kept in plain files next to your code.
Basou is local-first and zero-network: it reads the agent logs already on
your machine and writes only into a .basou/ directory beside your repo.
Nothing leaves your machine.
When an agent writes most of the code, the scarce thing is no longer typing — it's control: keeping a human in the saddle, steering each project the same way every time, and not losing the why between sessions. The answers to "what does this code do?" already live in the code; a read-only assistant can reconstruct them. What no after-the-fact reader can recover is the live context around a decision — the intent, the road not taken, what you were in the middle of. That has to be captured at the moment, and it has to survive the gap to the next session.
Basou is built around those two needs. It is not a dashboard you watch or an audit log you file away — it is the tack you actually hold while you work.
Declare each repo once — its visibility, its language, where its agent
instructions live — in a single manifest, and basou project derives the
rest: the capture source_roots, the AGENTS.md / CLAUDE.md / Copilot
instruction-file wiring, the .gitignore entries that keep private
canonicals out of public history, and the combined workspace view. You edit
the declaration; Basou maintains the plumbing.
The lifecycle is covered end to end and every generator is dry-run by
default (--apply to write), additive, and non-destructive:
basou project new/derive— scaffold and materialize a project's wiring from the declaration.basou project adopt/check/sync— bootstrap a roster from an existing layout and keep capture aligned with it.basou project preset/symlinks/gitignore/workspace— generate each piece of the instruction-file topology.basou project archive/rename/retrofit/teardown— evolve or unwind a repo's place in the project without hand-editing symlinks.
Instruction files: hub or self. Each repo declares where its
canonical AGENTS.md lives, via instructions: on its manifest entry:
hub(the default) — Basou's native hub-and-spoke topology. The canonicalAGENTS.mdlives once in the project anchor and each repo carries gitignored symlinks to it, so a private planning canonical is edited in one place and never committed to a public repo's history.self— the escape hatch for a repo that wants to own its instructions in its own git history (the common case for a public OSS repo): the canonicalAGENTS.mdis a regular committed file in the repo, withCLAUDE.md/ Copilot as committed spoke symlinks to it, and Basou stays hands-off about its content.
hub is the default and the recommended path; self exists so adopting
Basou never forces a repo to give up owning its own AGENTS.md. Omitting
instructions: keeps the hub behavior unchanged.
basou orient tells you where the work stands and what to do next —
drawing on the trail, not on your memory. basou decision capture and
basou note record the why and the next step at the moment you make
them, so intent survives the gap between sessions instead of being
re-derived from scratch each time you sit back down.
basou orient— the resume view: latest decisions, open tracks, the recorded next step, and whether your trail is stale.basou decision capture/basou note— record a decision (with its rationale and rejected alternatives) or the terminal next step.basou handoff generate— a regenerated, hand-editable summary for the next session or a teammate.
Capture is deterministic and does not depend on a runtime LLM — an agent hands Basou structured decisions and Basou writes them; the trail is yours, verifiable, and offline.
Both foundations rest on a simple, inspectable substrate that lives next to your code:
- JSONL as the source of truth. Every observable event — a command run,
a file changed, a decision recorded, an approval resolved — is appended to
.basou/sessions/<session_id>/events.jsonl, hash-chained and verifiable withbasou verify. - Markdown as the human view.
.basou/handoff.mdand.basou/decisions.mdare regenerated from the event log (and may be hand-edited); review them in any editor or in a PR. - Tasks as the goal unit. A task can span many sessions; its
task.mdsnapshot stays in sync with the event log.
Capturing the trail is decoupled from the agent's internal formats:
- Live-wrap records a session as it happens.
basou run claude-codewraps the process so the surrounding session is recorded without Basou knowing anything Anthropic-internal. (More live-run adapters, e.g. OpenCode, are on the roadmap.) - Native-log import covers tools after the fact, across sibling repos:
basou import claude-codeandbasou import codexderive sessions from each tool's own logs. - A local cockpit keeps it current and browsable:
basou refresh(andbasou refresh --watch) imports logs and regenerates the Markdown in one step;basou viewopens a localhost-only, no-auth web UI bound to 127.0.0.1 — a convenience over the CLI and Markdown, never exposed beyond your machine.
Also available: basou stats for per-session and aggregate activity, the
read-only @basou/sdk for reading a workspace's provenance
programmatically, and JSON Schemas (shipped in @basou/core) for every
on-disk .basou/ format. See CHANGELOG.md for the full
per-release breakdown.
# 1. Install the CLI from npm (see Installation below for the from-source path)
npm install -g @basou/cli
# 2. Initialize a workspace at the root of any Git repo
cd /path/to/your/project
basou init
# 3. Record a task + a session note
basou task new --title "Refactor login form"
basou session note --body "Started exploring auth.ts"
# 4. Regenerate the human-readable summary
basou handoff generate
cat .basou/handoff.md
# 5. Or skip the per-command typing: import the project's native agent logs
# and regenerate handoff + decisions in one step, then browse it all in a
# local web UI (localhost only, no authentication)
basou refresh
basou viewFor a step-by-step walkthrough with failure modes and sample output, see basou.dev/quickstart/. For the underlying data model, see docs/spec/.
Basou is open source, local-first, and pre-1.0, maintained by a single
author who runs it daily across their own projects. The 0.x line is being
driven toward a 1.0 release aimed at broad adoption — a version external
maintainers and teams can rely on — without giving up the local-first,
zero-network design.
What that means for you today:
- The
basouCLI surface is frozen for the0.xline — commands and flags are stable. Internal@basou/coreAPIs may still change between minor releases. - The on-disk
.basou/formats are versioned and ship JSON Schemas;1.0is where the formats and semver guarantees are committed. - Adopting is low-risk and reversible: everything lives in a
.basou/directory next to your code, nothing is sent off-machine, and the generators are dry-run-by-default and non-destructive.
For the precise semver contract — which surfaces 1.0 guarantees, how the
on-disk format is versioned, and the deprecation policy — see
docs/spec/compatibility.md.
Issues and contributions are welcome.
| Package | Description | Status |
|---|---|---|
@basou/cli |
The basou command-line tool |
Published on npm |
@basou/core |
Core library: sessions, events, approvals, git capability | Published on npm |
@basou/sdk |
Read-only SDK for reading a workspace's provenance | Published on npm |
Requires Node.js >= 20.10.0.
npm install -g @basou/cli
# Verify
basou --versionSee basou.dev/installation/ for upgrade and troubleshooting notes.
Build from main to track changes ahead of the published releases.
Requirements:
- Node.js >= 20.10.0
- pnpm >= 8.15.0
- Git
git clone https://github.com/basou-dev/basou.git
cd basou
pnpm install
pnpm -r build
pnpm --filter @basou/cli link --global
# Verify
basou --versionpnpm install
pnpm typecheck
pnpm lint
pnpm test # full unit + integration suite
pnpm -r buildbasou/
├── packages/
│ ├── core/ # @basou/core — provenance primitives
│ ├── cli/ # @basou/cli — `basou` command
│ └── sdk/ # @basou/sdk — read-only provenance SDK
├── docs/
│ ├── quickstart.md # Redirect stub → basou.dev/quickstart/
│ └── spec/ # workspace layout, schemas, CLI surface, ...
├── apps/ # Reserved for future GUI / desktop apps
├── CHANGELOG.md
└── README.md
Apache 2.0 — see LICENSE. Copyright Basou Project Contributors.
- Documentation: https://basou.dev/getting-started/
- Website: https://basou.dev
- GitHub: https://github.com/basou-dev/basou
- npm: https://www.npmjs.com/org/basou