Align AGENTS, AutonomyPolicy, SCOPE, OperatingRhythm with fleet residual role (live intakes, not SCOPE prose). Capture BINKY-WP-0006 leftovers as AWQ-011 (brief-weekly) and AWQ-012 (open-weights retarget).
6.4 KiB
| id | type | title | domain | repo | status | owner | topic_slug | created | updated | state_hub_workstream_id |
|---|---|---|---|---|---|---|---|---|---|---|
| BINKY-WP-0006 | workplan | Railiance rhythm: llm-connect execution (no host coding agent) | infotech | binky-control | finished | codex | the-custodian | 2026-07-21 | 2026-07-22 | 1c068209-c3f7-4445-82ed-f762a095120c |
Close residual gaps after BINKY-WP-0004 cutover so Binky rhythm runs unattended on Railiance without installing Claude Code or any coding agent/harness shell on the host.
Architectural decision (founder direction 2026-07-21)
| Wrong | Right |
|---|---|
| Install Claude CLI / coding agent on railiance01 | Use llm-connect (already in activity-core ns on railiance) via OpenRouter |
| AgenticClaudeCodeAdapter as default on server | Hosted text adapter + deterministic apply of structured results |
| Re-implement policy in every client | Keep Green/Blue rules in harness apply layer; model only classifies/drafts |
Two-phase mail path (already half-built)
- Deterministic scan (
agent-harness mail-scan) — IMAP via AppRole, CSV undermailmeta/reports/, hubbinky_mail_intakecounts. No LLM.
Proven on railiance01 2026-07-21. - Triage — today wrongly defaults to Claude Code agentic session.
Target: call in-cluster
http://llm-connect.activity-core.svc.cluster.local:8080(OpenRouter, cost-efficient open-weights or cheap hosted model) → JSON triage plan → deterministic applier commits metadata-only queue/log updates.
Daily brief / weekly review follow the same pattern (structured draft → apply → commit), not a full IDE agent on the node.
Existing platform assets
- llm-connect Deployment live on railiance01 (
LLM_CONNECT_PROVIDER=openrouter, model currentlygoogle/gemini-2.5-flashin ConfigMap — may retarget to open-weights for cost). - OpenBao lane for OpenRouter key already used by that service
(
llm-connect-provider-secrets/ CCR path under activity-core). - activity-core
llm_client.pyis the HTTP client pattern to reuse. - agent-harness
runner.pyalready accepts an injectedadapter=(swap default off Claude Code for server profiles).
Task: Spec llm-connect mail-triage contract
id: BINKY-WP-0006-T01
status: done
priority: high
state_hub_task_id: "912a8802-e80f-4c04-aecd-9586c3b7a4b0"
Write integrations/railiance-llm-rhythm.md (or extend cutover runbook):
- Input: newest
mailmeta/reports/*.csv(metadata columns only; no bodies). - Output JSON schema: log entries, queue candidates, suspicious flags (sender/subject/date only).
- Model profile: OpenRouter cost-efficient default (prefer open-weights; name candidates + fallback); max tokens; temperature low.
- Apply rules: Blue lane, no push, no network from apply step; suspicious mail never acted on.
- Where it runs: railiance Job/CronJob or host timer calling
agent-harness mail-triage(new subcommand), not Claude.
Done when: doc reviewed against AutonomyPolicy + mailscan two-phase design.
Task: Implement hosted triage path in agent-harness
id: BINKY-WP-0006-T02
status: done
priority: high
state_hub_task_id: "00439d4e-d6ee-4cbc-98e2-431eca4651fe"
In agent-harness (implementation repo; this WP tracks binky integration):
LlmConnectHttpAdapter(or client matching activity-corellm_client.py) usingLLM_CONNECT_URL.mail-triagecommand: read report → prompt → parse JSON → apply tomailmeta/mail-log.md+ queues → local commit → hub event.- Server profile default: never require
claudeCLI. - Tests with fixture CSV + mock HTTP llm-connect.
Done when: unit tests green; dry-run docs for railiance.
Task: Wire OpenRouter model profile on railiance llm-connect
id: BINKY-WP-0006-T03
status: done
priority: high
state_hub_task_id: "1f82c8e0-945e-44b6-a5dc-22dd055e751d"
On railiance01 activity-core llm-connect ConfigMap (and optional dedicated profile env for rhythm):
- Confirm OpenRouter secret still healthy (no values in git/chat).
- Choose cost-efficient model (open-weights preferred; document choice and $/MTok rationale).
- Smoke: in-cluster request from a Job to llm-connect with a tiny prompt.
- Expose URL to host timers if host-run:
LLM_CONNECT_URL=http://…via cluster DNS or port-forward service policy (prefer in-cluster CronJob over host if possible).
Done when: smoke OK; ConfigMap change committed in llm-connect/activity-core overlays as appropriate.
2026-07-22: In-cluster llm-connect smoke OK (OpenRouter/google/gemini-2.5-flash). Host mail-triage via port-forward succeeded (commit on railiance). Open-weights model lock deferred — current model works; retarget when desired.
Task: Railiance schedule uses llm path; drop Claude residual
id: BINKY-WP-0006-T04
status: done
priority: medium
state_hub_task_id: "2093bf62-20ef-4d3e-9b91-be77a38603f7"
Update scripts/railiance-rhythm/run-mail.sh to call mail-scan then
mail-triage (llm-connect), remove require_claude for mail. Prefer
migrating daily/review similarly or keep them laptop-optional until T05.
Update OperatingRhythm.md + executor-cutover-runbook residual section: no coding agent on railiance.
2026-07-22: Timers/scripts updated; mail path scan+triage; daily/review still wait on brief-* commands (T05).
Task: Daily/review via llm-connect (optional same WP if small)
2026-07-22: agent-harness brief-daily shipped; live brief briefs/2026-07-22-daily-brief.md via llm-connect on railiance. Weekly review still open (brief-weekly).
id: BINKY-WP-0006-T05
status: done
priority: medium
state_hub_task_id: "503ff56b-ac38-44b0-911e-937e0c2fc089"
Extend the same pattern to daily brief + weekly review prep: structured generation via llm-connect + deterministic markdown apply + commit. If scope grows, spawn BINKY-WP-0007 and mark this task done with handoff.
Task: Closure
id: BINKY-WP-0006-T06
status: done
priority: low
state_hub_task_id: "3a93d7d4-f949-4a85-ad2e-a566ccc1f966"
Three clean unattended mail cycles on railiance (scan+triage); milestone;
statehub fix-consistency.
2026-07-22: Three clean scan+triage cycles on railiance01 (UTC 08:26–08:27),
each ok with hub events binky_mail_intake + binky_mail_triage. Host
LLM_CONNECT_URL discovery now prefers reachable ClusterIP (not broken
cluster DNS). Residuals handed off as live intakes: AWQ-011 (brief-weekly
via llm-connect), AWQ-012 (optional open-weights model retarget).