rein-aharness/README.md
tegwick f6930ad115 Rename package, CLI, and deploy artifacts to rein-aharness (HARNESS-WP-0002-T02)
agent_harness -> rein_aharness (package + all imports), CLI command
agent-harness -> rein-aharness, Docker image tag, k8s namespace/labels/
names, Makefile targets, deploy script env var/paths. In-repo identity
strings (hub event source, metrics harness field, default assignee,
argparse prog name, commit author identity) updated to match.

Historical documents left untouched on purpose: docs/adr/ADR-001-agent-harness-architecture.md,
docs/architecture.md (dated v0.1 snapshot), workplans/HARNESS-WP-0001
(completed under the old name), and the SSH host alias
"forgejo-agent-harness" (external ~/.ssh/config entry, not owned here).

Verified: 47/47 tests pass, CLI runs correctly from a fresh venv,
`make image` builds and the resulting container runs correctly.

deploy/README.md gained an explicit rename cutover checklist for what
this session cannot safely do unattended -- moving the host-side
secrets dir and checkout on railiance01, and not deleting the old k8s
namespace until the new one is confirmed working. The actual live
cutover (running that checklist against the real Railiance deployment)
is not attempted here -- real production surgery on binky-control's
live automation, needs the operator present.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 14:22:18 +02:00

75 lines
3.4 KiB
Markdown

# rein-aharness
(formerly `agent-harness`, renamed per glas-harness ADR-001 "rein" harness family)
The single shared runtime for unattended agent instances in the Coulomb /
Operational Knowledge ecosystem. Projects declare agents (manifest +
`.kaizen/` state); this harness runs them — blueprint via kaizen-agentic,
tasks via activity-core, compute via llm-connect, credentials via
OpenBao/ops-warden, reporting to the Custodian State Hub.
Within the glas-harness meta-framework, this repo is the **`rein-aharness`
rein**: the Claude-Code-CLI-driven, unattended/scheduled harness for
tenants that need governed cron-style agent runs. See
[glas-harness ADR-001](../glas-harness/docs/adr/ADR-001-rein-harness-family.md)
for how it relates to other reins (e.g. `rein-openweights`).
The CLI command (`rein-aharness`) and Python package (`rein_aharness`) are
renamed. Deploy artifacts (Docker image tag, k8s namespace, Railiance host
paths) are renamed in this repo too, but the live Railiance cutover itself
(moving the host-side checkout + secrets dir, redeploying) is a separate,
deliberate step — tracked in
[workplans/HARNESS-WP-0002](workplans/HARNESS-WP-0002-rename-and-glas-harness-alignment.md)
and [deploy/README.md](deploy/README.md)'s rename cutover checklist.
- Why and boundaries: [INTENT.md](INTENT.md)
- Decision + architecture: [docs/adr/ADR-001](docs/adr/ADR-001-agent-harness-architecture.md)
(kept under its original filename — it documents the pre-rename decision),
[docs/architecture.md](docs/architecture.md)
- Current work: [workplans/](workplans/)
## Usage
```
# Validate a consuming repo's instance manifest (.kaizen/schedule.yml)
rein-aharness validate --target ~/binky-control
rein-aharness validate --target ~/binky-control --strict # require harness fields
# List named tool profiles
rein-aharness profiles
# Run exactly one task (local JSON task-file path — dev)
rein-aharness run --task-file examples/task-hello-sandbox.json [--no-hub] [--no-metrics]
# Production intake: poll issue-core (activity-core emissions), claim, run, close
export ISSUE_CORE_URL=http://127.0.0.1:8765 ISSUE_CORE_API_KEY=…
rein-aharness poll
rein-aharness run --from-issue-core
# Deterministic mailbox scan (no LLM session)
rein-aharness mail-scan --target-repo ~/binky-control
# Mail triage via llm-connect HTTP (OpenRouter behind the service; no Claude CLI)
export LLM_CONNECT_URL=http://llm-connect.activity-core.svc.cluster.local:8080
rein-aharness mail-triage --target-repo ~/binky-control
# Daily brief via llm-connect (structured JSON → briefs/YYYY-MM-DD-daily-brief.md)
rein-aharness brief-daily --target-repo ~/binky-control
# Railiance packaging smoke (commit + optional push + hub; no Claude required)
rein-aharness smoke --work-dir ~/work/executor-sandbox
```
Railiance deploy: [deploy/README.md](deploy/README.md).
Each `run` resolves the agent's tool profile + budget from the target
repo's instance manifest (default `green-commit-only`), loads a persona
bundle (`kaizen-agentic schedule prepare`), runs a bounded agentic
session (cwd-pinned, hard allow-list, never pushes), verifies a local
commit, writes `.kaizen/metrics`, and posts a State Hub progress event.
Instance manifest contract: [docs/instance-manifest.md](docs/instance-manifest.md).
Example: [examples/schedule.harness.yml](examples/schedule.harness.yml).
Tests: `PYTHONPATH=".:$HOME/llm-connect" python3 -m pytest tests/ -q`