Portable AI coding-agent harness engine
Project description
AkiForge — Portable Agent Harness
AkiForge is a portable, terminal-first harness engine for Codex and OpenCode. It gives coding agents the project-specific rules, runtime boundaries, and verification commands they need without loading an entire handbook into every conversation. One committed project profile works across both platforms, while the globally installed engine supplies reusable policy, adapters, upgrade planning, structured results, and an optional local dashboard.
What AkiForge can do
- Detect a project stack and create a reviewed runtime profile for host or Docker Compose execution.
- Keep agent context small by loading security, frontend, backend, database, testing, deployment, and review rules only when relevant.
- Route tiny, normal, and high-risk work through appropriately strict implementation and review workflows.
- Enforce approval boundaries for dependencies, migrations, destructive data, deployment, credentials, Git publication, and other sensitive operations.
- Run preflight and application checks in the configured environment and
report
PASS,PASS_WITH_GAPS,FAIL, orINCOMPLETEtruthfully. - Generate deterministic Codex and OpenCode adapters from one canonical policy.
- Initialize a thin project contract, adopt supported legacy installations, and preview or apply contained project upgrades with conflict preservation.
- Bridge a supported 0.1 thin contract to the 0.2 contract through a packaged, reviewed, atomic migration with explicit rollback.
- Update or downgrade the global engine independently from project files.
- Recognize declared external tools and report bounded readiness facts without installing, updating, executing, or certifying them.
- Return stable text and JSON results, expose an optional token-protected read-only localhost API, and visualize project state in an optional dashboard.
AkiForge does not replace Codex or OpenCode chat, install missing project tools, start containers, run migrations, deploy, read credentials, or repair a runtime without explicit authorization.
Core idea
global AkiForge engine
+--> canonical policy, schemas, adapters, runtime, verification
+--> CLI / JSON / local API / dashboard share typed services
|
v
thin committed project contract
+--> AGENTS.md
+--> .harness/project.json
+--> .harness/lock.json
+--> selected generated Codex/OpenCode adapters
Tiny changes should remain tiny. High-risk work can escalate to planning, independent review, full verification, security checks, and rollback notes.
Install and initialize
Install the engine once. uv tool is preferred; pipx is supported:
uv tool install akiforge
akiforge --version
akiforge resource-health
Preview a thin contract for a new repository, apply it only after review, then check the configured runtime and application:
akiforge --project /path/to/project init --profile all --check
akiforge --project /path/to/project init --profile all --apply
akiforge --project /path/to/project adapter validate
akiforge --project /path/to/project codex configure --check
akiforge --project /path/to/project codex configure --apply
akiforge --project /path/to/project project preflight
akiforge --project /path/to/project verify targeted
Use --profile codex, --profile opencode, or --profile all for one or both
platforms. Codex hooks remain inactive until the explicit configuration apply.
Review and commit the managed contract plus
.harness/project.json; do not edit generated .harness/lock.json manually.
The official lifecycle is:
install -> init -> review profile -> preflight -> verify
-> update engine independently -> preview/apply project upgrade or migration
Existing vendored projects use project adopt, never a fresh sync:
akiforge --project /path/to/legacy-project project adopt --check
akiforge --project /path/to/legacy-project project adopt --apply
See the complete guide, installation, project initialization, engine update, legacy adoption, project migration, and rollback. The public package and maintainer publication boundaries are in Public Distribution and the release runbook. Legacy command boundaries are in Command Migration. Ownership and supported customization are defined in Customization, with the engine/contract matrix in Compatibility and failure semantics in Runtime Resilience. External-tool ownership and readiness are in External Tool Readiness, with the Graphify-specific workflow.
The public package exposes its Python source and bundled resources. The repository currently grants no public software license; the package metadata states that explicitly. Publishing authority belongs to the protected release workflow and PyPI Trusted Publishing, not to package secrecy.
Main commands
| Command | Purpose |
|---|---|
akiforge doctor |
Check the installed engine and environment. |
akiforge --project PATH status |
Show runtime, versions, verification, adapters, and conflicts. |
akiforge --project PATH project preflight |
Probe the declared runtime without repair or fallback. |
akiforge --project PATH verify targeted |
Run focused configured application checks. |
akiforge --project PATH verify full |
Run broad configured application checks. |
akiforge --project PATH adapter check |
Validate generated adapter freshness. |
akiforge --project PATH adapter validate |
Reject dangling thin-contract references. |
akiforge --project PATH codex configure --check |
Preview safe Codex hook activation. |
akiforge --project PATH tool list |
List recognized external tools without live checks. |
akiforge --project PATH tool show graphify |
Show Graphify metadata and display-only guidance. |
akiforge --project PATH tool doctor |
Check only declared external tools. |
akiforge --project PATH tool doctor graphify |
Check Graphify explicitly with a bounded readiness probe. |
akiforge --project PATH project upgrade --check |
Preview a project-contract upgrade. |
akiforge --project PATH project upgrade --apply |
Apply the reviewed upgrade with conflict preservation. |
akiforge --project PATH project upgrade --rollback OPERATION_ID |
Restore an applied project upgrade when its files have not drifted. |
akiforge --project PATH project migrate --check |
Preview the exact packaged 0.1-to-0.2 contract migration. |
akiforge --project PATH project migrate --apply --review-token TOKEN |
Apply an unchanged migration preview atomically. |
akiforge --project PATH project migrate --rollback OPERATION_ID |
Restore the exact pre-migration project bytes. |
akiforge update --check |
Check the globally installed engine. |
akiforge update |
Update the engine through its recognized manager. |
akiforge update --version VERSION |
Restore an exact engine version through its manager. |
External-tool commands report readiness, not compatibility. They never install
or update the tool, execute its native workflow, parse its output, or claim an
artifact is correct or fresh. See External Tool Readiness
before adding the optional .harness/external-tools.json declaration.
Optional local dashboard
Start the dashboard for one explicit project:
akiforge --project /path/to/project dashboard
Open the exact token-bearing URL printed in the terminal. The dashboard shows:
- the active project, runtime probes, gaps, and manual checks;
- the latest valid verification report;
- engine, contract, profile-schema, and adapter status;
- the current project-upgrade plan and conflict list.
Read views do not write the project. Upgrade apply requires review of the exact
plan and an explicit checkbox; stale plans are rejected. Local conflict files
are preserved while packaged candidates are staged under .harness/incoming.
Every dashboard action has a CLI equivalent, and stopping or removing the
dashboard does not affect the engine or project contract.
There is no remote mode, CORS, chat, shell, credential store, generic file browser, or background mutation. See Optional local dashboard for usage, security controls, keyboard navigation, troubleshooting, and manual test steps.
Missing tools are blockers
AkiForge does not search Windows, /mnt/c, sibling drives, or unrelated global installations when a required project command is unavailable.
For a host runtime, commands such as PHP, Composer, or Node must exist on that host. For a Docker Compose runtime, they must exist inside the configured application service. A failed preflight or required verification probe returns a nonzero result and identifies the exact runtime and missing command.
The agent must then ask the user whether to:
- install the command manually;
- start or rebuild the configured service;
- select a different Compose service;
- intentionally change the project runtime profile.
The harness never installs tools or changes images automatically.
Verification results
Application verification writes .harness/reports/last-verification.json and reports:
PASS: every required configured check ran and passed;PASS_WITH_GAPS: required checks passed, with visible optional gaps;FAIL: an executed check failed;INCOMPLETE: a required check or runtime command could not run.
Repository maintainers use just validate to validate AkiForge itself. It is
not a new-project command or proof that application checks passed.
Codex compatibility
Codex uses AGENTS.md, generated .codex/agents/*.toml, compatible skills,
native command rules, and optional hooks. Activate the installed hooks only
through the preview/apply workflow in
Codex configuration.
The PreToolUse hook contract remains intentionally narrow:
- return
{}for unmatched, safe, and approval-required commands; - return
permissionDecision: "deny"only for forbidden commands or policy failures; - let generated native Codex rules own approval prompts.
Do not introduce permissionDecision: "ask", or a pass-through allow response without a valid input rewrite. Docker Compose and Laravel Sail wrappers are normalized before policy matching so wrapped migrations and dependency changes keep the same prompt requirements.
OpenCode compatibility
OpenCode uses AGENTS.md, opencode.jsonc, and generated .opencode/ adapters. Runtime detection and enforcement remain shared Python behavior rather than a platform-specific OpenCode hook.
OpenCode native permissions continue to handle allow, ask, and deny
decisions. Generated adapter files must not be edited directly; maintainers
change packaged canonical inputs, while projects regenerate through
akiforge adapter generate.
Workflow routing
- Tiny: one or two local files, no API/schema/auth/deployment impact. Inspect, edit, run targeted verification, report.
- Normal: several related files or reversible behavior. Use a compact plan, implement, run targeted checks, review the diff, report.
- High risk: auth, permissions, secrets, uploads, payments, migrations, data deletion, deployment, production config, or broad architecture. Use full planning, relevant rules, independent review, full verification, and rollback notes.
Per-invocation approval remains required for dependency changes, Git publication/history operations, file deletion, migrations, deployments, credential access, production operations, and destructive data operations—even when wrapped by Docker or Sail.
Context rules
Always loaded:
AGENTS.md;- the current request;
- the current role or workflow instructions.
Loaded only when relevant:
harness/rules/frontend.md;harness/rules/backend.md;harness/rules/security.md;harness/rules/database.md;harness/rules/deployment.md;harness/rules/testing.md;harness/rules/review.md;- project-specific architecture and API contracts.
Historical runs, completed tasks, all ADRs, and unrelated domain documentation stay unloaded by default.
Legacy vendored compatibility
just recipes, direct scripts/*.py entry points, and full-project sync remain
available only for repositories that already vendor the old harness. They are
not the installation path for new projects. Do not prune vendored files during
the initial adoption change; prove verification and rollback first.
The exact mapping from every legacy command to the global CLI is in Command Migration. Unsupported legacy-only maintenance commands are labeled there rather than silently redefined.
Project details
Release history Release notifications | RSS feed
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 akiforge-0.2.2.tar.gz.
File metadata
- Download URL: akiforge-0.2.2.tar.gz
- Upload date:
- Size: 241.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6d9b8e3a0b626914adc30fb22cba90fb8f7653234779cda988b32b3a61226af
|
|
| MD5 |
41ac305dfff45bfa531082622d2c1220
|
|
| BLAKE2b-256 |
68193d76290d8e02e5237be8981571e0d2e1325210ac26a14c8e88baaf7b0743
|
Provenance
The following attestation bundles were made for akiforge-0.2.2.tar.gz:
Publisher:
release.yml on niks0501/AkiForge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
akiforge-0.2.2.tar.gz -
Subject digest:
c6d9b8e3a0b626914adc30fb22cba90fb8f7653234779cda988b32b3a61226af - Sigstore transparency entry: 2334890365
- Sigstore integration time:
-
Permalink:
niks0501/AkiForge@56e0d1aeba747b34fbc4d2f6ed56e566ff236528 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/niks0501
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@56e0d1aeba747b34fbc4d2f6ed56e566ff236528 -
Trigger Event:
push
-
Statement type:
File details
Details for the file akiforge-0.2.2-py3-none-any.whl.
File metadata
- Download URL: akiforge-0.2.2-py3-none-any.whl
- Upload date:
- Size: 217.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e911dad91c13b70ced52dd0573909a3b2cfefdd020957e8464efc615be44d82
|
|
| MD5 |
80663ad023799a003158f354610389f6
|
|
| BLAKE2b-256 |
464434a504d1878b021cedd62d413f02c2fdbb0e4122b3895b0163f490f5d312
|
Provenance
The following attestation bundles were made for akiforge-0.2.2-py3-none-any.whl:
Publisher:
release.yml on niks0501/AkiForge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
akiforge-0.2.2-py3-none-any.whl -
Subject digest:
1e911dad91c13b70ced52dd0573909a3b2cfefdd020957e8464efc615be44d82 - Sigstore transparency entry: 2334890372
- Sigstore integration time:
-
Permalink:
niks0501/AkiForge@56e0d1aeba747b34fbc4d2f6ed56e566ff236528 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/niks0501
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@56e0d1aeba747b34fbc4d2f6ed56e566ff236528 -
Trigger Event:
push
-
Statement type: