EnvironmentFile + direct venv ExecStart skipped k8s:// resolution and
could not parse REPO_MAP JSON. Wrapper loads env safely and resolves
ClusterIPs; PATH includes kubectl.
Harden the daily FI prompt and enforce minimum signal so green runs are
not empty templates. Raise default max_tokens. Push origin after commit
when enabled so workstation/Forgejo see briefs (diverged repos still OK).
activity-core owns schedule and spawn; rein-aharness executes the research
brief via llm-connect, commits the artifact, and posts fi_daily_brief for
fi_brief_status idempotence — same layering as brief-daily for Binky.
Maintainer decision, 2026-07-29: adopts TRSL V1C1 as this repo's
preliminary governing license, per target-revenue's
workplans/TREV-WP-0008-governance-and-pilot-rollout.md T05. Full
specialist legal review is deferred until out of beta (target-revenue
SCOPE.md §1). No Phase is yet declared for this repo.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>