@cardor/agent-harness-kit 1.1.7 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +172 -88
- package/dist/agent-templates/builder.md +1 -0
- package/dist/agent-templates/explorer.md +1 -0
- package/dist/agent-templates/reviewer.md +1 -0
- package/dist/cli.js +358 -207
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
**A provider-agnostic scaffolding kit for running structured multi-agent workflows in your codebase.**
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+
[](https://snyk.io/test/npm/@cardor/agent-harness-kit)
|
|
8
|
+
|
|
5
9
|
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.
|
|
6
10
|
|
|
7
11
|
You stay in control. The agents stay on track.
|
|
@@ -44,7 +48,7 @@ npx ahk init
|
|
|
44
48
|
- [What you can customize](#what-you-can-customize)
|
|
45
49
|
- [`agent-harness-kit.config.ts`](#agent-harness-kitconfigts)
|
|
46
50
|
- [`health.sh`](#healthsh)
|
|
47
|
-
- [Agent definition files
|
|
51
|
+
- [Agent definition files](#agent-definition-files)
|
|
48
52
|
- [`.harness/feature_list.json`](#harnessfeature_listjson)
|
|
49
53
|
- [MCP tools (for agents)](#mcp-tools-for-agents)
|
|
50
54
|
- [Agent roles](#agent-roles)
|
|
@@ -78,7 +82,7 @@ ahk init
|
|
|
78
82
|
└── creates config, agent definitions, task backlog, health check
|
|
79
83
|
|
|
80
84
|
AI tool opens your project
|
|
81
|
-
└── reads .claude/mcp.json or
|
|
85
|
+
└── reads .claude/mcp.json, opencode.json, or .codex/config.toml
|
|
82
86
|
└── spawns: npx ahk serve (stdio MCP server)
|
|
83
87
|
|
|
84
88
|
Agent starts working
|
|
@@ -99,7 +103,7 @@ Everything is stored locally in a SQLite database (`.harness/harness.db`). No cl
|
|
|
99
103
|
|
|
100
104
|
## Features
|
|
101
105
|
|
|
102
|
-
- **Provider-agnostic** — works with Claude Code, OpenCode, or any MCP-compatible AI tool. Switch providers without losing your task history or reconfiguring your workflow.
|
|
106
|
+
- **Provider-agnostic** — works with Claude Code, OpenCode, Codex CLI, or any MCP-compatible AI tool. Switch providers without losing your task history or reconfiguring your workflow.
|
|
103
107
|
- **Structured 4-agent workflow** — Lead, Explorer, Builder, and Reviewer each have defined responsibilities and can only act within their role.
|
|
104
108
|
- **Atomic task claiming** — agents use `tasks.claim()` which uses a SQLite transaction to prevent two agents from picking up the same task at the same time.
|
|
105
109
|
- **Full audit trail** — every action, file touched, tool used, and section written is stored in SQLite and queryable.
|
|
@@ -151,11 +155,12 @@ ahk init
|
|
|
151
155
|
|
|
152
156
|
# Skip prompts with flags
|
|
153
157
|
ahk init --name "my-app" --provider claude-code --docs ./docs --tasks local
|
|
158
|
+
ahk init --name "my-app" --provider codex-cli --docs ./docs --tasks local
|
|
154
159
|
```
|
|
155
160
|
|
|
156
161
|
Run this once per project. Safe to re-run — it will not overwrite files you've customized.
|
|
157
162
|
|
|
158
|
-
**Global installation** — if you answer yes to "Install globally?", files go to `~/.claude` (Claude Code)
|
|
163
|
+
**Global installation** — if you answer yes to "Install globally?", files go to `~/.claude` (Claude Code), `~/.config/opencode` (OpenCode), or `~/.codex` (Codex CLI). This lets you share one harness config across all your projects.
|
|
159
164
|
|
|
160
165
|
---
|
|
161
166
|
|
|
@@ -182,18 +187,17 @@ ahk dashboard --no-open # start server without opening browser
|
|
|
182
187
|
|
|
183
188
|
The dashboard includes:
|
|
184
189
|
|
|
185
|
-
| View
|
|
186
|
-
|
|
187
|
-
| **Overview**
|
|
188
|
-
| **Tasks**
|
|
189
|
-
| **Task detail** | Acceptance criteria, action timeline per agent, files touched, tools used
|
|
190
|
-
| **Agents**
|
|
191
|
-
| **Tools**
|
|
192
|
-
| **Files**
|
|
190
|
+
| View | What it shows |
|
|
191
|
+
| --------------- | --------------------------------------------------------------------------- |
|
|
192
|
+
| **Overview** | Status counts, active tasks with acceptance progress, recent agent activity |
|
|
193
|
+
| **Tasks** | Full task list, filterable by status, with acceptance progress bars |
|
|
194
|
+
| **Task detail** | Acceptance criteria, action timeline per agent, files touched, tools used |
|
|
195
|
+
| **Agents** | Per-role breakdown: actions, tasks worked, files touched, completion rate |
|
|
196
|
+
| **Tools** | Top tools bar chart + full log of recent tool calls with args and results |
|
|
197
|
+
| **Files** | Most-touched files with operation breakdown + recent file operation log |
|
|
193
198
|
|
|
194
199
|

|
|
195
200
|
|
|
196
|
-
|
|
197
201
|
---
|
|
198
202
|
|
|
199
203
|
### `ahk status`
|
|
@@ -285,14 +289,16 @@ Clears harness data interactively. Only SQLite databases are managed by this com
|
|
|
285
289
|
```bash
|
|
286
290
|
ahk reset # interactive — asks before deleting each item
|
|
287
291
|
ahk reset --force # skip all confirmation prompts
|
|
288
|
-
ahk reset --provider claude-code # also delete agent
|
|
292
|
+
ahk reset --provider claude-code # also delete agent files for this provider
|
|
289
293
|
ahk reset --provider opencode
|
|
294
|
+
ahk reset --provider codex-cli
|
|
290
295
|
```
|
|
291
296
|
|
|
292
297
|
What it can reset:
|
|
298
|
+
|
|
293
299
|
- The SQLite `.db` file (plus WAL and SHM files if present)
|
|
294
300
|
- `.harness/feature_list.json`
|
|
295
|
-
- Agent
|
|
301
|
+
- Agent definition files in `.claude/agents/`, `.opencode/agents/`, or `.codex/agents/`
|
|
296
302
|
|
|
297
303
|
After a reset, run `ahk init` to scaffold a fresh harness.
|
|
298
304
|
|
|
@@ -305,6 +311,7 @@ Migrates provider-specific files from one AI provider to another. Useful when sw
|
|
|
305
311
|
```bash
|
|
306
312
|
ahk migrate --to opencode
|
|
307
313
|
ahk migrate --to claude-code
|
|
314
|
+
ahk migrate --to codex-cli
|
|
308
315
|
```
|
|
309
316
|
|
|
310
317
|
---
|
|
@@ -324,36 +331,80 @@ ahk export --sql --output dump.sql # SQL dump to file
|
|
|
324
331
|
|
|
325
332
|
## Files created by `ahk init`
|
|
326
333
|
|
|
334
|
+
**Claude Code** (`provider: 'claude-code'`):
|
|
335
|
+
|
|
327
336
|
```
|
|
328
337
|
your-project/
|
|
329
|
-
├── agent-harness-kit.config.ts
|
|
330
|
-
├── AGENTS.md
|
|
331
|
-
├──
|
|
338
|
+
├── agent-harness-kit.config.ts
|
|
339
|
+
├── AGENTS.md
|
|
340
|
+
├── CLAUDE.md
|
|
341
|
+
├── health.sh
|
|
332
342
|
├── .harness/
|
|
333
|
-
│ ├── harness.db ←
|
|
334
|
-
│ ├── current.md ←
|
|
335
|
-
│ └── feature_list.json
|
|
336
|
-
└── .claude/
|
|
343
|
+
│ ├── harness.db ← gitignored
|
|
344
|
+
│ ├── current.md ← gitignored
|
|
345
|
+
│ └── feature_list.json
|
|
346
|
+
└── .claude/
|
|
337
347
|
├── agents/
|
|
338
348
|
│ ├── lead.md
|
|
339
349
|
│ ├── explorer.md
|
|
340
350
|
│ ├── builder.md
|
|
341
351
|
│ └── reviewer.md
|
|
342
|
-
|
|
352
|
+
├── mcp.json ← MCP server registration
|
|
353
|
+
└── settings.json ← sets `agent: "lead"` as the default session agent
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
**OpenCode** (`provider: 'opencode'`):
|
|
357
|
+
|
|
358
|
+
```
|
|
359
|
+
your-project/
|
|
360
|
+
├── agent-harness-kit.config.ts
|
|
361
|
+
├── AGENTS.md
|
|
362
|
+
├── health.sh
|
|
363
|
+
├── opencode.json ← MCP server + default_agent + compaction config
|
|
364
|
+
├── .harness/
|
|
365
|
+
└── .opencode/
|
|
366
|
+
└── agents/
|
|
367
|
+
├── lead.md
|
|
368
|
+
├── explorer.md
|
|
369
|
+
├── builder.md
|
|
370
|
+
└── reviewer.md
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Codex CLI** (`provider: 'codex-cli'`):
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
your-project/
|
|
377
|
+
├── agent-harness-kit.config.ts
|
|
378
|
+
├── AGENTS.md
|
|
379
|
+
├── health.sh
|
|
380
|
+
├── .harness/
|
|
381
|
+
└── .codex/
|
|
382
|
+
├── config.toml ← MCP server registration
|
|
383
|
+
└── agents/
|
|
384
|
+
├── lead.toml
|
|
385
|
+
├── explorer.toml
|
|
386
|
+
├── builder.toml
|
|
387
|
+
├── reviewer.toml
|
|
388
|
+
└── default.toml ← overrides Codex's built-in default agent → routes to lead
|
|
343
389
|
```
|
|
344
390
|
|
|
345
391
|
### What each file does
|
|
346
392
|
|
|
347
|
-
| File
|
|
348
|
-
|
|
349
|
-
| `agent-harness-kit.config.ts` | Defines project metadata, provider, storage paths, MCP port
|
|
350
|
-
| `AGENTS.md`
|
|
351
|
-
| `health.sh`
|
|
352
|
-
| `.harness/feature_list.json`
|
|
353
|
-
| `.harness/harness.db`
|
|
354
|
-
| `.harness/current.md`
|
|
355
|
-
| `.claude/agents/*.md`
|
|
356
|
-
| `.claude/mcp.json`
|
|
393
|
+
| File | Purpose | Edit it? |
|
|
394
|
+
| ----------------------------- | ------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
395
|
+
| `agent-harness-kit.config.ts` | Defines project metadata, provider, storage paths, MCP port | Yes — it's yours |
|
|
396
|
+
| `AGENTS.md` | Navigation map agents read first. Regenerated by `ahk build` | No — changes will be overwritten |
|
|
397
|
+
| `health.sh` | Shell script agents run before starting work. Must exit 0 | **Yes — implement your checks here** |
|
|
398
|
+
| `.harness/feature_list.json` | Task backlog in JSON. Humans edit this, `ahk sync` loads it into SQLite | Yes — add tasks here |
|
|
399
|
+
| `.harness/harness.db` | SQLite database. Source of truth for tasks, actions, sections | No — managed by the harness |
|
|
400
|
+
| `.harness/current.md` | Auto-generated session snapshot for agents without MCP access | No — regenerated automatically |
|
|
401
|
+
| `.claude/agents/*.md` | Agent role definitions (Claude Code). Created once, never overwritten | **Yes — customize agent behavior** |
|
|
402
|
+
| `.claude/mcp.json` | MCP server registration for Claude Code. Merged by `ahk build` | Yes, carefully — don't remove the `agent-harness-kit` entry |
|
|
403
|
+
| `.claude/settings.json` | Sets `agent: "lead"` so lead runs as the default session agent. Merged by `ahk build` | Yes, carefully |
|
|
404
|
+
| `.opencode/agents/*.md` | Agent role definitions (OpenCode). Created once, never overwritten | **Yes — customize agent behavior** |
|
|
405
|
+
| `opencode.json` | MCP server + `default_agent` + compaction config for OpenCode. Merged by `ahk build` | Yes, carefully |
|
|
406
|
+
| `.codex/agents/*.toml` | Agent role definitions (Codex CLI). Created once, never overwritten | **Yes — customize agent behavior** |
|
|
407
|
+
| `.codex/config.toml` | MCP server registration for Codex CLI. Merged by `ahk build` | Yes, carefully |
|
|
357
408
|
|
|
358
409
|
---
|
|
359
410
|
|
|
@@ -370,17 +421,17 @@ export default defineHarness({
|
|
|
370
421
|
project: {
|
|
371
422
|
name: 'My App',
|
|
372
423
|
description: 'What this project does',
|
|
373
|
-
docsPath: './docs',
|
|
424
|
+
docsPath: './docs', // where agents search for documentation
|
|
374
425
|
},
|
|
375
426
|
|
|
376
|
-
provider: 'claude-code',
|
|
427
|
+
provider: 'claude-code', // 'claude-code' | 'opencode' | 'codex-cli'
|
|
377
428
|
|
|
378
429
|
agents: {
|
|
379
|
-
lead:
|
|
430
|
+
lead: { instructionsPath: null },
|
|
380
431
|
explorer: { instructionsPath: null, allowedPaths: ['./docs', './src'] },
|
|
381
|
-
builder:
|
|
432
|
+
builder: { instructionsPath: null, writablePaths: ['./src', './tests'] },
|
|
382
433
|
reviewer: { instructionsPath: null },
|
|
383
|
-
custom:
|
|
434
|
+
custom: [], // define extra agents here
|
|
384
435
|
},
|
|
385
436
|
|
|
386
437
|
// ── Database ──────────────────────────────────────────────────────────────
|
|
@@ -394,25 +445,25 @@ export default defineHarness({
|
|
|
394
445
|
// database: { type: 'mysql', connectionString: process.env.DATABASE_URL },
|
|
395
446
|
|
|
396
447
|
storage: {
|
|
397
|
-
dir:
|
|
398
|
-
tasks: { adapter: 'local' },
|
|
448
|
+
dir: '.harness',
|
|
449
|
+
tasks: { adapter: 'local' }, // 'local' | 'jira' | 'linear' | 'mcp'
|
|
399
450
|
sections: {
|
|
400
|
-
toolsUsed:
|
|
401
|
-
filesModified: true,
|
|
402
|
-
result:
|
|
403
|
-
blockers:
|
|
404
|
-
nextSteps:
|
|
451
|
+
toolsUsed: true, // log which tools agents used
|
|
452
|
+
filesModified: true, // log which files were touched
|
|
453
|
+
result: true, // log action results
|
|
454
|
+
blockers: true, // log blockers agents hit
|
|
455
|
+
nextSteps: false, // optional next steps field
|
|
405
456
|
},
|
|
406
457
|
markdownFallback: { enabled: true, path: '.harness/current.md' },
|
|
407
458
|
},
|
|
408
459
|
|
|
409
460
|
health: {
|
|
410
461
|
scriptPath: './health.sh',
|
|
411
|
-
required:
|
|
462
|
+
required: true, // set to false to skip health checks
|
|
412
463
|
},
|
|
413
464
|
|
|
414
465
|
tools: {
|
|
415
|
-
mcp:
|
|
466
|
+
mcp: { enabled: true, port: 3742 },
|
|
416
467
|
scripts: { enabled: true, outputDir: './.harness/scripts' },
|
|
417
468
|
},
|
|
418
469
|
})
|
|
@@ -437,19 +488,22 @@ psql "$DATABASE_URL" -c "SELECT 1" > /dev/null 2>&1 || exit 1
|
|
|
437
488
|
echo "All checks passed."
|
|
438
489
|
```
|
|
439
490
|
|
|
440
|
-
### Agent definition files
|
|
491
|
+
### Agent definition files
|
|
441
492
|
|
|
442
|
-
|
|
493
|
+
Created once and **never overwritten** by `ahk build` — your edits are permanent.
|
|
443
494
|
|
|
444
|
-
|
|
445
|
-
- Add domain-specific context (e.g. "this project uses hexagonal architecture")
|
|
446
|
-
- Restrict what the agent is allowed to do
|
|
447
|
-
- Add project-specific conventions the agent must follow
|
|
448
|
-
- Reference specific files or docs the agent should read first
|
|
495
|
+
**Claude Code** (`.claude/agents/*.md`) and **OpenCode** (`.opencode/agents/*.md`) use Markdown with YAML frontmatter:
|
|
449
496
|
|
|
450
497
|
```markdown
|
|
451
498
|
---
|
|
499
|
+
name: builder
|
|
452
500
|
description: Builder agent — implements the plan produced by explorer and lead
|
|
501
|
+
tools:
|
|
502
|
+
read: true
|
|
503
|
+
write: true
|
|
504
|
+
edit: true
|
|
505
|
+
bash: true
|
|
506
|
+
permissionMode: acceptEdits
|
|
453
507
|
---
|
|
454
508
|
|
|
455
509
|
# Builder Agent
|
|
@@ -462,6 +516,29 @@ You are the builder agent for MyApp. Follow these rules:
|
|
|
462
516
|
- Use the existing error handling pattern from `src/lib/errors.ts`
|
|
463
517
|
```
|
|
464
518
|
|
|
519
|
+
**Codex CLI** (`.codex/agents/*.toml`) uses TOML format:
|
|
520
|
+
|
|
521
|
+
```toml
|
|
522
|
+
name = "builder"
|
|
523
|
+
sandbox_mode = "workspace-write"
|
|
524
|
+
|
|
525
|
+
description = """
|
|
526
|
+
Builder agent — implements the plan produced by explorer and lead.
|
|
527
|
+
"""
|
|
528
|
+
|
|
529
|
+
developer_instructions = """
|
|
530
|
+
# Builder Agent
|
|
531
|
+
|
|
532
|
+
You are the builder agent for MyApp. Follow these rules:
|
|
533
|
+
|
|
534
|
+
- All API endpoints must be defined in `src/routes/`
|
|
535
|
+
- Never modify `src/core/` without lead approval
|
|
536
|
+
- Run `npm test` after every change and fix failures before completing
|
|
537
|
+
"""
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
The `sandbox_mode` field controls Codex's filesystem permissions per agent: `"read-only"` for lead, explorer, and reviewer; `"workspace-write"` for builder. The `permissionMode` field in Claude Code agent files enforces the same constraints at the session level (`plan` for read-only roles, `acceptEdits` for builder).
|
|
541
|
+
|
|
465
542
|
### `.harness/feature_list.json`
|
|
466
543
|
|
|
467
544
|
The human-editable task backlog. Add tasks here, then run `ahk sync` to load them into SQLite.
|
|
@@ -490,46 +567,52 @@ Good acceptance criteria make the difference — the reviewer agent uses them to
|
|
|
490
567
|
|
|
491
568
|
The harness exposes these tools via MCP. Agents use them instead of reading files directly.
|
|
492
569
|
|
|
493
|
-
| Tool
|
|
494
|
-
|
|
495
|
-
| `tasks.get`
|
|
496
|
-
| `tasks.claim`
|
|
497
|
-
| `tasks.update`
|
|
498
|
-
| `tasks.add`
|
|
499
|
-
| `tasks.acceptance.update` | `criterionId`
|
|
500
|
-
| `actions.start`
|
|
501
|
-
| `actions.write`
|
|
502
|
-
| `actions.complete`
|
|
503
|
-
| `actions.get`
|
|
504
|
-
| `actions.record_file`
|
|
505
|
-
| `actions.record_tool`
|
|
506
|
-
| `docs.search`
|
|
570
|
+
| Tool | Parameters | Description |
|
|
571
|
+
| ------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
572
|
+
| `tasks.get` | `status?` | List tasks, optionally filtered by `pending \| in_progress \| done \| blocked` |
|
|
573
|
+
| `tasks.claim` | `id, agent` | Atomically claim a pending task. Returns `task_already_claimed` if another agent got it first |
|
|
574
|
+
| `tasks.update` | `id, status` | Change task status |
|
|
575
|
+
| `tasks.add` | `title, slug?, description?, acceptance?` | Create a new task directly from MCP (agents can queue work on the fly) |
|
|
576
|
+
| `tasks.acceptance.update` | `criterionId` | Mark an acceptance criterion as met. Criterion IDs come from `tasks.get` |
|
|
577
|
+
| `actions.start` | `taskId, agent` | Start a new action, returns `actionId` |
|
|
578
|
+
| `actions.write` | `actionId, sectionType, content` | Record a text section: `result \| tools_used \| blockers \| next_steps`. Does **not** populate the Files dashboard — use `actions.record_file` for that |
|
|
579
|
+
| `actions.complete` | `actionId, summary` | Close an action with a one-line summary |
|
|
580
|
+
| `actions.get` | `taskId` | Full action history for a task (all agents, all sections) |
|
|
581
|
+
| `actions.record_file` | `actionId, filePath, operation, notes?` | Register a file touch. The **only** way to populate the Files dashboard. `operation`: `read \| created \| modified \| deleted` |
|
|
582
|
+
| `actions.record_tool` | `actionId, toolName, argsJson?, resultSummary?` | Register a tool call. The **only** way to populate the Tools dashboard |
|
|
583
|
+
| `docs.search` | `query` | Search the `docsPath` folder for content matching the query |
|
|
507
584
|
|
|
508
585
|
---
|
|
509
586
|
|
|
510
587
|
## Agent roles
|
|
511
588
|
|
|
512
|
-
| Role
|
|
513
|
-
|
|
514
|
-
| **lead**
|
|
515
|
-
| **explorer** | Reads and maps the codebase. Never writes files. Records every file read.
|
|
516
|
-
| **builder**
|
|
589
|
+
| Role | Responsibility |
|
|
590
|
+
| ------------ | ------------------------------------------------------------------------------------------------- |
|
|
591
|
+
| **lead** | Decomposes the task into a plan, assigns sub-agents. Does not write code or read source files. |
|
|
592
|
+
| **explorer** | Reads and maps the codebase. Never writes files. Records every file read. |
|
|
593
|
+
| **builder** | Implements the plan. Only writes to `writablePaths`. Records every file modified. |
|
|
517
594
|
| **reviewer** | Verifies all acceptance criteria are met. Approves or blocks. Runs health check before approving. |
|
|
518
595
|
|
|
519
596
|
---
|
|
520
597
|
|
|
521
598
|
## What to commit
|
|
522
599
|
|
|
523
|
-
| File
|
|
524
|
-
|
|
525
|
-
| `agent-harness-kit.config.ts` | Yes
|
|
526
|
-
| `AGENTS.md`
|
|
527
|
-
| `
|
|
528
|
-
|
|
|
529
|
-
| `.
|
|
530
|
-
| `.claude/
|
|
531
|
-
| `.
|
|
532
|
-
| `.
|
|
600
|
+
| File | Commit? |
|
|
601
|
+
| ----------------------------- | ------------------- |
|
|
602
|
+
| `agent-harness-kit.config.ts` | Yes |
|
|
603
|
+
| `AGENTS.md` | Yes |
|
|
604
|
+
| `CLAUDE.md` | Yes |
|
|
605
|
+
| `health.sh` | Yes |
|
|
606
|
+
| `.harness/feature_list.json` | Yes |
|
|
607
|
+
| `.claude/agents/*.md` | Yes |
|
|
608
|
+
| `.claude/mcp.json` | Yes |
|
|
609
|
+
| `.claude/settings.json` | Yes |
|
|
610
|
+
| `.opencode/agents/*.md` | Yes |
|
|
611
|
+
| `opencode.json` | Yes |
|
|
612
|
+
| `.codex/agents/*.toml` | Yes |
|
|
613
|
+
| `.codex/config.toml` | Yes |
|
|
614
|
+
| `.harness/harness.db` | **No** (gitignored) |
|
|
615
|
+
| `.harness/current.md` | **No** (gitignored) |
|
|
533
616
|
|
|
534
617
|
The rule: commit inputs (config, task definitions, agent instructions). Ignore outputs (DB, auto-generated snapshots).
|
|
535
618
|
|
|
@@ -537,11 +620,11 @@ The rule: commit inputs (config, task definitions, agent instructions). Ignore o
|
|
|
537
620
|
|
|
538
621
|
## Runtime compatibility
|
|
539
622
|
|
|
540
|
-
| Runtime
|
|
541
|
-
|
|
542
|
-
| Node.js ≥ 22
|
|
543
|
-
| Bun (any recent) | ✅ uses `bun:sqlite` built-in
|
|
544
|
-
| Node.js < 22
|
|
623
|
+
| Runtime | SQLite | PostgreSQL | MySQL |
|
|
624
|
+
| ---------------- | ------------------------------ | ------------------------- | ----------------------- |
|
|
625
|
+
| Node.js ≥ 22 | ✅ uses `node:sqlite` built-in | ✅ via `postgres` package | ✅ via `mysql2` package |
|
|
626
|
+
| Bun (any recent) | ✅ uses `bun:sqlite` built-in | ✅ via `postgres` package | ✅ via `mysql2` package |
|
|
627
|
+
| Node.js < 22 | ❌ `node:sqlite` not available | ✅ | ✅ |
|
|
545
628
|
|
|
546
629
|
SQLite requires no additional packages. For PostgreSQL install `postgres`, for MySQL install `mysql2`:
|
|
547
630
|
|
|
@@ -627,6 +710,7 @@ Types: `feat fix chore refactor docs test perf style build ci revert`
|
|
|
627
710
|
- ✅ **`tasks.add` via MCP** — agents can create new tasks on the fly without leaving the conversation.
|
|
628
711
|
- ✅ **Global installation** — `ahk init` can install the harness to your home directory, shared across projects.
|
|
629
712
|
- ✅ **Input validation** — all CLI prompts validate and retry on bad values.
|
|
713
|
+
- ✅ **Codex CLI provider** — full support for OpenAI Codex CLI. Generates `.codex/agents/*.toml` files with proper `sandbox_mode` per role and merges `.codex/config.toml` for MCP registration. Overrides the built-in `default` agent so the harness lead runs by default.
|
|
630
714
|
- **Graphify integration** — connect the harness to Graphify to visualize agent workflows, task dependencies, and action timelines as interactive graphs.
|
|
631
715
|
- **Open Telemetry integration** — emit OpenTelemetry spans for all agent actions, file operations, and tool calls.
|
|
632
716
|
- **Jira task adapter** — pull tasks directly from Jira instead of maintaining `feature_list.json` manually.
|