harness-app-template
AGENTS.md0 starsChanged 6 months agoMITView on GitHub
This file is the canonical agent context for this project. CLAUDE.md and GEMINI.md are committed symlinks that point at this file, so every vendor agent reads the same body on a fresh clone. Edit only this file. just bootstrap verifies the symlinks and repairs any that are missing or stale. A polyglot monorepo scaffolded from templates/polyglot-monorepo against Tool-Belt Harness Standard v0.1 (or whichever version this scaffold targets; check the template's manifest.json). The harness gives you 12 named slots wired in:…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,542 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository24 other files it gives its agents.
- architectureSkill
- before-after-evidenceSkill
- chrome-devtools-deepSkill
- ci-optimizationSkill
- configurationSkill
- continuous-deliverySkill
- dependenciesSkill
- developer-experienceSkill
- documentationSkill
- drySkill
- environmentsSkill
- error-handlingSkill
- loggingSkill
- observability-queriesSkill
- orchestrating-a-vps-agent-swarmSkill
- playwright-debugSkill
- principles-and-patternsSkill
- purpose-and-scopeSkill
- running-experimentsSkill
- securitySkill
- software-complexitySkill
- testingSkill
- typesSkill
- versioningSkill
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
25 rules. About 0 are common, 2 are distinctive, and 23 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
23
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 47
Read the report before changing code that touches:
- Very specific: line 89
architecture: Use when reviewing architectural concerns: module boundaries, dependency direction, layer discipline, bounded-context … - Very specific: line 92
ci-optimization: Use when diagnosing slow CI or excessive runner costs, optimizing validation pipelines, reviewing caching and sharding, … - Very specific: line 93
configuration: Use when reviewing configuration concerns: env-var layering, typed config objects, startup validation, secret/non-secret … - Very specific: line 94
continuous-delivery: Use when reviewing delivery concerns: DORA four key metrics, pre-merge gating, trunk-based development, fast … - Very specific: line 95
dependencies: Use when reviewing dependency concerns: lockfile health, version pinning, immutable references, maintenance signals, … - Very specific: line 96
developer-experience: Use when reviewing developer-experience concerns: single-command onboarding (contributors and end-users), … - Very specific: line 97
documentation: Use when reviewing documentation concerns: README presence and quality, public API documentation, ADR coverage for … - Very specific: line 98
dry: Use when reviewing DRY concerns: knowledge-vs-text duplication, repeated business rules across boundaries, magic constants, … - Very specific: line 100
error-handling: Use when reviewing error-handling concerns: error taxonomy, propagation discipline, swallow-vs-crash, retry semantics … - Very specific: line 101
logging: Use when reviewing logging concerns: structured-vs-unstructured logs, log-level policy, secret and PII redaction, correlation … - Very specific: line 105
principles-and-patterns: Use when reviewing cross-cutting design principles: SOLID applicability, separation of concerns, dependency … - Very specific: line 106
purpose-and-scope: Use when reviewing purpose-and-scope concerns: stated project purpose, declared in-scope and out-of-scope, non-goals, … - Very specific: line 108
security: Use when reviewing security concerns: secrets in code, SAST coverage, input validation, authn/authz boundaries, sensitive-data … - Very specific: line 109
software-complexity: Use when reviewing software complexity concerns: cognitive load, cyclomatic and cognitive complexity bounds, … - Very specific: line 110
testing: Use when reviewing testing concerns: pyramid coverage (unit, integration, E2E), test code quality, TDD discipline, regression … - Very specific: line 111
types: Use when reviewing type-system concerns: type-coverage in public APIs, primitive obsession vs refinement, runtime validation at … - Very specific: line 112
versioning: Use when reviewing versioning concerns: declared scheme (semver/calver/ZeroVer), changelog hygiene, deprecation policy and … - Distinctive: line 169
Use the upstream orchestrator like this after installation:
- Very specific: line 193
If you delegate an implementation task to a non-interactive claude -p invocation inside this project, use the empirically-validated flag …
- Very specific: line 235
MUST NOT be committed. Copy .claude/settings.local.example.json to .claude/settings.local.json (gitignored) and replace …
- Very specific: line 268
Security gates: read security.md once before changing hook, dependency, or CI policy.
- Very specific: line 296
Before writing any mock, read docs/development/mocks.md.
- Very specific: line 297
Every mock must call assert_test_env!() (Rust) or assertTestEnv() (TypeScript) as its first line — this throws immediately if APP_ENV != …
- Very specific: line 307
When triaging tasks, run bv --robot-triage as your single entry point.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent context ({{PROJECT_NAME}})
This file is the canonical agent context for this project.
CLAUDE.mdandGEMINI.mdare committed symlinks that point at this file, so every vendor agent reads the same body on a fresh clone. Edit only this file.just bootstrapverifies the symlinks and repairs any that are missing or stale.
What this project is
A polyglot monorepo scaffolded from templates/polyglot-monorepo against Tool-Belt Harness Standard v0.1 (or whichever version this scaffold targets; check the template's manifest.json).
The harness gives you 12 named slots wired in: stack-manager, inspector, hooks, telemetry-sdk, observability-stack, sensors, profiling, agent-plugins, task-runner, secret-scanner, doc-validator, and versioning. Some slots ship as stubs until you replace them with a real plugin; each slot has a contract.
Quick runbook
just # list every recipe with a one-line description
just bootstrap # verify vendor symlinks + validate cross-cutting deps
just stack boot # boot the isolated observability stack
just stack ports # print eval-safe per-worktree ports
just stack --help # stack-manager slot entrypoint
just inspector --help # evidence-capture utilities (screenshot, record, keyframes)
just fitness # READ-ONLY architectural-health report (see below)
just profile --help # backend, frontend, startup profiles + per-signal budgetsArchitectural fitness feedback (read this before changing code)
This template measures architectural fitness on every commit and ratchets
the floor upward — so a regression on complexity, coupling, cycles,
security findings, or licensing fails the gate. The ratchet is
implemented in harness/sensors/gate.mjs and the floors live in
harness/sensors/baseline.json.
The agent-facing feedback surface is just fitness:
just fitness # full live report (slow, ~108 s); runs the
# full sensors pipeline read-only
just fitness --quick # floor-only view, instant; reads baseline.json
# without re-scanning
just fitness --quick --format=summary # one-line summary (used by pre-commit)
just fitness --format=json # structured payload for automationRead the report before changing code that touches:
- function complexity (MT01
max-cognitive,max-cyclomatic,high-cognitive-fn-count) - module coupling and main-sequence distance (MD01)
- circular dependencies (ST01)
- security findings (SC01) and license allowlist (LG01)
- startup-time benchmarks (PF01)
Status taxonomy:
[ OK ] PASS— comfortable headroom against the floor; safe to ship.[NEAR] AT-RISK— at or within ~10% of the floor; the next regression on that metric will trip the ratchet. Refactor before committing if you are about to add complexity or coupling on this axis.[FAIL]— already below the floor;just sensors gatewill reject the commit. Fix the code so the metric returns at or below the floor, or, if the change is intentional, runjust sensors gate --update-baselineto relax the floor as a reviewable audit-trailed edit toharness/sensors/baseline.json.[ -- ] SKIP— no reading or no floor for that metric (typically because--quickskipped the live scan or the adapter is not present in this environment).
The pre-commit hook always prints the one-line summary so you do not
need to remember to run the command — but just fitness is the
canonical surface when you want the full per-metric headroom table.
The report is READ-ONLY: it never mutates baseline.json or changes
gating behavior. The ratchet authority remains just sensors gate
(local single-shot) and the fitness GitHub Actions job (canonical CI
ratchet).
Skills available in this project
This scaffold ships with on-demand skills under .claude/skills/. When a task matches a skill's purpose, invoke it via the Skill tool by name (bare, unnamespaced; project-local skills take precedence over plugin-installed ones with the same name).
The list below is GENERATED from each skill's SKILL.md frontmatter by
scripts/agents-skills.ts. Do not edit it by hand: change the skill's
frontmatter instead, then run just agents skills --write. A drift check
(just agents skills) runs in lefthook pre-commit and in the CI scripts
job, so a stale list fails the gate.
<!-- agents-skills:begin -->architecture: Use when reviewing architectural concerns: module boundaries, dependency direction, layer discipline, bounded-context isolation, ADR coverage, premature abstraction, and structural fitness for changebefore-after-evidence: Produce a verifiable evidence bundle for a fix: screenshot pair, optional flow recording, ffmpeg keyframe grid, trace correlation. Use when claiming "fix verified" so the artifacts can be diffed by a reviewer (human or LLM).chrome-devtools-deep: Reach for raw Chrome DevTools Protocol when Playwright's high-level API isn't enough: performance traces, source-mapped console stacks, heap snapshots, deep network introspection. Stay inside Playwright vianewCDPSessionrather than running raw websocat.ci-optimization: Use when diagnosing slow CI or excessive runner costs, optimizing validation pipelines, reviewing caching and sharding, or comparing hosted and self-hosted runners. Deployment and release policy belong to continuous-delivery.configuration: Use when reviewing configuration concerns: env-var layering, typed config objects, startup validation, secret/non-secret separation, schema discoverability, environment-dependent defaults, twelve-factor compliance, magic numberscontinuous-delivery: Use when reviewing delivery concerns: DORA four key metrics, pre-merge gating, trunk-based development, fast feedback, single-artifact promotion, health-gated deploys, automated rollback, deploy/release decoupling via feature flags, deploy frequency, runbook freshness, deploy-credential scoping, pipeline bottleneck visibility, supply-chain attestationdependencies: Use when reviewing dependency concerns: lockfile health, version pinning, immutable references, maintenance signals, transitive audit gates, monorepo version skew, reviewable lockfiles, license posturedeveloper-experience: Use when reviewing developer-experience concerns: single-command onboarding (contributors and end-users), inner-loop speed, task-runner discoverability, recipe-as-thin-wrapper discipline, error-message actionability, formatter/linter automation, AI-agent ergonomics, reproducible local environment, parallel-worktree dev stacksdocumentation: Use when reviewing documentation concerns: README presence and quality, public API documentation, ADR coverage for non-obvious decisions, inline rationale comments, TBD/placeholder hygiene in shipped docsdry: Use when reviewing DRY concerns: knowledge-vs-text duplication, repeated business rules across boundaries, magic constants, configuration duplication, copy-pasted test fixtures, premature abstraction risk, rule-of-three for extractionenvironments: Use when reviewing environment concerns: dev/staging/prod parity, declarative environment manifests, build vs runtime separation, environment promotion path, secret-loader parity across environments, reproducible local setup, ephemeral / preview environments per PR with auto-teardown, data parity (shape-realistic seed and anonymized prod copies), mechanically enforced parity ruleserror-handling: Use when reviewing error-handling concerns: error taxonomy, propagation discipline, swallow-vs-crash, retry semantics with backoff and idempotency, exit codes as API, error messages as contract, cause-chain preservationlogging: Use when reviewing logging concerns: structured-vs-unstructured logs, log-level policy, secret and PII redaction, correlation IDs in distributed systems, log/trace linkage, print statements in production code pathsobservability-queries: Canonical LogsQL, PromQL, and Jaeger-compatible trace queries against the harness Victoria stack. Use when investigating a bug via logs, metrics, traces, building an evidence bundle, or wiring a new alert. Includes copy-pasteable curl examples and gotchas: severity, not level; case-sensitive enum; mandatory| fieldsprojection.orchestrating-a-vps-agent-swarm: Guidance for managing a multi-agent swarm on this template's VPS environment. Use when coordinating multiple autonomous agents (Claude Code, Codex, Gemini) across parallel beads, handling double-claim collisions via Agent Mail, and using beads for global task state. Covers per-agent autonomy toggles (YOLO vs review-gated), multi-model layered review, the human framing gate, and the canonical CLI surface (bd,bv,am,proj,ntm).playwright-debug: Drive your app via Playwright for UI debugging: navigation, console errors, network failures, accessibility-tree DOM snapshots, JS evaluation. Use when investigating UI bugs, validating fixes, or capturing what the user sees.principles-and-patterns: Use when reviewing cross-cutting design principles: SOLID applicability, separation of concerns, dependency direction, composition vs inheritance, coupling and cohesion, OO-vs-functional style consistency, pattern enforcement style, project-level bounded-context couplingpurpose-and-scope: Use when reviewing purpose-and-scope concerns: stated project purpose, declared in-scope and out-of-scope, non-goals, plan-purpose alignment, scope-creep within a single change, project-level bounded contexts, dependency-purpose linkagerunning-experiments: Use when creating, scaffolding, executing, scoring, or auditing a hypothesis-first experiment in this project, OR when capturing a prospective experiment as a proposal underdocs/experiments/proposals/. Trigger phrases include "new experiment", "new probe", "run an experiment", "score the probe", "write the verdict", "hypothesis first", "design the eval pack", "two-commit rule", "hypothesis scorecard", "write a retrospective for", "is this an experiment", "capture this as a proposal", "prospective experiment", "lock this idea", "promote this proposal". Covers theexperiments/<date>--<slug>/four-file layout (README / eval-pack / results / verdict), the verdict vocabulary (go / no-go / inconclusive), the proposal lifecycle (docs/experiments/proposals/<slug>.md→ promoted experiment), and the relationship between an experiment and its retrospective underdocs/retrospectives/. Do NOT use for: ad-hoc debugging sessions, code review, or skill authoring.security: Use when reviewing security concerns: secrets in code, SAST coverage, input validation, authn/authz boundaries, sensitive-data handling, dependency CVEs, SSRF, hand-rolled escaping, threat modeling for high-stakes changes, defense in depth, agentic-AI / LLM tool-call attack surface (prompt injection, indirect injection, MCP abuse)software-complexity: Use when reviewing software complexity concerns: cognitive load, cyclomatic and cognitive complexity bounds, deep-vs-shallow modules, accidental coupling, premature abstraction, asymmetric simplicity, comments-explain-whytesting: Use when reviewing testing concerns: pyramid coverage (unit, integration, E2E), test code quality, TDD discipline, regression discipline, FIRST principles, feedback-loop speedtypes: Use when reviewing type-system concerns: type-coverage in public APIs, primitive obsession vs refinement, runtime validation at trust boundaries, soundness gaps and escape hatches, narrow vs wide types, strict-mode disciplineversioning: Use when reviewing versioning concerns: declared scheme (semver/calver/ZeroVer), changelog hygiene, deprecation policy and migration paths, public-API stability classification, version-bump automation, manifest-drift across multiple files, release process (cut-a-release flow, release branches, release gates)
<!-- agents-skills:end -->Invocation pattern (this is how the Skill tool dispatches them):
Skill({skill: "running-experiments"})Upstream harness-engineering principle skills
This template references, but does not vendor, the upstream harness-engineering
plugin skills from
syntropic137/harness-engineering/skills.
Keeping the principle bodies upstream avoids duplicated guidance drifting across
consumer forks.
Install the Claude plugin from a local clone:
git clone https://github.com/syntropic137/harness-engineering.git ~/.claude/plugins/harness-engineering
claude plugin install ~/.claude/plugins/harness-engineering --scope projectFor Codex-style skill discovery, keep the same upstream clone and symlink the skills directory:
git clone https://github.com/syntropic137/harness-engineering.git ~/.codex/harness-engineering
mkdir -p ~/.agents/skills
ln -s ~/.codex/harness-engineering/skills ~/.agents/skills/harness-engineeringSmoke-check the reference from a fresh clone:
bun run scripts/harness-engineering-skills.ts --fresh-cloneThe upstream skill inventory is:
| Skill | Role | Template note |
application-legibility | Expose runtime state, errors, causal chains, and trace context as machine-readable application surfaces. | Use when adding real app endpoints; the bare template has only example apps. |
approved-scenarios | Define what agents may do unilaterally versus what requires escalation. | Reference-only until this template grows a machine-readable approval policy file. |
authoring-skills | Author or audit Claude skills and their routing/frontmatter shape. | Useful immediately for project-local skill maintenance. |
autonomous-validation-loop | Shape observe-fix-restart-rerun-diff loops with iteration budgets and structured verdicts. | Use when a consumer adds deterministic workloads or UI journeys. |
browser-legibility | Wire browser perception through CDP, Playwright, DOM, accessibility tree, network, console, screenshots, and video evidence. | Complements the local Playwright and Chrome DevTools skills. |
harness-review | Orchestrate the sibling principle skills into a parallel harness audit. | Invoke from a top-level claude -p session after installing the plugin. |
long-running-durability | Keep multi-hour agent tasks resumable through checkpoints, durable state, retries, and budgets. | Reference-only until long-running task state is wired into this template. |
performance-gates | Design startup, latency, span-duration, and journey performance budgets as mechanical gates. | Useful now for the startup-time gate; expand as consumers add real workloads. |
repo-knowledge-map | Keep agent-facing context small, discoverable, co-located, and mechanically drift-checked. | Useful now; this CLAUDE.md is the repo map entry point. |
skill-testing | Empirically test skill routing and whether a skill body earns its context cost. | Useful for both upstream plugin and in-tree skill edits. |
telemetry-pipeline | Shape OTLP/OpenTelemetry collection, routing, enrichment, fanout, buffering, and backend independence. | Useful with the template observability stack; apps must still emit signal. |
telemetry-query | Make logs, metrics, traces, schemas, and cross-signal correlation queryable by agents. | Pairs with the local concrete observability-queries skill. |
worktree-isolation | Separate parallel agent work by worktree, ports, databases, logs, telemetry labels, and teardown. | Design guide only until per-task worktree wiring lands. |
Use the upstream orchestrator like this after installation:
claude -p --verbose \
--permission-mode bypassPermissions \
--append-system-prompt-file ./CLAUDE.md \
"Use the harness-review skill from the installed harness-engineering plugin to audit this repository. Target: . Return findings first, then residual risks."Workspace layout
ws_apps/: your runnable units. Each subdir can pick its own stack (TS, Rust, Python, Go, and so on).ws_packages/: shared libs. Same polyglot rule.harness/: slot plugins. Rust-first where it makes sense; see Standard §4.infra/: the observability-stack plugin (docker-compose'd)..claude/: agent plugins for Claude Code (skills, commands, subagents, hooks).CLAUDE.mdandGEMINI.mdare committed symlinks pointing atAGENTS.md.
Cross-platform notes
- macOS + Linux: first-class. Just install
justand a container runtime. - Windows: aspirational. Vendor symlinks need dev-mode or admin; a copy-sync fallback ships in template v0.2. Until then,
git config core.symlinks trueis required before cloning on Windows or the committed vendor links materialize as plain text files containing the link target.
Delegating work to claude -p
If you delegate an implementation task to a non-interactive claude -p invocation inside this project, use the empirically-validated flag set + prompt template (5 paired trials in agentic-harness-lab retro 023 + S12-S16 synthesis):
claude -p --verbose \
--permission-mode bypassPermissions \
--append-system-prompt-file ./CLAUDE.md \
--output-format stream-json --include-hook-events --include-partial-messages \
--max-budget-usd 4.00 \
--no-session-persistence \
"$TASK_DESCRIPTION
Before extending: WebSearch <topic> and CITE >=N sources in the commit message.
Use conventional commits. N commits total (Part 1 then Part 2 if applicable)."Why each piece:
bypassPermissions:acceptEditsdenies Bash; this is the realistic-autonomy mode (S5).--append-system-prompt-file: injects this CLAUDE.md so the agent sees project conventions. CWD auto-discovery also works.--output-format stream-json --verbose: tool calls are otherwise invisible; required together (S7 footgun).--include-hook-events: emits lefthook firings as parseable events.--max-budget-usd: hard cap. macOS lackstimeout; this is the only enforced cap.--no-session-persistence: clean trials don't pollute interactive history.
Why the prompt template:
- Strong-verb "WebSearch and cite": descriptive verbs like "verify" are silently ignored (S12 vs S13 found a 0 to 2 WebSearch delta).
- Explicit "Use conventional commits": without it,
claude -pstops at "Ready to commit when you say go" instead of actually committing (S13 to S14).
What works mechanically (no prompt phrasing required):
- Hard gates: lefthook (
cargo fmt,cargo clippy,secret-scan, etc.) and commit-msg (cog-verify) bind every commit. The agent retries after gate bounces; it does NOT use--no-verify.
What needs explicit naming:
- Project-local skills under
.claude/skills/: dispatched via the Skill tool by bare unnamespaced name when the task mentions them. Skills are NOT auto-discovered in-p.
Agent Mail wiring (opt-in)
This template targets the VPS swarm workflow (see
.claude/skills/orchestrating-a-vps-agent-swarm/). Cross-agent
coordination flows through Agent Mail, exposed to Claude Code, Codex,
and Gemini as the mcp-agent-mail HTTP MCP server at
http://127.0.0.1:8765/mcp/.
The wiring is opt-in by design: the Bearer token is per-host and
MUST NOT be committed. Copy .claude/settings.local.example.json to
.claude/settings.local.json (gitignored) and replace
YOUR_BEARER_TOKEN_HERE with your host's token.
cp .claude/settings.local.example.json .claude/settings.local.json
# edit .claude/settings.local.json and set the Bearer tokenThe token is provisioned by the operator from the launchpad's
services-setup wizard (see ~/CLAUDE.md on a provisioned VPS for the
ACFS path). On the VPS the Agent Mail server runs as a systemd user
unit; the wiring above will be a dead handle until the unit is active:
systemctl --user status agent-mail
systemctl --user start agent-mail # if not runningWithout the unit, am macros start-session and every other am
operation will return a connection-refused error. With the unit and the
local settings file in place, Claude Code, Codex, and Gemini all see
the same MCP surface.
For forks that do not run a VPS swarm, leave
.claude/settings.local.json absent. The template degrades cleanly:
no Agent Mail tools appear, beads still tracks state per-project, and
no other slot depends on the MCP wiring.
Conventions worth knowing
- Token-aware: harness binaries default to terse output. Use
--verbosewhen you need it. - Evidence-driven: big changes get a hypothesis-first experiment under
experiments/<date>--<slug>/. See.claude/skills/running-experiments/. - Security gates: read
security.mdonce before changing hook, dependency, or CI policy.lefthook.ymlruns diff-scoped Biome, Gitleaks, and UBS gates;.claude/settings.jsonruns.claude/hooks/ubs-diff.shafter Claude file writes.scripts/init.tspreserves global attribution hooks by chaining any globalcore.hooksPathprepare-commit-msghook into local.git/hooks. - No
.shorMakefileas primary entrypoints.justfileis the single discovery surface. Language-native scripts allowed wherejustwould be awkward.
When you change something significant
- Load-bearing on cost/wall-clock claims → write a hypothesis-first experiment under
experiments/<date>--<slug>/. Two-commit rule (hypothesis, then run). - Tool selection → research-backed per Standard §2. Drop a decision pointer at
docs/standard/decisions/<slot>.mdlinking to the experiment. - Adding a vendor (Cursor, Aider, OpenCode, …) → add to the
just agents linkrecipe.
Where things live
docs/standard/v<X.Y>.md: the Standard this project targetsdocs/standard/decisions/<slot>.md: per-slot tool picks (with experiment links)experiments/<date>--<slug>/: hypothesis-first probesdocs/retrospectives/: post-mortems per experimentdocs/journal/: context journals across sessions
Package naming conventions
Prefixes in ws_packages/ are optional but encouraged when there is a
meaningful grouping to signal. A prefix keeps related packages co-located
in directory listings and adds key information at a glance. Use a prefix
when it genuinely clarifies the package's role; omit it when the name is
already self-evident. Examples: d_ for dev/test tooling, i_ for
infrastructure utilities.
Mocks
Before writing any mock, read docs/development/mocks.md.
Every mock must call assert_test_env!() (Rust) or assertTestEnv() (TypeScript)
as its first line — this throws immediately if APP_ENV != "test", preventing
mocks from ever running outside a test environment.
This template is a v0.1 draft. Edit freely for your project; the canonical Standard lives in the agentic-harness-lab repo.
Issue triage
When triaging tasks, run bv --robot-triage as your single entry point. See docs/development/beads-viewer.md for the full command reference, filtering options, and session workflow.
Issues are tracked with bd (gastownhall/beads). The store is a local Dolt database under .beads/; .beads/issues.jsonl is a passive export and the only part git tracks. The lefthook beads-export pre-commit job keeps that export current, so you commit .beads/ alongside your change rather than running a sync step by hand.
bd ready # available work
bd show <id> # issue detail + dependencies
bd update <id> --claim # claim (atomic)
bd close <id> --reason "..." # finalizeTwo things to know before you trust bd or bv output:
bd importis atomic and fails quietly. One bad record rolls back the whole file and leaves the store at count 0, with the error scrolled off above a usage dump. Confirm withbd count, never with the tail of the import. Runbun run scripts/beads-migrate.ts preflight <file.jsonl>before importing foreign JSONL.bvprintsbrcommands. It reads abdstore correctly, but everyclaim_commandit emits is hardcoded to the oldbrbinary. Translate before pasting; the mapping table is in docs/development/beads-viewer.md.
This project migrated from br (beads_rust) to bd on 2026-08-19 — see ADR-0032 for what was measured, what was lost, and how to roll back.
Do not run
bd initin this repo. It is not idempotent housekeeping: it writes a git commit under your name, repointscore.hooksPathat.beads/hooks/(shadowing lefthook), injectsSessionStartandPreCompacthooks into.claude/settings.json, and appends its own instruction block to this file. The store is already initialized; if you must re-run it, review and revert those four side effects afterwards.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

