Skip to content

Releases: Libr-AI/CommonHarness

v0.8.0 — skill-distillation gate

Choose a tag to compare

@Queen2333 Queen2333 released this 10 Jul 10:09

What's new

  • Skill-distillation gate — at task close-out, the implementer judges (from the finished task's brief/phases, spec, and diff) whether it established a reusable, generalisable procedure future tasks will repeat — e.g. "add an API endpoint end-to-end", "wire a new drag-drop group". Conservatively: most tasks yield nothing, and it proposes only a high-value candidate. If there is one, it names it, explains when it's used and what it covers, and asks whether to distil it. On your yes it writes a tool-agnostic .harness/skills/<name>/SKILL.md (name + when-to-use trigger + numbered steps + links).
    • Skills are team-shared (committed), never overwritten by harness upgrade, and read back by future sessions — the coordinator and implementer list .harness/skills/ on startup and apply a matching skill.
    • New harness skills lists the library. New [skills] distill = "auto" | "off" gate (default auto).
    • This captures reusable procedures, distinct from MEMORY.md (facts/conventions) and docs/ARCHITECTURE.md (the change-X→which-files map).

Compatibility

Backward-compatible. .harness/skills/ starts empty and the gate stays silent until a task genuinely warrants a skill. Existing projects: harness upgrade picks up the new gate/templates and creates the empty .harness/skills/ dir; your work is untouched.

Install

curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.8.0/install.sh | bash

v0.7.2 — fenced task-brief template + clearer upgrade messaging

Choose a tag to compare

@Queen2333 Queen2333 released this 29 Jun 10:42

Fixes

  • Your brief-template customization survives harness upgrade. .harness/templates/task-brief.md is now a fenced fragment: the upstream skeleton lives between harness:begin/end (refreshed on upgrade), and a new "Project brief conventions" section outside the fence is preserved across upgrades. The coordinator folds those conventions into every brief it writes. Previously the whole template was Managed, so upgrading reset any project tailoring.
  • Clearer harness upgrade messaging. It now states it applies the templates bundled with the installed CLI, and that picking up a newer release means installing that CLI first — fixing the confusion where running upgrade without reinstalling the CLI looked like the templates "didn't update."

Migration

Existing projects whose task-brief.md predates the fence are skipped on upgrade (the template now has a fence, the file doesn't). To adopt the fenced structure: back up your edits, delete .harness/templates/task-brief.md, and re-run harness upgrade (or paste the <!-- harness:begin/end --> markers around the skeleton by hand).

Upgrade is two steps

# 1) upgrade the CLI itself (fetches the new tag)
rm -rf ~/.commonharness/v0.7.2
curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.7.2/install.sh | bash
# 2) apply the new templates to a project
cd <project> && harness upgrade

v0.7.1 — fix kickoff truncation

Choose a tag to compare

@Queen2333 Queen2333 released this 29 Jun 09:07

Fix

  • Kickoff no longer truncated. A session kickoff is emitted inline wrapped in a code block; the two templates emitted as kickoffs each contained a fenced example (start-implementer's session-log header, start-coordinator's CURRENT.md update). That inner fence closed the wrapping code block early, so the kickoff was cut off at the `### Session <ISO-timestamp> — <tool> — Phase <n>` line. Both examples are now inline text, so the full kickoff survives being pasted inside a code block. A regression test asserts the kickoff templates contain no fence.

Install

curl -fsSL https://raw.githubusercontent.com/Libr-AI/CommonHarness/v0.7.1/install.sh | bash

v0.7.0 — config-preserving `harness upgrade`

Choose a tag to compare

@Queen2333 Queen2333 released this 25 Jun 14:48

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

Choose a tag to compare

@Queen2333 Queen2333 released this 25 Jun 14:11

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

Choose a tag to compare

@Queen2333 Queen2333 released this 24 Jun 02:46

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

Choose a tag to compare

@Queen2333 Queen2333 released this 23 Jun 08:47

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

Choose a tag to compare

@Queen2333 Queen2333 released this 23 Jun 03:46

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

Choose a tag to compare

@Queen2333 Queen2333 released this 11 May 11:03

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 ​