$npx -y skills add AgentWrapper/agent-orchestrator --skill bug-triageTriage bugs reported in chat/issues, search for duplicates, file or update GitHub issues with full context, and push fix PRs.
| 1 | # Bug Triage Skill |
| 2 | |
| 3 | Triage bugs into well-structured GitHub issues on the upstream **`AgentWrapper/agent-orchestrator`** repo (issues are enabled there; the `origin` fork is not the issue tracker). |
| 4 | |
| 5 | > **Agent Orchestrator (AO) is Go + Electron.** The backend is a Go daemon |
| 6 | > (`backend/`) exposing a loopback HTTP API on `127.0.0.1:3001`; the frontend is an |
| 7 | > Electron + React supervisor (`frontend/`). There is **no** pm2/tmux-per-session |
| 8 | > Node runtime here: the daemon owns lifecycle and terminals run under the **tmux** |
| 9 | > runtime adapter (ConPTY on Windows). Triage against _this_ Go rewrite, not the old |
| 10 | > TypeScript agent-orchestrator implementation. |
| 11 | |
| 12 | ## ⚠️ Which `ao` are you running? |
| 13 | |
| 14 | **A bare `ao` on your PATH may resolve to a different AO install** (for example an |
| 15 | old npm build at `~/.nvm/.../bin/ao` that talks to port **:3000**). Triaging with |
| 16 | the wrong binary produces bugs that don't exist in this rewrite (and misses ones |
| 17 | that do). |
| 18 | |
| 19 | Before any diagnostics: |
| 20 | |
| 21 | ```bash |
| 22 | which -a ao # see every ao on PATH; expect surprises |
| 23 | ao status 2>/dev/null # if this shows port 3000, it is NOT this rewrite |
| 24 | ``` |
| 25 | |
| 26 | Use a rewrite binary explicitly: |
| 27 | |
| 28 | ```bash |
| 29 | # Option A: build from this repo (preferred during triage) |
| 30 | cd backend && go build -o /tmp/ao ./cmd/ao |
| 31 | /tmp/ao status # must report port: 3001 |
| 32 | |
| 33 | # Option B: the packaged app's bundled daemon |
| 34 | "/Applications/Agent Orchestrator.app/Contents/Resources/daemon/ao" status |
| 35 | ``` |
| 36 | |
| 37 | **Confirm `ao status` reports `port: 3001` before trusting any output.** Throughout |
| 38 | this skill, `ao` means _your verified rewrite binary_ (`/tmp/ao` or the bundled |
| 39 | one), never a bare PATH lookup. |
| 40 | |
| 41 | > Note: spawned sessions get a PATH pin so the _session's_ `ao` resolves to the |
| 42 | > daemon's own executable (see `hookPATH` in |
| 43 | > `backend/internal/session_manager/manager.go`). That pin only applies inside |
| 44 | > sessions; your interactive shell is still on its own PATH, so pin it yourself. |
| 45 | |
| 46 | ## 1. Pre-flight |
| 47 | |
| 48 | - **Pull latest code:** `git fetch upstream && git log --oneline upstream/main -5`. |
| 49 | Stale code means bad triage. (`upstream` = `AgentWrapper/agent-orchestrator`.) |
| 50 | - **Target repo:** Always file on **`AgentWrapper/agent-orchestrator`** (the upstream |
| 51 | product repo, where issues live). Never file on the `origin` fork or on |
| 52 | `aoagents/*`. |
| 53 | - **Verify your binary:** confirm `ao status` shows port **3001** (see warning above). |
| 54 | - **Record source:** chat URL, reporter name, attachments. |
| 55 | |
| 56 | ## 2. Gather Context |
| 57 | |
| 58 | ### 2a. Extract the report |
| 59 | |
| 60 | | Source | How to gather | |
| 61 | | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | |
| 62 | | **Discord/Slack thread** | Read full thread. Extract: reporter name, original description (the thread starter, not whoever tagged you), screenshots, follow-ups | |
| 63 | | **GitHub issue** | `gh issue view <number> --repo AgentWrapper/agent-orchestrator --json body,comments` | |
| 64 | | **Live observation** | Pull live state via the daemon: `ao status`, `ao session ls`, `ao session get <id>` | |
| 65 | |
| 66 | ### 2b. Minimum viable report gate |
| 67 | |
| 68 | Before tracing code, verify the report has enough substance: |
| 69 | |
| 70 | **Required (ALL):** what happened, where (page/command/feature), when (after upgrade? first time?) |
| 71 | |
| 72 | **Required (2 of 4):** OS/shell, AO version (`ao version`), reproducibility (consistent vs intermittent), reproduction steps |
| 73 | |
| 74 | If insufficient, ask: |
| 75 | |
| 76 | > "I'd like to triage this but need more info: (1) **What happened?** (error/behavior), (2) **Where?** (page/command), (3) **When did it start?**, (4) **How to reproduce?**" |
| 77 | |
| 78 | ### 2c. Local diagnostics (if bug is on same machine) |
| 79 | |
| 80 | Gather everything yourself before asking the reporter. Use your **verified** |
| 81 | rewrite binary (`/tmp/ao` here) for every `ao` call: |
| 82 | |
| 83 | ```bash |
| 84 | # Environment |
| 85 | /tmp/ao version && go version && echo $SHELL && uname -a |
| 86 | which -a ao # confirm no rogue ao shadows the build |
| 87 | cat ~/.ao/running.json # PID + port handshake (expect port 3001) |
| 88 | |
| 89 | # Daemon health |
| 90 | /tmp/ao status # daemon up? port? health/ready probes |
| 91 | /tmp/ao doctor # local health checks |
| 92 | lsof -i :3001 # who's bound to the daemon port |
| 93 | tail -n 100 ~/.ao/daemon.log # daemon log |
| 94 | |
| 95 | # Sessions & runtime |
| 96 | /tmp/ao session ls # all sessions and their state |
| 97 | /tmp/a |