|
|
||
|---|---|---|
| deploy | ||
| docs | ||
| examples | ||
| rein_aharness | ||
| scripts | ||
| tests | ||
| workplans | ||
| .custodian-brief.md | ||
| .gitignore | ||
| AGENTS.md | ||
| Containerfile | ||
| INTENT.md | ||
| LICENSE | ||
| Makefile | ||
| pyproject.toml | ||
| README.md | ||
| SCOPE.md | ||
| WORK-RECORDS.md | ||
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
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
and deploy/README.md's rename cutover checklist.
- Why and boundaries: INTENT.md
- Decision + architecture: docs/adr/ADR-001 (kept under its original filename — it documents the pre-rename decision), docs/architecture.md
- Current work: 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.
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. Example: examples/schedule.harness.yml.
Tests: PYTHONPATH=".:$HOME/llm-connect" python3 -m pytest tests/ -q