From 9ceaea33ce51bb902d826b9e6023e6efad45c8d0 Mon Sep 17 00:00:00 2001 From: rabbitblood Date: Wed, 15 Apr 2026 11:34:51 -0700 Subject: [PATCH] chore(template): enable idle-loop pilot on Technical Researcher (#205 follow-up) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #205 shipped the workspace idle-loop mechanism (reflection-on-completion pattern from the Hermes/Letta research survey) but deliberately added NO default idle_prompt in org.yaml so rollout could be measured one workspace at a time before going team-wide. This is that first opt-in: Technical Researcher gets a backlog-pull + reflect idle prompt on a 10-minute cadence. ## Why TR first - Research-heavy role with a naturally bursty load — lots of idle time between the once-per-hour plugin curation cron fires - Non-user-facing (no canvas UI impact, no UX risk) - Already has a clear backlog shape: the plugin curation cron produces findings that could feed follow-up studies - Vision-free (no Playwright) so cost per idle tick is pure text ## What the idle_prompt does Three-step reflection, under 60s wall-clock, max 1 A2A send per tick: 1. **Backlog pull** — search_memory "research-backlog:technical-researcher" for any stashed research questions (from prior cron fires or Research Lead delegations). If found → delegate_task to Research Lead with a concrete deliverable spec, then commit_memory to remove the item from the backlog. 2. **Reflection fallback** — if backlog is empty, look at the last memory entry from the Hourly plugin curation cron. Does it surface a follow-up study worth doing? If yes → file a GH issue labeled `research` and commit_memory to put the question on the backlog for next tick. 3. **Idle-clean outcome** — if neither backlog nor reflection produced anything, write "tr-idle HH:MM — clean" to memory and stop. No busy work. Hard rules enforce: max 1 A2A per tick, skip step 1 if Research Lead busy, under 60s wall-clock, never re-run a cron's own prompt from inside the idle loop. ## Rollout plan - **This PR**: enables TR only via the `idle_prompt` + `idle_interval_seconds` fields added to its workspace entry in org.yaml. - **Next 24h**: measure activity_logs delta on TR vs baseline, count idle-fired delegations vs idle-clean outcomes, confirm Research Lead isn't being flooded. - **If green** (delegations land useful work, no flood): roll to Market Analyst + Competitive Intelligence in a follow-up PR. - **If noisy** (too many idle fires producing nothing): tune idle_interval up to 1200-1800s. ## Apply locally per feedback rule Per `feedback_apply_template_locally_too.md`: not waiting for merge. After pushing this PR I'll edit TR's live /configs/config.yaml to add the same idle_prompt + idle_interval_seconds fields, then restart ws-57e13b54-119 (Technical Researcher) so the new workspace-template binary picks up the idle loop immediately. Measurement clock starts from that restart. ## Related - #205 (mechanism) — just merged in this cycle (7f11328) - #208 Hermes Phase 1 — also just merged (be53a33) - docs/ecosystem-watch.md → `### Hermes Agent` — reflection-on-completion pattern reference --- org-templates/molecule-dev/org.yaml | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/org-templates/molecule-dev/org.yaml b/org-templates/molecule-dev/org.yaml index 55366f6d..6dd2579e 100644 --- a/org-templates/molecule-dev/org.yaml +++ b/org-templates/molecule-dev/org.yaml @@ -268,6 +268,45 @@ workspaces: role: AI frameworks and protocol evaluation files_dir: technical-researcher plugins: [browser-automation] + # Idle-loop pilot (#205) — Technical Researcher is the first workspace + # to opt in to the reflection-on-completion pattern. Measure + # activity_logs delta over 24h, then roll to the rest of the research + # team if it produces useful backlog-pull dispatches. + idle_interval_seconds: 600 + idle_prompt: | + You have no active task. Backlog-pull + reflect, under 60 seconds: + + 1. search_memory "research-backlog:technical-researcher" — pull any + stashed research questions from prior cron fires or Research Lead + delegations. If you find one: + - delegate_task to Research Lead with a concrete deliverable spec: + "Research . Report in words. Link 2-3 primary sources. + When done, route audit_summary to PM with category=research." + - commit_memory removing that item from the backlog (or replacing + with the next one) so you don't re-dispatch on the next tick. + + 2. If the backlog is empty, look at your LAST memory entry from the + Hourly plugin curation cron. Did that finding surface a follow-up + study worth doing? (Examples: "which providers does Hermes Agent + actually support beyond our list?", "is there a newer MCP server + we should evaluate?", "does have feature parity with + ?") If yes: + - File a GH issue with the question body, label `research`. + - commit_memory "research-backlog:technical-researcher" with the + same question so the NEXT idle tick picks it up via step 1. + + 3. If neither backlog nor reflection produced anything actionable, + write "tr-idle HH:MM — clean" to memory and stop. Do NOT fabricate + busy work; idle-clean is a legitimate outcome. + + Hard rules: + - Max 1 A2A send per idle tick. + - If Research Lead is currently busy (check workspaces API), skip + step 1 and go straight to step 2 (which doesn't delegate). + - Under 60 seconds wall-clock per tick. If you're still thinking at + 45s, commit to one decision, ship it, stop. + - NEVER call any cron's own prompt from here — idle_prompt is a + lightweight reflection, not a re-run of the hourly survey. schedules: - name: Hourly plugin curation cron_expr: "22 * * * *"