mk-agent-harness-kit
Your AI coding agent says "done" when it isn't, edits the same file nine times, and runs
rm -rfon a guess. ACK stops that — with contracts and gates your agent can't talk its way around, not with a longer prompt.
Status
This 0.1.0 release provides ack settings, ack loop, ack review, ack hooks,
ack portability-lint, the cap destructive-command gateway, and ack guard.
ack guard read-tracker, ack guard evidence, ack guard first-read-lock,
ack guard council-dispatch-guard, ack guard preset-auto-upgrade, and
ack guard session-onboarding, ack guard progress-tracker, ack guard no-progress-guard,
and ack guard state-validator are available; ack lint and ack settings init remain planned.
The Problem
Everyone who runs an agent for more than an afternoon has said these sentences out loud:
- "You didn't run the tests. Don't tell me it's done."
- "You've edited that file six times. Stop and tell me what's wrong."
- "Read the config before you change it."
- "Don't push. Don't delete. Ask first."
- "I told you that yesterday."
Prompts don't fix this. The agent agrees, then forgets. What fixes it is a gate the agent has to pass, enforced by a program that doesn't care how confident the agent sounds.
ACK is that gate. It doesn't run your agent. It sits next to whatever agent you already use — Claude Code, Codex, Gemini CLI, a local model — and refuses to let it claim what it can't prove.
What ACK Does
One settings.json. One command ack. Everything it decides is written to .mk-agentos/ as plain JSON you can read and diff.
ack settings validate → your settings.json against the schema; profile invariants checked
ack loop done-gate → runs YOUR verify commands; "done" is refused until they pass
ack loop wrap-gap → prints the system-gap lines a wrap-up must carry after a wall
ack review accept-gate → two-agent review over the filesystem; self-approval refused
ack hooks install → opt-in Claude Code PreToolUse hook: blocks force-push / rm -rf, asks before push, delete, deploy, secrets
ack portability-lint → the kit's own check that nothing home-lab-specific leaked in
ack guard <name> → stateful Claude Code hook guard with a JSON decision envelope
cap check <command> → BLOCKED / YELLOW / RED classification, plan creation, and rsync dry-run for agent review; `cap go` needs a human at a TTY
Roadmap (not in 0.1.0): ack lint (rule-file enforcement audit), ack settings init.
Pick a profile: solo (one agent, minimal), solo-strict, dual-review (executor + reviewer), governed (human acceptance gate). Upgrade is automatic when scope grows; downgrade needs a human.
What ACK is not: not a runtime, not a memory server, not a prompt library. Memory is AMH's job and is optional here. Dispatching work to other agents is a separate tool.
Quick Start (5 minutes)
pipx install mk-agent-harness-kit # from PyPI; puts `ack` and `cap` on PATH (or `pipx install .` from a checkout)
cd your-project
cp /path/to/settings.example.json settings.json
# edit settings.json: set verify.commands to your real test / lint / typecheck
ack settings validate --settings settings.json
ack loop done-gate --settings settings.json
Wire it to your agent (one block in ~/AGENTS.md, works for any agent that reads it):
## Harness
Before claiming a task is done: run `ack loop done-gate --settings settings.json`. If it fails, you are not done.
Claude Code users can additionally install hooks that call the same commands automatically:
# set layers.harness.install_hooks: true in settings.json first
ack hooks install --settings settings.json --apply-project-claude
The hook reads the same compiled settings ack writes to .mk-agentos/; uninstalling it changes nothing about what ack loop or ack review decide.
Layout
settings.json what you edit
.mk-agentos/ what ack writes (state and review sessions) — commit or ignore, your call
src/ack/_assets/spec/settings.schema.json shipped schema (also validates settings.json)
Full walkthrough: GETTING_STARTED.md · Design and non-goals: DESIGN.md
Related
- agent-memory-hall — what the agent remembers between sessions
- mk-agentos — the lab this kit was extracted from
License: Apache-2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mk_agent_harness_kit-0.1.0.tar.gz.
File metadata
- Download URL: mk_agent_harness_kit-0.1.0.tar.gz
- Upload date:
- Size: 65.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ef95bc22c16dbb134f8dbbd44e26237c0989ff976742726982af36d4d30e570
|
|
| MD5 |
0a6a600b23d0683917ab7427a57a721c
|
|
| BLAKE2b-256 |
8f27403489f7e84e87e3533defa56cb2fb175c269b2fcd7dd9000dbc40eaeced
|
File details
Details for the file mk_agent_harness_kit-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mk_agent_harness_kit-0.1.0-py3-none-any.whl
- Upload date:
- Size: 69.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5287a001b578927d62d863686ed1a18f851bfc1f7ddc81dc2a756c24d28a6126
|
|
| MD5 |
1fb98266df6ccd6cf6c7dd74c9bae6db
|
|
| BLAKE2b-256 |
f1e8c07f4da1eaa80c95998df6dae3cadb133d848ca8b6258751632c75b52042
|