@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 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
+ ![npm version](https://img.shields.io/npm/v/@cardor/agent-harness-kit)
6
+ ![license](https://img.shields.io/npm/l/@cardor/agent-harness-kit)
7
+ [![Known Vulnerabilities](https://snyk.io/test/npm/@cardor/agent-harness-kit/badge.svg)](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 (`.claude/agents/*.md` or `.opencode/agents/*.md`)](#agent-definition-files-claudeagentsmd-or-opencodeagentsmd)
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 opencode.json
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) or `~/.config/opencode` (OpenCode). This lets you share one harness config across all your projects.
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 | What it shows |
186
- |------|--------------|
187
- | **Overview** | Status counts, active tasks with acceptance progress, recent agent activity |
188
- | **Tasks** | Full task list, filterable by status, with acceptance progress bars |
189
- | **Task detail** | Acceptance criteria, action timeline per agent, files touched, tools used |
190
- | **Agents** | Per-role breakdown: actions, tasks worked, files touched, completion rate |
191
- | **Tools** | Top tools bar chart + full log of recent tool calls with args and results |
192
- | **Files** | Most-touched files with operation breakdown + recent file operation log |
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
  ![Dashboard](./assets/ahk-dashboard.png)
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 .md files for this provider
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 `.md` files in `.claude/agents/` or `.opencode/agents/`
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 ← main config (edit freely)
330
- ├── AGENTS.md ← navigation map regenerated from config
331
- ├── health.sh ← implement your health checks here
338
+ ├── agent-harness-kit.config.ts
339
+ ├── AGENTS.md
340
+ ├── CLAUDE.md
341
+ ├── health.sh
332
342
  ├── .harness/
333
- │ ├── harness.db ← SQLite source of truth (gitignored)
334
- │ ├── current.md ← auto-generated session snapshot (gitignored)
335
- │ └── feature_list.json ← human-editable task backlog (commit this)
336
- └── .claude/ ← or .opencode/ depending on your provider
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
- └── mcp.json ← tells Claude Code to spawn ahk serve
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 | Purpose | Edit it? |
348
- |------|---------|----------|
349
- | `agent-harness-kit.config.ts` | Defines project metadata, provider, storage paths, MCP port | Yes — it's yours |
350
- | `AGENTS.md` | Navigation map agents read first. Regenerated by `ahk build` | No — changes will be overwritten |
351
- | `health.sh` | Shell script agents run before starting work. Must exit 0 | **Yes — implement your checks here** |
352
- | `.harness/feature_list.json` | Task backlog in JSON. Humans edit this, `ahk sync` loads it into SQLite | Yes — add tasks here |
353
- | `.harness/harness.db` | SQLite database. Source of truth for tasks, actions, sections | No — managed by the harness |
354
- | `.harness/current.md` | Auto-generated session snapshot for agents without MCP access | No — regenerated automatically |
355
- | `.claude/agents/*.md` | Agent role definitions. Created once, never overwritten | **Yes — customize agent behavior** |
356
- | `.claude/mcp.json` | MCP server config. Merged (not overwritten) by `ahk build` | Yes, carefully — don't remove the `agent-harness-kit` entry |
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', // where agents search for documentation
424
+ docsPath: './docs', // where agents search for documentation
374
425
  },
375
426
 
376
- provider: 'claude-code', // 'claude-code' | 'opencode'
427
+ provider: 'claude-code', // 'claude-code' | 'opencode' | 'codex-cli'
377
428
 
378
429
  agents: {
379
- lead: { instructionsPath: null },
430
+ lead: { instructionsPath: null },
380
431
  explorer: { instructionsPath: null, allowedPaths: ['./docs', './src'] },
381
- builder: { instructionsPath: null, writablePaths: ['./src', './tests'] },
432
+ builder: { instructionsPath: null, writablePaths: ['./src', './tests'] },
382
433
  reviewer: { instructionsPath: null },
383
- custom: [], // define extra agents here
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: '.harness',
398
- tasks: { adapter: 'local' }, // 'local' | 'jira' | 'linear' | 'mcp'
448
+ dir: '.harness',
449
+ tasks: { adapter: 'local' }, // 'local' | 'jira' | 'linear' | 'mcp'
399
450
  sections: {
400
- toolsUsed: true, // log which tools agents used
401
- filesModified: true, // log which files were touched
402
- result: true, // log action results
403
- blockers: true, // log blockers agents hit
404
- nextSteps: false, // optional next steps field
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: true, // set to false to skip health checks
462
+ required: true, // set to false to skip health checks
412
463
  },
413
464
 
414
465
  tools: {
415
- mcp: { enabled: true, port: 3742 },
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 (`.claude/agents/*.md` or `.opencode/agents/*.md`)
491
+ ### Agent definition files
441
492
 
442
- These are Markdown files with a YAML frontmatter and free-form instructions. They are created once and **never overwritten** by `ahk build` — so any edits you make are permanent.
493
+ Created once and **never overwritten** by `ahk build` — your edits are permanent.
443
494
 
444
- You can:
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 | Parameters | Description |
494
- |------|-----------|-------------|
495
- | `tasks.get` | `status?` | List tasks, optionally filtered by `pending \| in_progress \| done \| blocked` |
496
- | `tasks.claim` | `id, agent` | Atomically claim a pending task. Returns `task_already_claimed` if another agent got it first |
497
- | `tasks.update` | `id, status` | Change task status |
498
- | `tasks.add` | `title, slug?, description?, acceptance?` | Create a new task directly from MCP (agents can queue work on the fly) |
499
- | `tasks.acceptance.update` | `criterionId` | Mark an acceptance criterion as met. Criterion IDs come from `tasks.get` |
500
- | `actions.start` | `taskId, agent` | Start a new action, returns `actionId` |
501
- | `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 |
502
- | `actions.complete` | `actionId, summary` | Close an action with a one-line summary |
503
- | `actions.get` | `taskId` | Full action history for a task (all agents, all sections) |
504
- | `actions.record_file` | `actionId, filePath, operation, notes?` | Register a file touch. The **only** way to populate the Files dashboard. `operation`: `read \| created \| modified \| deleted` |
505
- | `actions.record_tool` | `actionId, toolName, argsJson?, resultSummary?` | Register a tool call. The **only** way to populate the Tools dashboard |
506
- | `docs.search` | `query` | Search the `docsPath` folder for content matching the query |
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 | Responsibility |
513
- |------|---------------|
514
- | **lead** | Decomposes the task into a plan, assigns sub-agents. Does not write code or read source files. |
515
- | **explorer** | Reads and maps the codebase. Never writes files. Records every file read. |
516
- | **builder** | Implements the plan. Only writes to `writablePaths`. Records every file modified. |
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 | Commit? |
524
- |------|---------|
525
- | `agent-harness-kit.config.ts` | Yes |
526
- | `AGENTS.md` | Yes |
527
- | `health.sh` | Yes |
528
- | `.harness/feature_list.json` | Yes |
529
- | `.claude/agents/*.md` | Yes |
530
- | `.claude/mcp.json` / `opencode.json` | Yes |
531
- | `.harness/harness.db` | **No** (gitignored) |
532
- | `.harness/current.md` | **No** (gitignored) |
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 | SQLite | PostgreSQL | MySQL |
541
- |---------|--------|-----------|-------|
542
- | Node.js ≥ 22 | ✅ uses `node:sqlite` built-in | ✅ via `postgres` package | ✅ via `mysql2` package |
543
- | Bun (any recent) | ✅ uses `bun:sqlite` built-in | ✅ via `postgres` package | ✅ via `mysql2` package |
544
- | Node.js < 22 | ❌ `node:sqlite` not available | ✅ | ✅ |
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.
@@ -10,6 +10,7 @@ tools:
10
10
  write: true
11
11
  edit: true
12
12
  bash: true
13
+ permissionMode: acceptEdits
13
14
  ---
14
15
 
15
16
  # Builder Agent — {{projectName}}
@@ -10,6 +10,7 @@ tools:
10
10
  write: false
11
11
  edit: false
12
12
  bash: true
13
+ permissionMode: plan
13
14
  ---
14
15
 
15
16
  # Explorer Agent — {{projectName}}
@@ -10,6 +10,7 @@ tools:
10
10
  write: false
11
11
  edit: false
12
12
  bash: true
13
+ permissionMode: plan
13
14
  ---
14
15
 
15
16
  # Reviewer Agent — {{projectName}}