Skip to content

Releases: Libr-AI/CommonHarness

v0.7.0 — config-preserving `harness upgrade`

25 Jun 14:48

Choose a tag to compare

What's new

  • harness upgrade (config-preserving) — previously a stub; upgrading meant harness init --force, which regenerated harness.config.toml and reset your tuned values. Now harness 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, bumps harness_version. Reads the preset from your config (no --preset needed).
    • Never touches your workactive/, archive/, MEMORY.md, CURRENT.md, TODO.md, docs/specs/ are left as-is. An in-progress task survives the upgrade.

Run it from the project root, then git diff to review.

harness upgrade
git diff

Caveat: Managed files are refreshed from upstream, so manual edits to AGENTS.md / workflow.md / templates / integration hooks are replaced. Keep project-specific content in CONTRIBUTING.md (outside the harness:begin/end fence), your own .harness/ docs, or docs/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 | bash

v0.6.0 — persistent planning backlog (TODO.md) + durable session-boundary handoff

25 Jun 14:11

Choose a tag to compare

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 handoffAGENTS.md now 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-coordinator step 12, start-implementer step 11, and workflow.md are 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.md first.

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 | bash

v0.5.0 — agent-driven memory-import gate; MEMORY at every entry point

24 Jun 02:46

Choose a tag to compare

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.md so 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), Cursor workspaceStorage. 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 previous ADOPT-PENDING CLI scan is removed.
  • MEMORY at every entry point — the Claude Code / Codex SessionStart hooks now also surface .harness/MEMORY.md (previously only CURRENT.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 | bash

v0.4.0 — brownfield adoption gate + architecture doc as global basis

23 Jun 08:47

Choose a tag to compare

What's new

  • Adoption gate (brownfield onboarding) — installing into a project that already has agent context (a MEMORY.md, a docs/ folder, or agent instruction docs)? harness init detects it and writes .harness/ADOPT-PENDING. The first harness start runs an adoption task that distils prior context into .harness/MEMORY.md (linking anything not distilled — nothing is lost), relocates the architecture doc into docs/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 first harness 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-uv on 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 basisdocs/ARCHITECTURE.md (path configurable) is read at every entry point — coordinator, implementer, the Cursor alwaysApply rule, and the SessionStart hooks (Claude + Codex). On scaffold the coordinator asks whether you'll provide one and records it via harness arch.
  • New CLIharness arch [yes|no]. New node preset. 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 | bash

v0.3.0 — Codex hooks, settings merge safety, multi-developer mode, i18n

23 Jun 03:46

Choose a tag to compare

What's new

  • Codex hooksharness init now generates .codex/hooks.json + an executable check-harness-state.sh when codex_mcp is enabled (previously only the MCP skill was rendered, so the protocol's PreToolUse / SessionStart checks never fired in a Codex session).
  • settings.json merge safety — harness now owns only the hooks key of .claude/settings.json and .codex/hooks.json. Re-rendering replaces hooks while preserving every other top-level key you add (permissions, env, …), even under --force, so harness upgrade no longer clobbers project-added settings.
  • Multi-developer mode.harness/CURRENT.md is 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 via harness mode; harness status gains 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 via harness lang <code>. The coordinator confirms collaboration mode + artifact language on first harness 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 | bash

v0.2.0 — scaffold path + TODO gate + Spec gate

11 May 11:03

Choose a tag to compare

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-PENDING marker drives the routing.
  • TODO gate — coordinator auto-detects unfilled 🛠 TODO (project maintainers) blocks in CONTRIBUTING.md and proposes a fill-contributing prep 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>.md field 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 ​