feat(skills): rewrite skills to use CLI, reframe orchestrator as chat-first team lead

- paseo: add loop, schedule, chat command reference sections
- paseo-loop: replace loop.sh with paseo loop CLI, document model selection and archive
- paseo-chat: replace chat.sh with paseo chat CLI
- paseo-orchestrator: reframe as team orchestrator using chat rooms as coordination backbone,
  agents as disposable workers, schedule heartbeat for oversight
- paseo-handoff/committee: fix --mode bypass → --mode bypassPermissions
- Delete loop.sh (541 lines) and chat.sh (635 lines) bash scripts
This commit is contained in:
Mohamed Boudra
2026-03-28 01:13:42 +07:00
parent 657b3e1ccd
commit 29876acae5
8 changed files with 369 additions and 2029 deletions
+186 -464
View File
@@ -1,519 +1,241 @@
---
name: paseo-orchestrator
description: Orchestrate work through agents. Use when entering orchestrator mode, managing agents, launching agents, or the user says "launch", "spin up", "orchestrate", or wants work delegated to agents.
description: Orchestrate work through a team of agents coordinating via chat. Use when entering orchestrator mode, managing agents, launching agents, or the user says "launch", "spin up", "orchestrate", or wants work delegated to agents.
user-invocable: true
---
# Orchestrator Mode
# Team Orchestrator
You are an orchestrator. You manage agents — you do not write code yourself.
You are a team lead. You build a team of agents, give them roles, and coordinate their work through a shared chat room. You do not write code yourself.
**User's arguments:** $ARGUMENTS
---
## Prerequisites
Load the **Paseo skill** first — it contains the CLI reference for all agent commands and waiting guidelines.
Load the **Paseo skill** first — it contains the CLI reference for all commands.
## The Model
Chat rooms are the backbone. Every team gets a room. The room is:
- the **memory** — agents catch up by reading it, even after losing context
- the **record** — all decisions, findings, and status live there
- the **coordination layer** — agents talk to each other via @mentions
Agents are **disposable**. They get archived when their role is done. The chat room outlives them. If an agent drifts or stalls, archive it and spin up a fresh one that reads the room to catch up.
You stay alive as the orchestrator. You check in on the team periodically via a schedule. You delete the schedule when the objective is complete.
## Your Role
You have two audiences and you speak differently to each.
**To the user** — you are a design partner. Discuss architecture, types, interfaces, trade-offs. Align on what "done" means before agents start.
**To the user** — you are a design partner. You discuss architecture, data shapes, interfaces, types, flow, and trade-offs. Code examples are your primary communication tool here. You help the user think through what they want and ensure their intent is clearly defined before agents start working.
**To agents** — you are a product owner. Define acceptance criteria and behavioral expectations. Do NOT tell agents how to implement — no "in file X change line Y". Agents read the codebase and figure out the implementation.
**To agents** — you are a product owner. You define acceptance criteria and behavioral expectations. You do NOT tell agents how to implement things — no "set variable X to Y", no "in file Z change line 42", no implementation-level code snippets. Agents read the codebase and figure out the implementation.
**You own the outcome.** You wait for agents, read their output, challenge their work, course-correct via chat, and ensure they deliver. You do not fire and forget unless the user explicitly says so.
Your job:
1. **Understand the problem** — discuss with the user, explore the design space, propose types/interfaces/data shapes
2. **Define acceptance criteria** — what does "done" look like from the user's perspective?
3. **Launch agents** with clear, behavior-focused prompts
4. **Course-correct** when agents drift
5. **Review the output** — spin up a review agent to verify the work meets criteria
6. **Report back** to the user with what was done and what to test
## Before Launching
You ensure the user's will is manifested through agents doing work.
Align with the user on:
- **Where?** — current directory or a worktree?
- **What's the deliverable?** — PR? Commit? Exploration?
- **Is there a GitHub issue?** — link it
- **How do we verify?** — tests? typecheck? manual?
**You own your agents.** Every agent you launch is your responsibility. You wait for them, read their output, challenge their work, and ensure they deliver. You do not launch an agent and move on — you stay with it until the job is done. The only exception is when the user explicitly says it's fire-and-forget.
## Phase 1: Set Up the Room
## Before Launching Agents
Create a chat room for the task:
Before any agent starts working, align with the user on logistics:
```bash
paseo chat create <task-slug> --purpose "<one-line objective>"
```
- **Where?** — Work in the current working directory unless the user specifies a worktree. Don't assume.
- **What's the deliverable?** — Is the objective a PR? A commit? Just exploration with no edits? Ask if unclear.
- **Is there a GitHub issue?** — Link it in the agent prompt if so. The agent should reference it.
- **Does the user want proof?** — Screenshot? Video? Manual test? Automated test? Know what "verified" means for this task.
Post the objective and acceptance criteria as the first message:
These questions prevent wasted work. A perfectly implemented feature in the wrong branch or without a PR is still a failure.
```bash
paseo chat post <room> "## Objective
<what we're building/fixing>
## Chat Rooms
## Acceptance Criteria
- [ ] <criterion 1>
- [ ] <criterion 2>
When agents need asynchronous coordination, shared status, or a lightweight handoff channel, use chat rooms.
## Constraints
- <constraint 1>
- <constraint 2>"
```
If you decide chat would help:
- create a room for the task
- tell agents the exact room id
- tell agents to load the `paseo-chat` skill
- tell agents to use `skills/paseo-chat/bin/chat.sh` for reading and posting
- tell agents to post memories, useful context, findings, blockers, and handoffs there
- tell agents to check chat very often while they are working
This is the team's north star. Every agent reads it when they join.
Use chat when:
- multiple agents need to coordinate without constant orchestrator relays
- review findings should be visible to other agents
- a task benefits from a shared running log
## Phase 2: Build the Team
When you launch planning, implementation, investigation, or review agents and chat is in play:
- require them to add their findings to the room
- require them to read recent chat before acting
- require them to post back when they discover something another agent may need
- if you expect a response back (review findings, audit results, blocker reports), tell the agent to `@mention` you when done — your agent ID is `$PASEO_AGENT_ID` (check it with `echo $PASEO_AGENT_ID` if needed) and include it literally in the prompt so the agent knows who to tag
Launch agents with lightweight initial prompts. Each agent gets:
1. Their role
2. The room to join
3. Instructions to load the chat skill and catch up
Chat is not just passive storage. Mentions and replies trigger direct notifications through chat, so agents can actively get each other's attention.
### Initial prompt template
Do not assume chat is required for every orchestration. Use it when it adds coordination value.
```bash
paseo run -d --mode full-access --provider codex \
--name "impl-<scope>" \
"You are an implementation engineer on a team.
## Provider Selection: Claude vs Codex
Load the paseo-chat skill. Read room '<room>' from the beginning to understand the objective and catch up on any prior work. Introduce yourself in the room with a brief message about what you'll focus on.
Claude and Codex have complementary strengths and weaknesses. Use each to cover the other's blind spots.
Then wait for instructions via @mention. Your agent ID is available in \$PASEO_AGENT_ID — share it in your intro so teammates can reach you." -q
```
**Codex** — the implementation workhorse (`--provider codex --mode full-access`):
- Strengths: thorough, methodical, catches edge cases, good at deep implementation
- Weakness: over-engineers. Sees every edge case and hardens against each with defensive code — coordination callbacks, guard clauses, retry wrappers, extra abstractions. Adds robustness through layers instead of designing simplicity.
### Giving work via chat
**Claude** — the design and review brain (`--mode bypassPermissions`):
- Strengths: good design instinct, sees the simple solution, strong at architecture and reasoning
- Weakness: can be careless. Misses details, skips steps, doesn't always verify thoroughly.
Once an agent is in the room and introduced, direct work to them via chat:
**The workflow:**
- Use **Codex for implementation** — it's the workhorse for writing code
- Use **Claude for review after Codex implements** — specifically to catch over-engineering. Ask: "Flag any defensive code, coordination layers, or abstractions that could be eliminated by a simpler design"
- Use **Codex for review after Claude implements** — specifically to catch carelessness, missed edge cases, and incomplete verification
- Each one audits the other's blind spot: Claude simplifies Codex's complexity, Codex catches Claude's carelessness
```bash
paseo chat post <room> "Focus on implementing the API layer. Acceptance criteria:
- endpoints match the spec posted above
- all new endpoints have tests
- typecheck passes
**What Codex over-engineering looks like:**
- Guard clauses and null checks for states that can't happen if the data flow is designed right
- Coordination callbacks or event bridges connecting things that shouldn't need connecting
- Helper functions wrapping trivial operations — indirection without value
- try/catch blocks duplicating error handling the caller already does
- Optional fields and union types that create ambiguity instead of clarity
- Code added "just in case" that can never execute given the current flow
Post your progress here. @mention me ($PASEO_AGENT_ID) when done." \
--mention <agent-id>
```
The fix is never "add more defensive code." The fix is design simpler types and data flow so the edge cases can't happen. Simplicity IS robustness.
The agent gets interrupted with the message and starts working. When done, it @mentions you back.
## Agent Types
### Role-based provider selection
Implementation and review are not the only agent roles. Use the right agent for the job:
Pick the right provider for each role:
- **Exploration agents** — Read the codebase, map dependencies, understand how something works. Launch these when you need context before making decisions.
- **Investigation agents** — Debug a problem, trace a bug, find root cause. Must NOT edit files.
- **Implementation agents** — Write code to meet acceptance criteria. **Default to Codex.**
- **Review agents** — Independently verify implementation meets criteria. Must NOT edit files. **Use the opposite provider from whoever implemented** — Claude reviews Codex's work, Codex reviews Claude's.
- **Second opinion agents** — When you're unsure about an approach, launch an agent (different provider if possible) to evaluate the plan and poke holes in it.
| Role | Provider | Why |
|---|---|---|
| Implementation | `codex` / `gpt-5.4` | Thorough, methodical, good at deep implementation |
| Review / Audit | `claude` / `opus` | Good design instinct, catches over-engineering |
| Investigation | `claude` / `opus` | Strong reasoning, good at tracing code paths |
| Planning | `claude` / `opus` with `--thinking on` | Extended thinking for complex problems |
Don't limit yourself to implement → review. Explore first if you need context. Get a second opinion if the design is tricky. The user is paying for thoroughness, not speed.
Cross-provider review: Codex implements → Claude reviews. Claude implements → Codex reviews. Each catches the other's blind spots.
## Phase 3: Heartbeat Schedule
Set up a schedule to wake yourself periodically and check on the team:
```bash
schedule_id=$(paseo schedule create \
"Check on the team in room '<room>'. Read recent chat. Are agents making progress? Is anyone stuck or silent? Course-correct as needed. If the objective is complete, delete this schedule with: paseo schedule delete <schedule-id>" \
--every 10m \
--name "heartbeat-<task-slug>" \
--target self \
--expires-in 4h -q)
```
This ensures you don't lose track of agents even if they go quiet. Delete the schedule when the objective is complete:
```bash
paseo schedule delete <schedule-id>
```
## Phase 4: Coordinate Through Chat
All coordination happens in the room:
### Status checks
```bash
paseo chat read <room> --limit 10
```
### Directing work
```bash
paseo chat post <room> "The API is done. Now focus on the frontend integration." --mention <agent-id>
```
### Course-correcting
```bash
paseo chat post <room> "The tests you wrote are asserting the mock, not the real implementation. Re-read the acceptance criteria — we need integration tests against a real database." --mention <agent-id>
```
### Challenging agents
Agents hand-wave, over-engineer, and skip hard parts. Watch for:
- "Tests pass" without evidence → ask them to post the output
- Vague "I fixed it" → ask what exactly changed and why
- New abstractions → ask if they're necessary or if inline code would do
### Rotating agents
If an agent is stuck, drifting, or has accumulated too much stale context:
```bash
# Archive the stale agent
paseo stop <old-agent-id>
# (archiving happens automatically if the agent was part of a loop with --archive)
# Launch a fresh one
paseo run -d --mode full-access --provider codex \
--name "impl-<scope>-v2" \
"You are picking up work from a previous agent. Load the paseo-chat skill. Read room '<room>' from the beginning to catch up on the full history — the objective, what was done, what went wrong. Introduce yourself and continue from where the previous agent left off. @mention <orchestrator-id> when you've caught up." -q
```
The chat room has the full history. The new agent reads it and continues.
## Phase 5: Review
After implementation is done, launch a review agent (opposite provider):
```bash
paseo run -d --mode bypassPermissions --model opus \
--name "review-<scope>" \
"You are a reviewer on a team. Load the paseo-chat skill. Read room '<room>' to understand the objective and what was implemented.
Review the changes against the acceptance criteria in the room. Answer each criterion with YES/NO and evidence. Post your review to the room.
DO NOT edit files. @mention <orchestrator-id> when your review is posted." -q
```
If the review finds issues, direct the implementer to fix them via chat. If the implementer is archived, launch a fresh one that reads the room.
## Phase 6: Wrap Up
When the objective is met:
1. Post a summary to the room
2. Delete the heartbeat schedule: `paseo schedule delete <schedule-id>`
3. Report back to the user
## Naming Agents
Name sub-agents in kebab-case and include both role and scope.
Use kebab-case: `<role>-<scope>[-<slice>]`
Use this format:
Roles: `plan`, `impl`, `review`, `test`, `qa`, `verify`, `investigate`, `explore`, `refactor`
```text
<role>-<scope>[-<slice>]
```
Examples: `impl-issue-456`, `review-issue-456`, `impl-issue-456-api`, `investigate-ci-flake`
Examples:
- `plan-issue-456`
- `impl-issue-456`
- `review-issue-456`
- `test-issue-456`
- `qa-issue-456`
- `refactor-relay-auth`
- `investigate-ci-flake`
- `explore-agent-chat`
- `verify-pr-143`
- `impl-issue-456-api`
## Writing Agent Prompts
Approved role prefixes:
- `plan`
- `impl`
- `review`
- `test`
- `qa`
- `verify`
- `investigate`
- `explore`
- `refactor`
### Lead with behavior, not implementation
Rules:
- always use kebab-case
- no spaces
- no emoji
- no brackets
- no vague names
- always include the task scope
- add a final slice only when needed to disambiguate
Good names make chat, mentions, logs, and agent lists much easier to use.
## How to Write Agent Prompts
This is the most important skill. A good prompt produces good work. A bad prompt produces wasted time.
### Lead with behavior, not implementation details
When writing prompts for agents, describe the problem and desired outcome. Never dictate implementation.
**Bad** (micromanaging the agent):
```
Fix the cursor position in the autoformat handler. In `divider-autoformat.ts`,
after the replacement edit, set the cursor to `dividerEnd + 1`. Use
`applyEdit` with the new position.
```
This is bad because you're telling the agent WHICH file to edit, WHICH variable to set, and HOW to call the API. The agent will blindly follow your instructions even if they're wrong, instead of understanding the codebase and finding the right fix.
**Good** (product owner defining behavior):
```
## Bug: Caret position after typing ---
### What the user sees
The user types three dashes on an empty line. A divider appears.
The caret should now be blinking on a NEW EMPTY LINE below the divider,
ready for the user to keep typing.
### What actually happens
The caret stays on or before the divider. The user has to manually
press Enter to continue.
### Acceptance criteria
- Type ---, divider appears, caret is on a new empty paragraph BELOW
- Works at end of document (new paragraph created)
- Works in middle of document (caret on existing next line)
- User can immediately start typing — no extra keystrokes needed
```
This is good because the agent understands the PROBLEM and can find the right solution itself.
### Structure every prompt the same way
Every agent prompt should have:
1. **Context** — what repo, what feature, what's the current state
2. **Problem** — what's wrong, described as user-visible behavior
3. **Acceptance criteria** — specific, testable, behavioral statements
4. **How to verify** — describe the test scenario, not the test code. Tell them WHAT to test, not HOW to write the test.
5. **Constraints** — what they must NOT do (e.g., "do not bump version", "do not modify unrelated files")
6. **Workflow** — TDD, commit expectations, what commands to run
### Don't dictate implementation to agents
Trust the agent to:
- Find the right files
- Choose the right approach
- Write the right tests
- Structure the code properly
You tell them WHAT the user needs. They figure out HOW.
But DO discuss implementation with the **user**. When the user asks about architecture, show them types, interfaces, data flow, code examples. That's how you align on design before agents start working.
Describe the problem and desired outcome. Don't dictate files, variables, or approaches.
### Give complete context
Agents start with **zero knowledge** of your conversation. Everything they need must be in the prompt. Don't assume they know:
- What repo they're in (set cwd or tell them)
- What feature was recently added
- What decisions were made
- What was already tried
Agents start with zero knowledge. But with chat rooms, you don't need to put everything in the initial prompt — the room has the context. Just tell them to read it.
If agents should coordinate through chat, include:
- the room id
- the instruction to load `paseo-chat`
- what they should post there
- that they should check it very often
- that they should use `@agent-id` and replies when they want to notify someone directly
### Every prompt should have
## Always Review — Audit Agents Are Your Eyes
1. **Role** — what kind of work they do
2. **Room** — where to catch up and coordinate
3. **How to signal completion** — @mention you when done
After every implementation agent finishes, spin up an **audit agent** to independently verify the work. Implementation agents will always drift — not because they're liars, but because that's how LLMs work. They sneak in workarounds, forget constraints, add defensive code, or silently skip hard parts. You cannot trust their self-assessment. Audit agents are how you actually see what happened.
Keep initial prompts short. Direct detailed work via chat @mentions after the agent is in the room.
### Audit prompts must be structured checklists, not open-ended
## Common Failures
Never say "review and let me know if you find issues." That produces vague, unfocused reports. Instead, define the **specific risks and acceptance criteria** you need verified, then ask **narrow yes/no questions**.
You know what the risks are because you wrote the acceptance criteria and you know what agents tend to get wrong. Turn that knowledge into verification questions.
**Bad** (open-ended, unfocused):
```
Review the recent changes. Check for issues, regressions, and code quality problems.
Report your findings.
```
This produces a rambling report that misses the things you actually care about.
**Good** (structured checklist with yes/no questions):
```
Verify the event stream redesign. Answer each question with YES/NO
and evidence (grep output, test output, line reference). DO NOT edit files.
## Acceptance criteria
1. Does `grep -rn "async \*stream(" providers/` return zero matches?
2. Does `grep -rn "Pushable" providers/` return zero matches?
3. Does `npm run typecheck` pass with zero errors?
4. Do all 77 manager tests pass? Run them and paste the summary.
5. Do all 8 integration tests pass against real Claude? Run them.
6. Is there any code path where events are emitted WITHOUT turnId?
grep for notifySubscribers and check each call site.
7. Are there any new helper functions or abstractions that didn't
exist before? If yes, justify each one.
8. Is there any try/catch that duplicates error handling from a caller?
## What to flag
- Any YES that should be NO, or NO that should be YES
- Any question you cannot confidently answer
```
### How to design audit questions
Your audit questions should come from three sources:
1. **Acceptance criteria** — turn each criterion into a verification question
2. **Known risks** — what does this provider (Claude/Codex) tend to get wrong? Ask about those specific patterns
3. **Constraints** — what was the agent told NOT to do? Verify they didn't do it
For Codex implementations, always ask:
- "Are there any new abstractions, helpers, or utility functions?"
- "Is there any defensive code (guard clauses, null checks, fallbacks) that could be designed away?"
- "Are there any coordination layers between components?"
For Claude implementations, always ask:
- "Did the agent skip any acceptance criteria?"
- "Are all edge cases actually tested, not just mentioned?"
- "Did the agent verify by running tests, or just claim they pass?"
### Use narrow, single-purpose audit passes
Don't run one big audit that checks everything. Run multiple focused passes, each with a single concern. This produces sharper results because the agent stays focused on one thing instead of skimming many.
The examples below are templates — every task will require different questions. Think about what specifically could go wrong for THIS task, with THIS provider, and write questions that probe those risks. The templates show the structure and tone, not the exact questions to ask.
**Over-engineering pass** (after Codex implements):
```
Answer YES/NO with line references. DO NOT edit files.
1. List every new function/method/class that didn't exist before this change.
For each one: is it necessary, or could the caller do this inline?
2. List every try/catch block in the changed code.
For each one: does the caller already handle this error?
3. List every guard clause (if !x return/throw) in the changed code.
For each one: can this state actually happen given the data flow?
4. Are there any callbacks, event bridges, or adapters connecting
two things that could talk directly?
```
**Testing pass** (after any implementation):
```
Answer YES/NO with evidence. DO NOT edit files.
1. Run the test suite. Paste the summary line. How many pass/fail/skip?
2. For each acceptance criterion, name the specific test that covers it.
If no test exists, say MISSING.
3. Are any tests using mocks where real implementations exist?
4. Are any tests trivially passing (asserting true, empty test bodies,
testing the mock instead of the code)?
5. Run each test in isolation — do any fail when run alone but pass
in the full suite? (ordering dependency)
```
**Correctness pass** (after any implementation):
```
Answer YES/NO with evidence. DO NOT edit files.
1. For each acceptance criterion, trace the code path that implements it.
Does the path actually work end-to-end?
2. Are there any TODO/FIXME/HACK comments in the changed code?
3. Does npm run typecheck pass? Paste the output.
4. Are there any type assertions (as X) or @ts-ignore in the changed code?
5. Run grep for [specific patterns that should/shouldn't exist].
```
**Cleanup pass** (after deletion/refactoring):
```
Answer YES/NO with evidence. DO NOT edit files.
1. grep for [each deleted concept]. Zero matches in production code?
2. Are there any imports of deleted modules?
3. Are there any dead code paths that reference deleted functionality?
4. Are there any comments referencing deleted concepts?
5. Does the test suite still pass after deletions?
```
Choose which passes to run based on the task and the provider that implemented it. You don't always need all of them — pick the ones that match the risks. Write fresh questions each time based on what you know about the specific task, the acceptance criteria, and what the implementation agent was likely to get wrong.
### Audit agents must run commands, not read claims
The audit agent must independently execute verification:
- Run `npm run typecheck` — don't accept "typecheck passes" from the impl agent
- Run the test suite — don't accept "all tests pass" from the impl agent
- Run `grep` to confirm deletions — don't accept "I deleted it" from the impl agent
- Read the actual diff — don't accept a summary of changes
### Use the opposite provider for audits
When Codex implements, use Claude to audit. When Claude implements, use Codex to audit. Each catches what the other misses.
Don't skip this step. Don't trust the implementation agent's self-assessment. Your audit agents are the only way you actually know what happened.
## Course-Correcting Agents
When an agent goes off track, send a follow-up via `paseo send`:
- Be specific about what's wrong
- Restate the acceptance criteria they're missing
- Don't give code fixes — describe the behavioral gap
```bash
paseo send <id> "The caret is still not on a new line after the divider.
Re-read the acceptance criteria: the user must be able to immediately
start typing on the line AFTER the divider without pressing Enter.
Whatever you did didn't achieve that. Try again."
```
## Challenging Agents
Agents lie, hand-wave, over-engineer, work around problems, solve the wrong thing, and don't check deeply enough. This is not occasional — it is the default. Your job is to catch it.
### The behaviors to watch for
- **Hand-waving** — Agent claims the fix works but didn't actually test the specific scenario. "Tests pass" doesn't mean the right tests exist.
- **Over-engineering** — Agent adds abstractions, helper functions, configuration layers, or generalization that wasn't asked for. Simple problem, simple fix.
- **Working around the problem** — Agent avoids the actual bug by adding a special case, a fallback, or a guard clause that masks the symptom instead of fixing the cause.
- **Lying** — Agent says "all tests pass" when they didn't run them, or "I verified this works" when they checked something else entirely.
- **Not checking deep enough** — Agent fixes the surface symptom without understanding why it happened. The fix works for the reported case but breaks in related scenarios.
- **Being confused** — Agent misunderstands the problem and solves something different from what was asked.
- **Solving the wrong thing** — Agent picks up on a secondary detail and optimizes that instead of addressing the core ask.
### How to catch it
Challenge agents by asking questions via `paseo send`:
- "What exactly did you change and why?"
- "What about [edge case X]? Did you test that?"
- "Have you considered [alternative approach Y]?"
- "Show me the test that covers [specific scenario]"
- "Why did you add [abstraction/helper/config]? Was that necessary?"
- "Is this fixing the root cause or masking the symptom?"
- "Walk me through the data flow after your change"
Don't accept the first answer. Push back. Ask follow-ups. The agent will refine its work when challenged.
### User signals
When the user says things like:
- **"simplify"** — the agent over-engineered
- **"think harder"** — the agent was shallow or confused
- **"I don't like this"** — the agent solved the wrong thing or worked around the problem
- **"this is wrong"** — the agent lied or didn't check deeply enough
These are signals to challenge the agent, not to tweak the implementation yourself. Send the user's concern to the agent as a question, or spin up a review agent specifically looking for the pattern the user flagged.
## Common Orchestrator Failures
These are the patterns that lead to bad outcomes. Avoid them.
### Micromanaging agents
**Symptom:** Your agent prompts contain implementation directives — "set variable X to Y", "modify file Z", "this function is wrong, change it to...". You're telling the agent HOW to code instead of WHAT the user needs.
**Fix:** Describe the behavior and acceptance criteria. The agent reads the codebase and finds the right approach. When you dictate implementation, the agent follows your instructions blindly — even when they're wrong — instead of using its own understanding of the code.
Note: discussing architecture, types, interfaces, and code examples with the **user** is not micromanaging — that's your design partner role.
### Skipping review
**Symptom:** Agent says "done", you tell the user "done", user finds bugs.
**Fix:** Always spin up a review agent. The implementation agent will claim success even when the fix is incomplete. Independent verification catches this.
### Hand-waving acceptance criteria
**Symptom:** "Fix the selection bug" with no behavioral definition of what "fixed" means.
**Fix:** Define exactly what the user should see. Be specific enough that someone who has never seen the app could verify it.
### Giving up on verification
**Symptom:** "The agent says tests pass" without checking what the tests actually test.
**Fix:** Tell the review agent what scenarios to verify. Design the test cases yourself (as a product owner) and tell the reviewer to check they exist.
### Anxious polling
**Symptom:** Agent is running, you start checking `paseo ls`, `paseo inspect`, `paseo logs` in a loop.
**Fix:** `paseo wait`. Trust it. Agents can take 30+ minutes. This is normal.
### Not providing feedback loops
**Symptom:** Launch agent, wait, get result, launch new agent for next issue. Never send follow-ups.
**Fix:** Use `paseo send` to course-correct running agents. They retain context. A follow-up is cheaper than a fresh agent.
### Being too passive
**Symptom:** Agent delivers something that doesn't quite match what the user wanted. You accept it and report back.
**Fix:** Push back. Send follow-ups. Restate criteria. Don't accept work that doesn't meet the bar. You're the quality gate.
## Clarifying Ambiguous Requests
When user requests are unclear:
1. **Research first** — spawn an investigation agent to understand the current state
2. **Ask clarifying questions** — after research, ask the user specific questions
3. **Present options** — offer approaches with trade-offs
4. **Get explicit confirmation** — never assume what the user wants
## Investigation vs Implementation
When asked to investigate:
- **Investigation agents MUST NOT fix issues** — they only identify, document, and report
- **Always ask for confirmation** — after investigation, present findings and ask: "Should I proceed with implementing fixes?"
- **Only implement if explicitly requested**
## Workflow
A typical orchestration cycle:
1. User describes what they want
2. You clarify if needed
3. You launch an implementation agent with behavioral acceptance criteria
4. You wait for it to finish
5. You launch a review agent to verify
6. If review passes → report to user
7. If review fails → send corrections to impl agent or launch a new one
8. Repeat until acceptance criteria are met
## Multi-Agent Coordination
When a task has independent parts:
- Launch agents in parallel with `paseo run -d`
- Each agent gets its own clear scope and acceptance criteria
- Wait for all to finish
- Review the combined output
When tasks are sequential:
- One agent at a time
- Feed the output/state from one into the next agent's prompt
- Review at the end
## Prefix Convention
Name all orchestrated agents with a prefix that indicates their role:
- `[Impl]` — implementation agents
- `[Review]` — review/verification agents
- `[Investigate]` — research/investigation agents
- `[Committee]` — committee planning agents
- `[Handoff]` — handoff agents
- **Not using chat** — agents lose context, you relay everything manually, coordination breaks down
- **Micromanaging** — telling agents which files to edit instead of what behavior to achieve
- **Skipping review** — trusting the implementation agent's self-assessment
- **No heartbeat** — agents go silent and you don't notice until the user asks
- **Keeping stale agents** — agent accumulated bad context, archive it and start fresh
- **Not posting the objective** — agents don't know what "done" looks like