fix: reskill prompt addresses team instead of Farnsworth (#147)
Change the Copilot CLI -p argument from addressing Farnsworth directly to 'Team, take a nap and reskill' — the squad agent routes to the right team member via the routing table. - Write reskill prompt to well-known path (.squad/reskill/current-prompt.md) instead of mktemp so the agent can discover it - Add 'take a nap and reskill' trigger phrase to routing.md - Add Reskill Cycle section to Farnsworth's charter - Add test assertions verifying the new prompt pattern Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Juan Manuel Servera committed
May 20, 2026 at 22:57 UTC
2b535c1e44c2c152f11860a2633e876fd4a1d3d0
4 files changed
+16
-2
.github/workflows/crawl-and-publish.yml
+2
-2
@@ -740,7 +740,7 @@ jobs:
740
CURRENT_DATETIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
741
WEEK=$(date -u +%G-W%V)
742
RESKILL_OUTPUT=".squad/reskill/${WEEK}.md"
743
- RESKILL_PROMPT=$(mktemp)
743
+ RESKILL_PROMPT=".squad/reskill/current-prompt.md"
744
mkdir -p .squad/skills .squad/reskill data/metrics
745
746
sanitize_agent_output() {
@@ -755,7 +755,7 @@ jobs:
755
# Intentionally rely on Copilot CLI's default model so CI follows the platform-supported default.
756
if command -v copilot >/dev/null 2>&1 && copilot \
757
--agent squad \
758
- -p "Farnsworth, read the file at ${RESKILL_PROMPT} — it contains the reskill retrospective instructions. Follow them exactly and write the report to ${RESKILL_OUTPUT}." \
758
+ -p "Team, take a nap and reskill" \
759
-s \
760
--no-ask-user \
761
--allow-tool=read \
.squad/agents/farnsworth/charter.md
+3
@@ -27,3 +27,6 @@ Preferred: auto
27
- **What's important:** Significant projects, tools, or shifts in the ecosystem
28
- **What's trending:** Patterns across categories over multiple weeks
29
- **What's missing:** Gaps in the ecosystem, underserved areas, declining trends
30
+
31
+## Reskill Cycle
32
+When asked to "take a nap and reskill", read the prompt at `.squad/reskill/current-prompt.md` and follow the instructions inside. The prompt contains all context (recent analyses, snapshot hindsight, current wisdom) and the output path.
.squad/routing.md
+6
@@ -30,6 +30,12 @@ How to decide who handles what.
30
3. Members can reassign by removing their label and adding another member's label.
31
4. The `squad` label is the "inbox" — untriaged issues waiting for Lead review.
32
33
+## Trigger Phrases
34
+
35
+| Phrase | Action |
36
+|--------|--------|
37
+| "take a nap and reskill" | Farnsworth reads `.squad/reskill/current-prompt.md` and follows the instructions inside |
38
+
39
## Rules
40
41
1. **Eager by default** — spawn all agents who could usefully start work, including anticipatory downstream work.
tests/test_pipeline.py
+5
@@ -211,6 +211,11 @@ class WorkflowConfigTests(unittest.TestCase):
211
self.assertIn("trigger-log.txt", reskill_run)
212
self.assertIn("git add .squad/", reskill_run)
213
self.assertIn("data/metrics/", reskill_run)
214
+ # Reskill prompt addresses the team, not an individual agent
215
+ self.assertIn('"Team, take a nap and reskill"', reskill_run)
216
+ self.assertNotIn("Farnsworth, read the file", reskill_run)
217
+ # Prompt is written to a well-known path, not a temp file
218
+ self.assertIn('RESKILL_PROMPT=".squad/reskill/current-prompt.md"', reskill_run)
219
220
analyze = workflow["jobs"]["analyze"]
221
run_analysis_step = next((s for s in analyze["steps"] if s.get("name") == "Run analysis"), None)