A provider-agnostic scaffolding kit for running structured multi-agent workflows in your codebase.
$ npx -y skills add enmanuelmag/agent-harness-kit --agent claude-code
Repo: enmanuelmag/agent-harness-kit
What's inside
A provider-agnostic scaffolding kit for running structured multi-agent workflows in your codebase.
Instead of letting AI agents roam freely through your project with no memory, no coordination, and no audit trail, agent-harness-kit gives them a shared structure: a task backlog, a defined workflow, a persistent log of every action taken, and a health gate that must be green before any work begins.
You stay in control. The agents stay on track.
Visit the website to view a full explanation, examples, and other tools!
npx ahk init
ahk initahk buildahk modelsahk dashboardahk statusahk healthahk doctorahk syncahk serveahk task addahk task listahk task done <id|slug>ahk resetahk migrateahk exportahk init
agent-harness-kit.config.{json|ts|mjs|cjs}health.shIf you don't know what is Agent Harness, you can check this blog post: Introducing Agent Harness.
Most AI coding tools give you a single agent with a chat window. That works for small tasks. It breaks down when:
agent-harness-kit solves all of this with a thin layer of scaffolding and a local MCP server that any MCP-compatible AI tool can connect to.
ahk init
└── creates config, agent definitions, task backlog, health check
AI tool opens your project
└── reads .claude/mcp.json, opencode.json, .codex/config.toml, or .grok/config.toml
└── spawns: ahk serve (stdio MCP server)
via your package manager (npx/pnpm exec/yarn run/bunx) when the
package is a local dependency, or the bare binary when it isn't
Agent starts working
└── tasks.get() → picks a task from the backlog
└── tasks.claim(id) → atomically claims it (no double-work)
└── actions.start() → registers its action
└── actions.write() → logs sections: result, files, blockers…
└── actions.complete() → closes the action
Lead → Explorer → Consultant → Builder → Reviewer
└── each role has its own agent definition with clear responsibilities
└── the harness DB records the full history
Everything is stored locally in a SQLite database (.harness/harness.db). No cloud, no external services, no API keys required beyond what your AI tool already uses.
Note: "Grok Build" here refers to xAI's official Grok Build CLI (
provider: 'grok-cli') — it is unrelated to the unofficial, community-maintainedgrok-cli/grok-devnpm packages.
tasks.claim() which uses a SQLite transaction to prevent two agents from picking up the same task at the same time.health.sh and get a green exit before starting or closing any task. You define what "healthy" means.docs.search(query) to find relevant content in your project's docs folder before writing code.ahk-use-cases, ahk-feature, and ahk-fix turn product requests, Jira ideas, and defects into reviewable drafts in docs/specs/. ahk-use-case-tech creates a linked technical draft only after an approved use case, feature, or fix; MCP can search, read, edit, relate, validate, and approve the documents.better-sqlite3 on Node ≥ 22 or bun:sqlite on Bun). Switch to PostgreSQL or MySQL with a single config line — same schema, same MCP tools, same workflow.ahk init can scaffold the harness into your home directory (~/.claude or ~/.config/opencode) to share it across all projects.# Install in your project as a dev dependency (recommended)
npm install --save-dev @cardor/agent-harness-kit
Then run the interactive setup inside your project:
npx ahk init
The config file format depends on whether the package is installed locally.
ahk initchecks that first, before anything else:
Local install Generated config Why Not installed (global-only CLI) agent-harness-kit.config.jsonYour project cannot resolve @cardor/agent-harness-kit, so a TypeScript config'simport typewould red-underline in your editor and failtsc --noEmiton a package that isn't there. JSON has no imports and no types — nothing to resolve, zero editor errors.Installed ( npm install --save-dev @cardor/agent-harness-kit).ts,.mjsor.cjsThe package resolves, so you get the full typed config with editor autocompletion. Which of the three is picked is unchanged: .tswhen atsconfig.jsonis present, otherwise.mjs/.cjsbased onpackage.jsontype.The trade-off is autocompletion: a JSON config has no type information behind it, so your editor cannot suggest fields. Installing the package locally and switching to a
.tsconfig gets that back. There is no$schemakey in the generated JSON — no JSON Schema forHarnessConfigis published yet, and pointing at a URL that doesn't resolve would only swap a type error for a fetch error.Existing projects are never converted. If a config of any extension already exists, it keeps working and keeps its format — installing or removing the package locally will not silently rewrite it.
loadConfig()reads all five formats, andahk initstops when it finds any of them.A local install is still recommended even though it is no longer required: it pins the CLI version so behavior stays reproducible across your team and CI instead of drifting with whatever is installed globally on each machine. A global-only install is fully supported —
ahkdoes not print a local-install warning, and the command runs and exits normally either way.This check also works with Yarn Berry (PnP) projects, which never create a
node_modulesfolder —ahkdetects.pnp.cjs/.pnp.loader.mjsand falls back to checking that the package is declared inpackage.jsoninstead of requiring anode_modulesentry.
ahk init and ahk build detect which package manager your project uses and generate the MCP server launch command (.mcp.json, opencode.json, .codex/config.toml, or .grok/config.toml) accordingly, instead of hardcoding npx:
| Package manager | Detected via | Generated command |
|---|---|---|
| npm | packageManager field, package-lock.json, or fallback | npx --no ahk serve --port <port> |
| pnpm | packageManager field or pnpm-lock.yaml | pnpm exec ahk serve --port <port> |
| yarn classic (v1) | packageManager field (major 1) or yarn.lock without .yarnrc.yml | yarn run ahk serve --port <port> |
| yarn berry (v2+, PnP or node-modules) | packageManager field (major ≥ 2) or yarn.lock + .yarnrc.yml | yarn run ahk serve --port <port> |
| bun | packageManager field or bun.lockb/bun.lock | bunx --no-install ahk serve --port <port> |
| any — no local install | @cardor/agent-harness-kit is not a dependency of your project | ahk serve --port <port> |
Detection order: the packageManager field in your package.json (e.g. "packageManager": "pnpm@8.15.0") takes priority when present; otherwise ahk falls back to lockfile heuristics; if nothing is detected, it defaults to npm.
FAQ
agent-harness-kit is a Claude Code plugin with 9 hand-picked skills for agent orchestration work, indexed on Flowy. Install it with the command on its page. It includes ahk-ask, ahk-consultant, ahk-feature. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it