rein-aharness/README.md
tegwick 8e700c07de Rename repo to rein-aharness per glas-harness ADR-001
Repo-identity rename only (directory, git remote, pyproject name,
self-referencing docs). CLI/package/deploy rename tracked separately
in REIN-A-WP-0002-T02 since it touches a live Railiance deployment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 12:28:44 +02:00

72 lines
3.1 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 (`agent-harness`), Python package (`agent_harness`), and
deploy artifacts (Docker image tag, k8s namespace, Railiance host paths)
still use the old name — that rename is tracked separately in
[workplans/REIN-A-WP-0002](workplans/REIN-A-WP-0002-rename-and-glas-harness-alignment.md)
because it touches a live Railiance deployment.
- Why and boundaries: [INTENT.md](INTENT.md)
- Decision + architecture: [docs/adr/ADR-001](docs/adr/ADR-001-agent-harness-architecture.md),
[docs/architecture.md](docs/architecture.md)
- Current work: [workplans/](workplans/)
## Usage
```
# Validate a consuming repo's instance manifest (.kaizen/schedule.yml)
agent-harness validate --target ~/binky-control
agent-harness validate --target ~/binky-control --strict # require harness fields
# List named tool profiles
agent-harness profiles
# Run exactly one task (local JSON task-file path — dev)
agent-harness 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=…
agent-harness poll
agent-harness run --from-issue-core
# Deterministic mailbox scan (no LLM session)
agent-harness 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
agent-harness mail-triage --target-repo ~/binky-control
# Daily brief via llm-connect (structured JSON → briefs/YYYY-MM-DD-daily-brief.md)
agent-harness brief-daily --target-repo ~/binky-control
# Railiance packaging smoke (commit + optional push + hub; no Claude required)
agent-harness 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`