Releases: Libr-AI/CommonHarness
v0.7.0 — config-preserving `harness upgrade`
What's new
harness upgrade(config-preserving) — previously a stub; upgrading meantharness init --force, which regeneratedharness.config.tomland reset your tuned values. Nowharness upgrade:- Refreshes the Managed protocol/template files (
AGENTS.md,.harness/{workflow,triage,templates}, the Claude/Cursor/Codex integrations) to the installed version. - Preserves
harness.config.toml— overlays your existing values ([verify]/[paths]/[branch]/ mode / lang / …) onto the new structure, adds new sections with defaults, bumpsharness_version. Reads the preset from your config (no--presetneeded). - Never touches your work —
active/,archive/,MEMORY.md,CURRENT.md,TODO.md,docs/specs/are left as-is. An in-progress task survives the upgrade.
- Refreshes the Managed protocol/template files (
Run it from the project root, then git diff to review.
harness upgrade
git diffCaveat: Managed files are refreshed from upstream, so manual edits to
AGENTS.md/workflow.md/ templates / integration hooks are replaced. Keep project-specific content inCONTRIBUTING.md(outside theharness:begin/endfence), your own.harness/docs, ordocs/ARCHITECTURE.md.
Compatibility
harness init --force is unchanged (still regenerates the config from the preset). Backward-compatible — upgrading even a v0.2.0-era project keeps its tuned config and adds the sections introduced since.
Install
curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.7.0/install.sh | bashv0.6.0 — persistent planning backlog (TODO.md) + durable session-boundary handoff
What's new
- Persistent planning backlog (
.harness/TODO.md) — the coordinator's cross-session todo list: tasks scoped / split / merged / prioritised but not yet turned into a brief. The in-chat plan dies with a coordinator session; this file survives it (team-shared, committed, never overwritten on re-init). A fresh coordinator's Backlog gate reads it on startup and — if non-empty — proposes the queued tasks in a recommended order and asks which brief to start before opening one; empty/absent → the normal "what do you want to do?" flow. The coordinator maintains it as it plans, and removes an item once its brief exists. - Durable session-boundary handoff —
AGENTS.mdnow carries a role-agnostic rule (re-injected at SessionStart, so it survives long sessions): at every boundary, emit the complete next kickoff inline with the task-id already filled — in full every time, never abbreviated, never a pointer-to-file, never "do you have it?".start-coordinatorstep 12,start-implementerstep 11, andworkflow.mdare unified to it. This fixes the degradation where later phase hand-offs stopped emitting the prefilled kickoff as a session grew. - Resident coordinator — the coordinator is now a standing planner across the whole project (not one-shot). Phase-to-phase hand-offs are the implementer's own job; the coordinator suggests starting a fresh session only after a very large task — capturing remaining work in
TODO.mdfirst.
Compatibility
Backward-compatible. .harness/TODO.md starts empty, so the Backlog gate stays silent until you queue something. Existing projects: re-render with harness init --force to pick up the new templates (your TODO.md / MEMORY.md / CURRENT.md / active/ / archive/ are preserved).
Install
curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.6.0/install.sh | bashv0.5.0 — agent-driven memory-import gate; MEMORY at every entry point
What's new
- Memory-import gate (agent-driven) — adopting harness into a project an agent already worked on? On the first
harness start, the coordinator looks for prior agent memory about this project and offers to unify it into.harness/MEMORY.mdso every tool reads it going forward. It detects intelligently (by purpose, tolerating name/case variants — no fixed filename list), in two places: the repo, and your user-level store scoped to this project — Claude Code~/.claude/projects/<repo>/, Codex session logs (~/.codex/sessions), CursorworkspaceStorage. Only if it finds prior memory does it ask which source to import (repo / user-level / both), then distils into.harness/MEMORY.md(relocating any architecture doc, rebuilding task history into.harness/archive/, reconciling same-name conflicts). Detection lives in the agent, not the CLI — the previousADOPT-PENDINGCLI scan is removed. - MEMORY at every entry point — the Claude Code / Codex SessionStart hooks now also surface
.harness/MEMORY.md(previously onlyCURRENT.md+AGENTS.md+ the architecture doc). Combined with the Cursor rule and the coordinator/implementer prompts, the unified memory is loaded in every session — not just when a protocol prompt is pasted. - Cleaner coordinator hand-off — points you to the saved brief for review instead of dumping its full contents inline; returns only the ready-to-paste implementer kickoff (task-id prefilled).
Compatibility
Backward-compatible. Gated by [adoption] on_init (default auto). No prior memory → the gate finds nothing and stays silent. Existing projects keep working; re-render with harness init --force to pick up the new templates.
Install
curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.5.0/install.sh | bashv0.4.0 — brownfield adoption gate + architecture doc as global basis
What's new
- Adoption gate (brownfield onboarding) — installing into a project that already has agent context (a
MEMORY.md, adocs/folder, or agent instruction docs)?harness initdetects it and writes.harness/ADOPT-PENDING. The firstharness startruns an adoption task that distils prior context into.harness/MEMORY.md(linking anything not distilled — nothing is lost), relocates the architecture doc intodocs/ARCHITECTURE.md, rebuilds prior task history into.harness/archive/, and reconciles same-name conflicts (AGENTS.md/CONTRIBUTING.md/CLAUDE.md). Human-confirmed at every step. Gated by[adoption] on_init. - Config gate — the chosen preset only seeds
harness.config.toml; it doesn't know your project. On the firstharness start, the coordinator inspects the real repo (manifest, lockfile, scripts, source/test dirs — for any stack) and proposes corrected[verify]/[paths], then edits the config after you confirm. So picking a preset that doesn't fit (e.g.python-uvon a Node app) still converges on a correct config — no hand-editing. Detection lives in the agent, not the CLI, keeping the tool universal. - Architecture doc as a global basis —
docs/ARCHITECTURE.md(path configurable) is read at every entry point — coordinator, implementer, the CursoralwaysApplyrule, and the SessionStart hooks (Claude + Codex). On scaffold the coordinator asks whether you'll provide one and records it viaharness arch. - New CLI —
harness arch [yes|no]. Newnodepreset. New config blocks[adoption]/[architecture]. - Cleaner install — tag installs no longer print git's harmless "is not a commit!" warning / detached-HEAD block.
Compatibility
Backward-compatible. Existing and clean projects are unaffected: no prior context → no adoption task; the config gate only proposes changes you confirm. New config blocks are absent-safe. Greenfield still routes to the scaffold path.
Install
curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.4.0/install.sh | bashv0.3.0 — Codex hooks, settings merge safety, multi-developer mode, i18n
What's new
- Codex hooks —
harness initnow generates.codex/hooks.json+ an executablecheck-harness-state.shwhencodex_mcpis enabled (previously only the MCP skill was rendered, so the protocol'sPreToolUse/SessionStartchecks never fired in a Codex session). - settings.json merge safety — harness now owns only the
hookskey of.claude/settings.jsonand.codex/hooks.json. Re-rendering replaceshookswhile preserving every other top-level key you add (permissions,env, …), even under--force, soharness upgradeno longer clobbers project-added settings. - Multi-developer mode —
.harness/CURRENT.mdis now per-clone local state (git-ignored); the shared truth across a team is the committed.harness/active/brief set. New[collaboration] mode(solo|team) set viaharness mode;harness statusgains a team view listing every active brief with owner + branch. - Language (i18n) — conversation always mirrors the user; files written into the repo use
[language].artifacts, confirmed once and persisted viaharness lang <code>. The coordinator confirms collaboration mode + artifact language on firstharness start. - Coordinator inline handoff — the coordinator now returns the task brief inline as markdown plus a ready-to-paste implementer kickoff with the task-id already filled, removing manual copy steps.
Compatibility
Backward-compatible. Existing projects default to solo behavior (the single-task flow is unchanged); [collaboration] / [language] are absent-safe (treated as unset). harness init --force and re-renders are safe — the new JSON hooks-merge and .gitignore handling are idempotent.
Install
curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.3.0/install.sh | bashv0.2.0 — scaffold path + TODO gate + Spec gate
What's new
- Scaffold path — third triage outcome for greenfield bootstraps. 4 pre-named phases: architecture decisions → directory skeleton → first runnable module → CONTRIBUTING fill + CI.
- Greenfield detection at
harness init: auto-detects (no manifest + no source dirs + no architecture doc + README ≤200B) or force with--greenfield/--no-greenfield..harness/SCAFFOLD-PENDINGmarker drives the routing. - TODO gate — coordinator auto-detects unfilled
🛠 TODO (project maintainers)blocks inCONTRIBUTING.mdand proposes afill-contributingprep task that scans manifest/CI/formatter configs, presents candidates, writes only after user confirms. - Spec gate — for tasks crossing 2+ cross-cutting dirs / introducing new external deps / changing external interfaces / affecting the data model, the brief gains a
spec: docs/specs/<task-id>.mdfield and a Phase 0 to write the spec. Subsequent phases re-read the spec as the design authority.
Compatibility
Brownfield projects unchanged: same triage flow, no marker, no default spec emission. harness init --force re-runs are safe on existing projects.
Install
bash curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.2.0/install.sh | bash