rein-aharness/docs/task-intake.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

2.7 KiB

Task intake (HARNESS-WP-0001-T03)

activity-core emits tasks via IssueSink → POST /issues/ on issue-core. rein-aharness consumes them by polling the same service:

activity-core (cron/rule)
  → IssueCoreRestSink POST /issues/
  → issue-core backend (sqlite / gitea)
  → rein-aharness poll/claim GET+PATCH /issues/
  → run_task (profile + budget + persona + session)
  → PATCH close + hub progress + .kaizen/metrics

TaskExecutorWorkflow stays a stub (activity-core INTENT); execution lives here.

Mail path (server / Railiance)

rein-aharness mail-scan     # deterministic IMAP (AppRole)
rein-aharness mail-triage   # llm-connect HTTP → JSON → apply mail-log + commit

Requires LLM_CONNECT_URL (e.g. in-cluster http://llm-connect.activity-core.svc.cluster.local:8080). Optional: MAIL_TRIAGE_MODEL, MAIL_TRIAGE_MAX_TOKENS, MAIL_TRIAGE_MAX_ROWS. No Claude CLI on the host.

issue-core worker API

Method Path Role
POST /issues/ Ingest (activity-core)
GET /issues/?state=open&label=automated Poll queue
GET /issues/{id} Fetch one
PATCH /issues/{id} Claim (in_progress + assignee) or closed

Auth: Authorization: Bearer $ISSUE_CORE_API_KEY or X-API-Key.

CLI

export ISSUE_CORE_URL=http://127.0.0.1:8765   # or in-cluster service
export ISSUE_CORE_API_KEY=export AGENT_HARNESS_REPO_MAP='{"binky-control":"/home/tegwick/binky-control"}'

# Peek / claim without executing
rein-aharness poll
rein-aharness poll --no-claim

# Claim → run → close (or reopen on failure)
rein-aharness run --from-issue-core

# Local dev (unchanged)
rein-aharness run --task-file examples/task-hello-sandbox.json --no-hub

Label filter

Default: issues must carry the automated label (matches activity-core binky definitions). Override:

export AGENT_HARNESS_INTAKE_LABELS=automated,harness   # ALL required

Agent + completion event mapping

From activity_definition_id or labels:

Hint Instance agent completion_event_type
binky-daily-rhythm / rhythm coach binky_daily_brief
binky-weekly-mail-intake / mail-intake mail-triage binky_mail_intake
binky-weekly-review-prep / weekly-review review-prep binky_weekly_review
else coach executor_run

Instance policy (tool_profile, budget, lane) still comes from the target repo's .kaizen/schedule.yml.

Repo path resolution

  1. Absolute/expanded path if it is already a git repo
  2. AGENT_HARNESS_REPO_MAP JSON
  3. Search AGENT_HARNESS_REPO_ROOTS (default ~:~/work) for the slug