Agent harness component in the glas-harness framework of the helix-forge software factory ecosystem.
Find a file
codex 7641fcde40 fix(workplans): declare type: workplan on records the hub already holds
These files carried no type field at all. Selection is by 'type: workplan', so
they were invisible to every projection while the hub held a record for each —
and a forge-derived reset read those correct records as no longer deriving and
queued them for retirement.

Only the type line is added.

Refs STATE-WP-0083-T05

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-26 20:56:04 +02:00
deploy feat: route profiled ops runs through Glas 2026-08-22 23:55:29 +02:00
docs Build durable close evidence outbox 2026-08-23 14:05:50 +02:00
examples Rename package, CLI, and deploy artifacts to rein-aharness (HARNESS-WP-0002-T02) 2026-07-26 14:22:18 +02:00
history docs: align scope with current capability 2026-08-23 10:42:44 +02:00
rein_aharness Classify heartbeat lease failures 2026-08-23 14:42:30 +02:00
scripts Rename package, CLI, and deploy artifacts to rein-aharness (HARNESS-WP-0002-T02) 2026-07-26 14:22:18 +02:00
tests Classify heartbeat lease failures 2026-08-23 14:42:30 +02:00
workplans fix(workplans): declare type: workplan on records the hub already holds 2026-08-26 20:56:04 +02:00
.custodian-brief.md chore(consistency): sync task status from DB [auto] 2026-08-25 22:42:45 +02:00
.gitignore Adopt canonical HARNESS-WP prefix, add State Hub bootstrap files 2026-07-26 12:32:59 +02:00
.repo-classification.yaml Start governed runtime integrity baseline 2026-08-23 11:48:18 +02:00
AGENTS.md docs(agents): repoint remote State Hub URL to the in-cluster address 2026-08-25 00:21:54 +02:00
Containerfile Rename package, CLI, and deploy artifacts to rein-aharness (HARNESS-WP-0002-T02) 2026-07-26 14:22:18 +02:00
INTENT.md Rename repo to rein-aharness per glas-harness ADR-001 2026-07-26 12:28:44 +02:00
LICENSE Adopt Target Revenue Source License V1C1 (org-wide preliminary rollout) 2026-07-30 00:57:34 +02:00
Makefile feat: route profiled ops runs through Glas 2026-08-22 23:55:29 +02:00
pyproject.toml feat: route profiled ops runs through Glas 2026-08-22 23:55:29 +02:00
README.md Build durable close evidence outbox 2026-08-23 14:05:50 +02:00
SCOPE.md docs: align scope with current capability 2026-08-23 10:42:44 +02:00
uv.lock feat: route profiled ops runs through Glas 2026-08-22 23:55:29 +02:00
WORK-RECORDS.md chore(consistency): refresh work-record index 2026-08-25 22:43:16 +02:00

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.

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]

# Execution-profile overrides supplied by glas-harness
rein-aharness run --task-file examples/task-hello-sandbox.json \
  --model claude-sonnet-4-6 \
  --tool-profile green-commit-only \
  --budget-tokens 60000 \
  --no-hub --no-metrics

# Primary production intake: activity-core ops_run claim (ACT-ADR-005 / REIN-A-0002)
export ACTIVITY_CORE_URL=http://127.0.0.1:8010
export ACTIVITY_CORE_WORKER_TOKEN=…
export AGENT_HARNESS_REPO_MAP='{"freedom-intelligence":"~/freedom-intelligence","binky-control":"~/binky-control"}'
rein-aharness poll --source=ops-run --no-claim
rein-aharness run --from-ops-run
rein-aharness claim-loop
# Install user service: ./deploy/scripts/install-claim-loop-user.sh
# Docs: docs/ops-run-claim-loop.md

# A queued harness_profile_ref is authoritative: the claim worker builds a
# Glas ExecutionRequest and invokes its resolver/gateway. Install the sibling
# runtime packages in the claim-loop venv:
pip install -e ../sand-boxer -e ../glas-harness

# Legacy: issue-core tickets (external / Forgejo projection only — not FI/Binky ops)
export ISSUE_CORE_URL=http://127.0.0.1:8765 ISSUE_CORE_API_KEY=…
rein-aharness poll --source=issue-core
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 and weekly briefs via llm-connect (structured JSON → deterministic markdown)
rein-aharness brief-daily --target-repo ~/binky-control
rein-aharness brief-weekly --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. When invoked through glas-harness, the explicit versioned Glas profile may override model, tool profile, and budget for that bounded run. Workforce and activity consumers should reference the Glas profile rather than encode these rein CLI details in an assignment.

Instance manifest contract: docs/instance-manifest.md. Example: examples/schedule.harness.yml. Repository mutation authority: docs/repository-grant.md. Durable result-close design: docs/close-evidence-outbox.md.

Tests: PYTHONPATH=".:$HOME/llm-connect" python3 -m pytest tests/ -q