Full cutover executed on railiance01 with operator go-ahead: host
secrets dir + checkout renamed, host venv recreated from scratch
(renaming a venv directory breaks its embedded shebang paths), image
rebuilt/imported, renamed k8s manifests applied alongside the old
namespace (not overwriting it), rollout + in-cluster smoke verified,
then the authoritative host smoke script run against the live
deployment: ok: true, committed: true, pushed: true, with a matching
harness_smoke event confirmed in State Hub. Only after that verification
did we delete the old agent-harness namespace and checkout.
Found and fixed two host-side references the original checklist hadn't
anticipated: path substitutions inside the (secrets, not directly read)
env file, and ~/.ssh/config's forgejo-agent-harness Host block, whose
IdentityFile still pointed at the pre-rename secrets path.
HARNESS-WP-0002 is now fully done (4/4).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude Code executes its own tools internally in --print mode -- there
is no way for a caller to externally dispatch individual tool calls
without abandoning that self-contained agent model. What
--output-format stream-json --include-hook-events does allow: observing
each tool_use/tool_result/hook event in real time.
- adapter.py: AgenticClaudeCodeAdapter gains an optional on_tool_event
callback; streaming mode (Popen + background reader thread) is used
only when set, blocking subprocess.run path is unchanged otherwise.
- runner.py: run_task gains emit_tool_events/on_tool_event, collecting
events onto RunResult.tool_events and posting a tool_call hub event
per tool when reporting is enabled.
- cli.py: --stream-tool-events flag on `run`, prints each event as a
tagged JSON line ahead of the unchanged final result block.
Live-verified against the real claude CLI: 5 real tool events streamed
correctly (2x Bash, 1x Write) plus Stop hook lifecycle events, real
commit landed, final result block unchanged. 13 new tests
(test_adapter.py + 2 in test_runner.py), all passing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
The whole-run-as-one-dispatch_tool-call wrapper is live-proven now; the
per-tool-call hook refactor this task describes remains open.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Registered with State Hub (statehub register) and renamed
REIN-A-WP-0002 to HARNESS-WP-0002 per fix-consistency's C-26 check
(repo's canonical workplan prefix is HARNESS-WP, established by
HARNESS-WP-0001).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
Generate OperatingRhythm-format briefs with OpenRouter-backed llm-connect
JSON + deterministic markdown write/commit. Server path for Binky daily
rhythm without host Claude (BINKY-WP-0006-T05).
Add LLMConnectClient and mail-triage: CSV metadata → OpenRouter-backed
llm-connect JSON plan → deterministic mail-log apply + commit. Server path
for Binky mail intake on Railiance (BINKY-WP-0006).
Add intake client mapping emissions to TaskSpec, CLI poll and
run --from-issue-core, keep --task-file for local dev. Completes
HARNESS-WP-0001 workplan.
resolve_run_policy returns blueprint for persona prepare; add tenant
onboard helper script. Marks HARNESS-WP-0001-T07 done after binky
onboarding handoff.
Container image, k8s namespace/deployment/smoke job, host venv install path,
and deterministic agent-harness smoke (sandbox commit+push+hub) for remote
verification without Claude Code on the worker host.