Dogfood
SkillDev toolsDrive the live Acolyte chat TUI through a real multi-turn session to catch behavior and transcript regressions. Use when verifying a change against the running app or reproducing a chat bug.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Dogfood skill
What this skill tells your AI
The instructions your AI receives, as published by cniska/acolyte in .agents/skills/dogfood/SKILL.md and read by ahel’s review.
Launch the chat TUI on current source, drive real multi-turn work through tmux, and watch for regressions the automated suites miss — completion, tool firing, and transcript order across turns. This is the structural half of dogfooding; the qualitative feel (voice, pacing) stays a manual read.
Workflow
- Isolate the run in a dedicated worktree before starting anything. Create a unique branch/worktree (for example,
wt dogfood-<topic>), enter it, and use a matching unique tmux session name. Never dogfood from the primary checkout or reuse another worktree's tmux session. - Allocate a free port and set the dogfood model in the worktree only:
bun run src/cli.ts config set --project port <port>andbun run src/cli.ts config set --project model gpt-5.5. Use fresh temporaryXDG_DATA_HOMEandXDG_STATE_HOMEroots for every command in this run. KeepXDG_CONFIG_HOMEunset so existing provider credentials remain readable. This isolates the daemon PID, logs, sessions, traces, cache, and port without modifying the primary worktree or its daemon. - Confirm the driver:
command -v tmux. The custom renderer needs a real PTY, andsend-keys/capture-panedrive it. Stop and ask the user to install tmux via their platform's package manager if it is missing. - Launch the TUI from the dogfood worktree in tmux, with the isolated roots:
tmux kill-session -t <session> 2>/dev/null; tmux new-session -d -s <session> -x 120 -y 40; tmux send-keys -t <session> "XDG_DATA_HOME=<data-root> XDG_STATE_HOME=<state-root> bun run dogfood" Enter.bun run dogfoodstops only the isolated daemon, then starts current source with debug logging. Cold start takes ~20s; polltmux capture-pane -t <session> -puntil the❯ Ask anything…prompt appears. - Drive turns:
tmux send-keys -t <session> "<prompt>"; tmux send-keys -t <session> Enter, then polltmux capture-pane -t <session> -p -S -80until the turn's• Worked …footer appears. Use real work across several turns, not synthetic warmups. - Read the transcript in the captured pane: each turn is
❯ prompt→ narration → tool rows → answer →• Worked, and every turn sits strictly below the previous one. - Watch the signals: tasks that stop without completing the work; repeated identical tool calls; excessive discovery before the first write; window drops while token budget sits idle; missing or corrupted transcript content; failures that leave no trace.
- On surprise, capture the trace with the same XDG roots:
XDG_DATA_HOME=<data-root> XDG_STATE_HOME=<state-root> bun run src/cli.ts tracefor the latest task, orXDG_DATA_HOME=<data-root> XDG_STATE_HOME=<state-root> bun run src/cli.ts trace task <id>. - Tear down with the same XDG roots:
tmux kill-session -t <session>; XDG_DATA_HOME=<data-root> XDG_STATE_HOME=<state-root> bun run src/cli.ts stop. Remove the temporary roots only after capturing any needed trace. Ifstopreports the daemon is running a turn, a turn outlived the client: let it finish, or pass--forceto abandon it.
Rules
- Record a finding only when it is reproducible or trace-backed; every fix ships a regression test.
- tmux is a driver dependency, not a product one — never add it to the app's install or setup.
- The scope is structural and behavioral, not qualitative — do not conclude an answer "feels right" from a capture.
- Keep the dogfood worktree until its finding is resolved or explicitly discarded; remove it only after teardown.
Red flags
- Concluding a bug is fixed from
acolyte run(single-turn) instead of a real multi-turn TUI session - Reading a capture before the
• Workedfooter lands and calling the turn done - Recording a one-off observation as a finding without a reproduction
- Leaving the tmux session and daemon running after the run
- Starting or stopping a dogfood daemon from the primary checkout
Signals
- GitHub stars
- 25
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
dogfood-cniska- Source
- github.com/cniska/acolyte