Dbg
theodo-group/debug-that
Debug applications using the dbg CLI debugger. An agent skill from theodo-group/debug-that.
Drive the VibeSys terminal UI (TUI) headlessly via tmux against real Claude-Code-provider runs, to find and report display bugs, frontend/interaction glitches, backend/protocol problems, and…
$ npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install uw-syfi/vibesys tui-bug-hunt --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/uw-syfi/vibesys.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/tui-bug-hunt .claude/skills/tui-bug-hunt && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "tui-bug-hunt" agent skill from https://github.com/uw-syfi/vibesys/tree/main/.agents/skills/tui-bug-hunt into .claude/skills/tui-bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tui-bug-hunt", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/uw-syfi/vibesys/tree/main/.agents/skills/tui-bug-huntType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install uw-syfi/vibesys tui-bug-hunt --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/vibesys.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/tui-bug-hunt .agents/skills/tui-bug-hunt && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tui-bug-hunt" agent skill from https://github.com/uw-syfi/vibesys/tree/main/.agents/skills/tui-bug-hunt into .agents/skills/tui-bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tui-bug-hunt", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install uw-syfi/vibesys tui-bug-hunt --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/vibesys.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/tui-bug-hunt .cursor/skills/tui-bug-hunt && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "tui-bug-hunt" agent skill from https://github.com/uw-syfi/vibesys/tree/main/.agents/skills/tui-bug-hunt into .cursor/skills/tui-bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tui-bug-hunt", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/uw-syfi/vibesys.git --path .agents/skills/tui-bug-hunt--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install uw-syfi/vibesys tui-bug-hunt --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/vibesys.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/tui-bug-hunt .gemini/skills/tui-bug-hunt && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "tui-bug-hunt" agent skill from https://github.com/uw-syfi/vibesys/tree/main/.agents/skills/tui-bug-hunt into .gemini/skills/tui-bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tui-bug-hunt", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install uw-syfi/vibesys tui-bug-huntInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/uw-syfi/vibesys.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/tui-bug-hunt .github/skills/tui-bug-hunt && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "tui-bug-hunt" agent skill from https://github.com/uw-syfi/vibesys/tree/main/.agents/skills/tui-bug-hunt into .github/skills/tui-bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tui-bug-hunt", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install uw-syfi/vibesys tui-bug-hunt --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/vibesys.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/tui-bug-hunt .opencode/skills/tui-bug-hunt && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "tui-bug-hunt" agent skill from https://github.com/uw-syfi/vibesys/tree/main/.agents/skills/tui-bug-hunt into .opencode/skills/tui-bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tui-bug-hunt", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
tui-bug-huntDrive the VibeSys terminal UI (TUI) headlessly via tmux against real Claude-Code-provider runs, to find and report display bugs, frontend/interaction glitches, backend/protocol problems, and…
Tui Bug Hunt is an agent skill from uw-syfi/vibesys. Drive the VibeSys terminal UI (TUI) headlessly via tmux against real Claude-Code-provider runs, to find and report display bugs, frontend/interaction glitches, backend/protocol problems, and UX/feature gaps, then turn findings into GitHub-issue-ready reports. Use when asked to test, QA, exercise, stress, or "find bugs in" the VibeSys TUI / client / launcher / experiment log / chat / rounds view / agent graph / perf pane / themes, or to produce TUI issue tickets. Covers responsive-layout, keybinding, streaming…
Its SKILL.md is about 6.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `reference.md` and `tuidrv.sh`).
It sits in Frontend & Design, covering Responsive design and Debugging. It works with tmux, GitHub, pnpm and Python. The repository describes itself as: Can AI Agents Build Bespoke Systems? The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9f52142. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Shell), which the agent can run.
Shell commands in SKILL.md call:
pnpmclaudeuvruffFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and uv, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tui Bug Hunt loads about 6.5k tokens when it runs. Until then it costs about 143 tokens; SKILL.md has 3,457 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from uw-syfi/vibesys at commit 9f52142, republished under its MIT licence (© uw-syfi). 3,457 words, ~6,521 tokens.
.claude/skills/tui-bug-hunt/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Goal: exercise the VibeSys TUI end to end, catch all types of frontend and backend bugs (display/layout, interaction/keybinding, streaming, theme/contrast on the frontend; protocol, lifecycle, state, and evaluator/benchmark on the backend), and produce reports that map cleanly onto the repo's issue forms. Enhancements and net-new features are in scope to identify and report: when a surface is missing something it should have, file it as an engineering change (§7). The TUI is a full-screen OpenTUI app, so it is driven through a real PTY provided by tmux; no human at a terminal is needed.
Priority order (do not reorder): (1) find the issue, (2) help the user open a GitHub issue ticket for it, (3) only then, and only with the user's explicit approval, discuss and implement a fix or feature. Never write code / open a PR for a finding before the ticket exists and the user has approved implementation. This skill's job ends at a filed ticket unless the user says to go further. The fixing guidance in §8 applies only once that approval exists.
Always run a real Claude-Code-provider run, and keep it to 1-2 rounds (§2):
short enough to be cheap, long enough to reach a resolved hypothesis and see the
log table, Measured deltas, and /perf update live.
Read reference.md (same folder) for the exhaustive command/keybinding/
breakpoint/error/issue-form tables. This file is the workflow.
node (≥20), bun, pnpm, tmux, and uv; plus go +
cargo when running real rounds on the queue example. claude CLI installed
and authenticated (claude -p "ok" returns ok) for real-provider runs.clients/tui/dist/launcher.js and dist/index.js exist. If not:
pnpm install --frozen-lockfile && pnpm --dir clients/backend-client generate:protocol && pnpm build:clients.<repo>/.venv with vibesys installed (uv sync). Export
VIBESYS_PYTHON=<repo>/.venv/bin/python.queue-rs example
is nested in this repo, so copy it out first, e.g.
/tmp/vibesys-runs/queue-{spsc,mpsc,mpmc}./tmp/vibesys-framework-benchmark-*.json) can block benchmark recording; the
per-uid fix in loop.py resolves it. If /perf is empty, check
backend.log for framework-benchmark FAIL: ... permission denied.Use tuidrv.sh in this folder. It wraps a detached tmux session.
tuidrv.sh start <COLSxROWS> <PROJECT> <TASK> [vibesys args...]
tuidrv.sh cap # rendered frame, plain text (layout/wrapping/alignment)
tuidrv.sh capE # frame WITH ansi escapes (color / theme / contrast checks)
tuidrv.sh keys <k…> # named keys: Enter Escape C-w C-l F4 F2 F3 Up Down Tab BTab '[' ']' PgUp PgDn
tuidrv.sh type <txt> # literal text
tuidrv.sh cmd <txt> # type then Enter (e.g. cmd /help)
tuidrv.sh size <WxH> # resize to test responsive layout
tuidrv.sh log [N] # tail the live backend.log
tuidrv.sh wait [S] # let renders / agent turns settle
tuidrv.sh stopDriving discipline:
start, wait 15-20 (backend readiness up to 30s), then cap.wait 1-2 before cap; agent turns need
longer (wait 10-30) in real mode.cap without stripping trailing spaces (borders live
at the right edge). Judge color/contrast from capE.cap the frame into your notes verbatim as evidence before acting.vsbug); stop when done or before a new
start. Set VS_TUI_SESSION to run several.Always hunt against a real run. Do NOT use --stub-agent for bug hunting:
the stub is a mock and misses real backend/stream/agent behavior, and this
project requires findings to come from reality.
start 200x50 /tmp/vibesys-runs/queue-mpmc mpmc --profiler none --cli-provider claude --max-rounds 2This uses the Claude Code provider and exercises the live event stream, real
agent turns, chat wired to a coding agent, real measured metrics (/perf), and
/pause /steer /resume. It is slower and spends tokens, so default to
--max-rounds 2 (1 is fine for a quick pass, never more than 2 unless the user
asks for a long run), and reuse the one running session for the entire sweep
rather than relaunching. Two rounds is enough to see a hypothesis resolve, the
log table refetch, Measured deltas populate, and /perf plot a second point.
Before each session, clean prior state (stale tmux sessions, leftover
/tmp/vibesys-session-*, and prior run state) and re-stage a pristine project
copy, so a run never fails on a resumed/duplicated hypothesis or a /tmp
collision. The framework benchmark path is now per-uid, so cross-user /tmp
collisions no longer block benchmark recording; if /perf is still empty, check
backend.log for framework-benchmark FAIL.
Freeze for inspection: live updates race your captures. Use /pause (or wait
for a round boundary) before the responsive-size, theme, and keybinding passes,
so a layout change is attributable to your resize/keys and not to new events
landing. /resume to continue.
Work the surfaces in order. At each step: send the keys/command, wait, cap
(and capE when color matters), and check against the intended behavior in
reference.md / the TUI README. Log every deviation as a candidate finding.
▸ on the active
hypothesis, spelled-out Accepted/Rejected (not color-only), rounds ranges,
Measured deltas. Check the footer hint and the Ctrl+W to type here chat
instruction.Up/Down move selection; PgUp/PgDn scroll; Enter
opens the selected hypothesis. Confirm selection survives a table refetch
(it is keyed by hypothesis id).Enter to
open the transcript + rounds strip + agent map. [/] change rounds;
Tab/Shift+Tab change agents; arrows move the transcript cursor; Enter
toggles a tool card; F2/Ctrl+T todos; F3/Ctrl+P latest prompt.
Escape should unwind entry cursor → agent filter → hypothesis./help, /theme, /theme <name>, /perf,
/todos, /prompt, /pause, /resume, /steer x (and empty /steer),
/open-round, /open-round --2. Verify each surface (modal vs pane vs
inline) and the exact error strings for bad input. Confirm /help lists the
right commands and the Planned section.Ctrl+W moves focus to the chat and back (focus border + ▸
move). Ask a question; in stub it returns a fixed string. Test /clear,
/model, and a slash command typed in chat (forwarded). Dock vs modal is
width-driven (see step 8)./perf opens a right pane (≥100 cols) or a modal
(<100). Ctrl+W cycles focus across visible panes; F4 zooms the focused
pane and restores selection/scroll on toggle; Escape on the right pane
closes it.reference.md: size 200x50 (wide), 120x40,
104x40, 100x40, 92x40, 88x40, 72x30, 60x24. Watch: chat docks ≥92
else modal; /perf splits ≥100 else modal; log columns drop Kept(104) →
Claim(90) → Measured(62); agents graph → stacked; footer hint collapses <60.
Resize both directions; a width-only change must still redraw (cached-width
bug risk).dark, light, solarized-dark/light,
catppuccin-mocha/latte, high-contrast-dark/light): /theme <name> then
capE. Check contrast of muted/subtle text and that status meaning does not
depend on color (glyph + word present). Also test --theme flag and
agent.toml [tui].theme precedence, and the picker (/theme, then Up/
Down, Enter, Esc).Escape, Ctrl+PgUp/PgDn scroll) and does not permanently eat 10 rows.
Trigger a backend argparse diagnostic by adding a bogus flag (e.g.
--nope) to start; confirm it surfaces as a banner with stage/exit/hint,
not a crash. Open /help while a banner is up and check for border overlap.Ctrl+C exits (expected). Note
OSC52 selection behavior and the status-line difference when unsupported.tuidrv.sh log for tracebacks,
protocol errors, timeouts, or permission denied. In real mode, let a run
reach a resolved hypothesis and confirm the log table and Measured//perf
update live (table refetches on phase/round completion). Test /pause then
/resume. Kill the backend mid-run (stop) and, on a fresh start --resume, confirm resumed hypotheses are not shown empty.The sweep above walks one config. Most real bugs hide in combinations of state you have to deliberately construct: a specific size crossed with a specific theme, a resumed run, a mid-stream resize, an error banner plus an overlay. Vary one axis at a time from a known-good baseline so a regression is attributable. Cross the high-value axes below; capture the frame at each cell.
reference.md §Responsive, plus the
boundary itself (99 vs 100, 91 vs 92, 103 vs 104, 61 vs 62) and
one column below the smallest (58x20) to see graceful degradation vs
corruption. Also very tall/short (120x12, 120x80) to stress vertical
reservation (banner 10 rows, perf chart 8, overlay 60%). Resize while a turn
is streaming and while a modal/picker is open./theme switch while a modal, the perf pane, and the error banner
are open (style-disposal and preview-vs-applied bugs live here). Precedence:
--theme flag vs agent.toml [tui].theme vs VIBESYS_THEME vs default.--max-rounds 1|2, --profiler none vs a real profiler,
--theme, --resume, a bogus flag (--nope) for the argparse banner, and
--headless/-h/validate (must bypass the TUI, not half-render it).agent.toml config. [tui].theme, model/provider blocks, and any
[tui] keys. Feed an invalid value (bad theme name, unknown key) and
confirm it fails with a named error, not a silent fallback or a crash
(AGENTS.md: reject unknown keys).--cli-provider codex with a gpt-* model exercises a different
turn/stream shape; /model in chat switches harness+model mid-run./pause→resize→/resume; kill backend mid-round
then --resume (resumed hypotheses must not render empty, per #420); let a
hypothesis resolve Accepted, Rejected, and Deferred/unmeasured and check
each renders with a word+glyph, not color alone. Steer mid-run (/steer …)
and confirm the injected guidance appears in the next turn./help, /theme picker, error banner, todo strip, F4 zoom}
open together. Keys must reach the top surface only; nothing should leak to the
view behind a modal/picker (#331), and overlays must not collide (§10 seed).Not every cell is worth a capture on every run. Prioritize boundaries, transitions, and stacked surfaces; those are where the contract is thinnest.
Hunt like an adversary: for each surface ask "what state would make this formatting, keying, caching, or reservation assumption wrong?", then construct it. The richest bugs come from a surface built for the common case meeting an edge you forced (empty, overflow, mutation-in-place, transport loss, a width the author cached).
A finding is any deviation from reference.md / the README, or any of:
‹ n / n › more-indicator;
a column that should have dropped (or shouldn't have) at a given width; empty
region where data is expected.capE): low-contrast muted/subtle text; status conveyed by
color only (no glyph/word); wrong theme after launch or a leak of the previous
theme's colors after a switch.protocol_error, transport
timeout, permission denied, event loop is already running, or a
ValueError/state error that fails the run.skipped while the persisted/projected record says
fail). When two views of one datum diverge, one of them is reading a stale or
mis-owned field; that is a backend/projection bug even though you saw it in the
UI. Note both values and where each is computed.For each, decide bug vs intended: some behaviors are deliberate contracts (e.g. non-slash text in the command box is intentionally not accepted; the chat composer owns questions; the frontend must not optimistically mutate backend-authoritative state). Cite the README/architecture line the behavior matches or violates before filing. When unsure whether the fault is render vs state vs backend, that judgement belongs in reproduction (§6), not in the ticket title.
A finding is only worth filing once you can make it happen on demand and can say which layer owns it. Turn each candidate into a minimal, deterministic, re-runnable repro before writing it up.
start fresh,
and replay the exact tuidrv.sh sequence (size, project/task, flags, keys,
commands) that produced it. If it does not recur, it was a race or leftover
state; keep driving until you either reproduce it deterministically or can
describe the timing that triggers it.--max-rounds,
remove intermediate keys, and find the smallest terminal size and simplest
theme that still shows it. The goal is a numbered list a maintainer can paste./pause at the boundary and check whether
the artifact is present frozen (render/state bug) or only appears while events
land (stream/lifecycle bug).capE and
backend.log together:/pause, no log anomaly → render/UI
state (clients/tui/src/ui/** or session-model/session-controller).src/vibesys/server/**), not rendering.protocol_error / malformed frame in backend.log, or the
event stream and the persisted record disagree → backend-client framing
or Python backend/loop (src/vibesys/loops/**, server/**).
State which one your evidence supports; the ticket's "Affected subsystem" and
the eventual fix both hinge on it.cap/capE frame (trailing spaces
intact) and the relevant backend.log lines. Record the environment the form
asks for: terminal size, theme, commit, OS, provider mode.main and
search open+closed issues and merged PRs before filing (§7).Produce one report per independently closable finding. Use the repo forms (see
reference.md §Reporting) and the repo-local create-issue skill.
01-bug.yml: Observed; Expected (cite intended behavior); numbered
Reproduction (exact tuidrv.sh sequence: size, project/task, keys/commands);
Affected subsystem = CLI and packaging (or Unsure); Environment
(terminal size + theme + commit + OS + provider mode); Impact; Relevant
logs (paste the cap/capE frame and any backend.log lines); Related
issues; checks. Label bug, parent #284.02-engineering-change.yml: Workstream
CLI/DX; Problem; Desired outcome; Acceptance criteria; Verification; Parent
#284. Label enhancement.[Bug]/[Feature] prefix (topic prefix TUI: is
fine). Search open+closed issues first to avoid dupes; the taxonomy list in
reference.md is the known landscape.When, and only when, the user has approved a fix for a filed ticket, implement it
the way the repo expects: small, root-caused, in the owning layer, with a
regression test and the relevant checks green. Read
AGENTS.md, the software-design and testing skills, and
docs/contributing/tui-architecture.md first; the points below are the parts
that bite TUI fixes most.
Fix the cause, not the frame. The reproduction already told you the layer
(§6.4). Trace the wrong value back to where it is produced, not where it is
displayed. A resolution=rejected shown on an active hypothesis is authored in
the loop/projection, not in the row renderer; patching the renderer would hide
one symptom and leave the record corrupt. Confirm the root cause explains every
symptom you observed before changing anything.
Respect the layer boundaries (they are enforced). The TypeScript frontend is
three packages with one legal dependency direction, checked by
pnpm check:ts-architecture:
@vibesys/backend-client <- @vibesys/core-state <- @vibesys/tuiOwnership (put the fix where the state lives, per tui-architecture.md):
| Symptom | Owner | Where |
|---|---|---|
| Protocol types, socket framing, connection lifecycle, requests, event subscription | backend-client | clients/backend-client/** |
| Status, rounds, phases, executions, transcripts, todos, usage, benchmarks, diagnostics (a pure fold over snapshot + ordered events) | core-state | clients/core-state/** |
| Focus, selection, layout, zoom, theme, modals, drafts, query progress; widgets, rendering, key/mouse | tui | clients/tui/src/**, ui/** |
| Event/query payloads, run state, projection into experiments/design/rounds, the optimization loop | Python backend | src/vibesys/server/**, src/vibesys/loops/** |
Rules that follow from this and from AGENTS.md and the software-design skill:
server/**, and do not teach core-state about themes,
layout, or OpenTUI (it has no Node/renderer dependency).core-state fold (keyed by id, clock passed in explicitly), not in a
widget. A misaligned border, wrong breakpoint, or focus-indicator bug belongs
in clients/tui/src/ui/**.Contract changes are authoritative-first. If the fix needs a new or changed
event/query field, edit the one authoritative definition
(src/vibesys/server/protocol.py), then regenerate the TS bindings
(pnpm --dir clients/backend-client generate:protocol) rather than hand-editing
generated files. Keep changes additive/backward-compatible; bump the protocol
version only for an incompatible change. Round-trip a representative payload at
the boundary in a test. The committed-schema drift test must stay green (a
no-wire-change fix regenerates to a zero diff, as PR #495/#497 note).
Keep the change small and idiomatic. Match the surrounding file's naming, comment density, and idiom. Narrow the diff to the requested behavior. Do not opportunistically reformat or rename in the same change. If you discover a real refactor is warranted (duplication across widgets, a missing ownership boundary, a value computed in the wrong layer), do it only when it removes real duplication or clarifies data flow, keep it in a separate commit from the bug fix, and never let it cross a package boundary the architecture check forbids. Prefer extending the canonical module over adding a compatibility shim.
Add a regression test at the layer that owned the bug. core-state fold test
for a projection/selection bug; a *.test.ts render/app/controller test in
clients/tui/src/** for a UI bug; a Python tests/** test for a
backend/loop/projection bug. The test should fail on the unfixed code and pass
after (as issue #503's did). Reuse an existing test that already reaches the
corrupted state and add the missing assertion when one exists.
Run the smallest relevant checks before handing back.
pnpm check:ts-architecture, pnpm check:clients,
pnpm test:clients, pnpm build:clients; if the protocol changed,
regenerate and confirm zero unexpected drift.pytest module(s) plus ruff check and ty check on
the changed files.tuidrv.sh reproduction end to end and confirm the
finding is gone and nothing adjacent regressed.Open the PR with the repo template. Fill Problem, Solution (with an
### Architecture mermaid diagram and an ownership paragraph, matching recent
TUI PRs), and Verification (Correctness properties + Testing). Link the ticket
(Fixes #NNN) and follow .github/pull_request_template.md.
Track what was exercised so gaps are visible. Minimum columns: surface, size,
theme, mode (stub/real), result (ok / finding-id), evidence (frame excerpt or
backend.log line). Report the matrix plus a ranked findings list at the end.
Two candidates surfaced while building this skill; re-verify with the protocol before filing, and use them as worked examples of the format:
--stub-agent on a
pristine queue-spsc fails headless with ValueError: hypothesis ID 'H-01' was already used (the stub reuses H-01). We hunt with the real provider, but
this is a genuine issue worth filing against the stub/loop path.Run failed banner present,
/help opens its modal overlapping the banner's footer row
([× Dismiss] · Esc: dismiss · is overwritten by the Help box border). Likely
a z-order/reserved-rows display bug. Confirm the banner remains dismissable
underneath and whether other overlays (/theme, /perf modal) collide too.© uw-syfi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in .agents/skills/tui-bug-hunt of uw-syfi/vibesys.
Open the folder on GitHubat commit 9f52142
Tui Bug Hunt next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Tui Bug Hunt this skilluw-syfi/vibesys | 105 | — | ~6.5k | Automated safety check: Pass | MIT | |
| Dbgtheodo-group/debug-that | 158 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Ue Live DebuggingJasonMa0012/MooaToon | 750 | — | ~2.9k | Automated safety check: Notes | Custom licence | |
| Eclipse Debuggradusnikov/eclipse-chatgpt-plugin | 172 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Gdbmohitmishra786/low-level-dev-skills | 252 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Update V8 Versionopeninterpreter/openinterpreter | 69k | 2 repos | ~845 | Automated safety check: Pass | Apache-2.0 |
theodo-group/debug-that
Debug applications using the dbg CLI debugger. An agent skill from theodo-group/debug-that.
JasonMa0012/MooaToon
A skill your agent uses when debugging UE C++ crashes, runtime bugs, or unexpected behavior with Rider MCP available.
gradusnikov/eclipse-chatgpt-plugin
Debug Java applications in Eclipse — set breakpoints, launch in debug mode, step through code, inspect stack traces, evaluate expressions, and hot-swap code changes.
mohitmishra786/low-level-dev-skills
GDB debugger skill for C/C++ programs. An agent skill from mohitmishra786/low-level-dev-skills.
openinterpreter/openinterpreter
Bumps the pinned v8 and rusty_v8 versions in Codex, validates the release-candidate path with the v8-canary check, and traces failures to upstream build changes.
ben-manes/caffeine
Audits a module by walking its git history commit by commit, tracking unresolved issues forward, and reporting the ones that survive to HEAD as findings.
uw-syfi/vibesys
This skill guides using the cli to generate NKI kernel profiles (NEFF + NTFF pairs) to analyze performance on Neuron hardware.
uw-syfi/vibesys
This skill guides debugging NKI compilation errors on Neuron hardware.
uw-syfi/vibesys
Research NKI documentation for API lookups, tutorials, error codes, architecture, and optimization guides.
uw-syfi/vibesys
Query and analyze NKI kernel profile data from neuron-explorer parquet files.
uw-syfi/vibesys
Guide for writing and modifying NKI kernels. An agent skill from uw-syfi/vibesys.
uw-syfi/vibesys
Triage the open pull requests of the VibeSys repository. An agent skill from uw-syfi/vibesys.
Categories
Drive the VibeSys terminal UI (TUI) headlessly via tmux against real Claude-Code-provider runs, to find and report display bugs, frontend/interaction glitches, backend/protocol problems, and…. Tui Bug Hunt is an agent skill from uw-syfi/vibesys. Drive the VibeSys terminal UI (TUI) headlessly via tmux against real Claude-Code-provider runs, to find and report display bugs, frontend/interaction glitches, backend/protocol problems, and UX/feature gaps, then turn findings into GitHub-issue-ready reports.
Tui Bug Hunt fits situations like: find bugs in the VibeSys TUI / client / launcher / experiment log / chat / rounds view / agent graph / perf pane / themes; produce TUI issue tickets.
Run `npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a claude-code`. Or copy the skill folder (.agents/skills/tui-bug-hunt in uw-syfi/vibesys) into .claude/skills/tui-bug-hunt in your project. Claude Code loads it when a task matches its description.
Run `npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a codex`. Or copy the skill folder (.agents/skills/tui-bug-hunt in uw-syfi/vibesys) into .agents/skills/tui-bug-hunt in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add uw-syfi/vibesys --skill tui-bug-hunt -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tui-bug-hunt, .gemini/skills/tui-bug-hunt, .github/skills/tui-bug-hunt and .opencode/skills/tui-bug-hunt in your project.
Going by SKILL.md and its folder, Tui Bug Hunt needs a shell for the scripts in its folder and the command-line tools its instructions call (pnpm, claude, uv and ruff). Our summary lists: Python 3; A Bash shell.
SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Tui Bug Hunt is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.5k tokens (SKILL.md is roughly 26k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Tui Bug Hunt: Dbg (theodo-group/debug-that, 158 stars), Ue Live Debugging (JasonMa0012/MooaToon, 750 stars), Eclipse Debug (gradusnikov/eclipse-chatgpt-plugin, 172 stars) and Gdb (mohitmishra786/low-level-dev-skills, 252 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
uw-syfi (a GitHub organization) maintains it in uw-syfi/vibesys, which has 105 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 10, 2026.
Source: uw-syfi/vibesys on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.