Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
openai avatar

Debug

  • 120 installs
  • 26.4k repo stars
  • Updated July 24, 2026
  • openai/symphony

This is a copy of debug by odysseus0 - installs and ranking accrue to the original listing.

Helps with debugging tasks during AI-assisted development.

About

debug is a Claude Code skill for debugging. It helps solo builders move faster with AI-assisted coding.

  • debug
  • Debugging
  • AI-coding skill

Debug by the numbers

  • 120 all-time installs (skills.sh)
  • +5 installs in the week ending Jul 26, 2026 (Skillselion tracking)
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/openai/symphony --skill debug

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs120
repo stars26.4k
Last updatedJuly 24, 2026
Repositoryopenai/symphony

What it does

Helps with debugging tasks during AI-assisted development.

Files

SKILL.mdMarkdownGitHub ↗

Debug

Goals

  • Find why a run is stuck, retrying, or failing.
  • Correlate Linear issue identity to a Codex session quickly.
  • Read the right logs in the right order to isolate root cause.

Log Sources

  • Primary runtime log: log/symphony.log
  • Default comes from SymphonyElixir.LogFile (log/symphony.log).
  • Includes orchestrator, agent runner, and Codex app-server lifecycle logs.
  • Rotated runtime logs: log/symphony.log*
  • Check these when the relevant run is older.

Correlation Keys

  • issue_identifier: human ticket key (example: MT-625)
  • issue_id: Linear UUID (stable internal ID)
  • session_id: Codex thread-turn pair (<thread_id>-<turn_id>)

elixir/docs/logging.md requires these fields for issue/session lifecycle logs. Use them as your join keys during debugging.

Quick Triage (Stuck Run)

1. Confirm scheduler/worker symptoms for the ticket. 2. Find recent lines for the ticket (issue_identifier first). 3. Extract session_id from matching lines. 4. Trace that session_id across start, stream, completion/failure, and stall handling logs. 5. Decide class of failure: timeout/stall, app-server startup failure, turn failure, or orchestrator retry loop.

Commands

# 1) Narrow by ticket key (fastest entry point)
rg -n "issue_identifier=MT-625" log/symphony.log*

# 2) If needed, narrow by Linear UUID
rg -n "issue_id=<linear-uuid>" log/symphony.log*

# 3) Pull session IDs seen for that ticket
rg -o "session_id=[^ ;]+" log/symphony.log* | sort -u

# 4) Trace one session end-to-end
rg -n "session_id=<thread>-<turn>" log/symphony.log*

# 5) Focus on stuck/retry signals
rg -n "Issue stalled|scheduling retry|turn_timeout|turn_failed|Codex session failed|Codex session ended with error" log/symphony.log*

Investigation Flow

1. Locate the ticket slice:

  • Search by issue_identifier=<KEY>.
  • If noise is high, add issue_id=<UUID>.

2. Establish timeline:

  • Identify first Codex session started ... session_id=....
  • Follow with Codex session completed, ended with error, or worker exit

lines. 3. Classify the problem:

  • Stall loop: Issue stalled ... restarting with backoff.
  • App-server startup: Codex session failed ....
  • Turn execution failure: turn_failed, turn_cancelled, turn_timeout, or

ended with error.

  • Worker crash: Agent task exited ... reason=....

4. Validate scope:

  • Check whether failures are isolated to one issue/session or repeating across

multiple tickets. 5. Capture evidence:

  • Save key log lines with timestamps, issue_identifier, issue_id, and

session_id.

  • Record probable root cause and the exact failing stage.

Reading Codex Session Logs

In Symphony, Codex session diagnostics are emitted into log/symphony.log and keyed by session_id. Read them as a lifecycle:

1. Codex session started ... session_id=... 2. Session stream/lifecycle events for the same session_id 3. Terminal event:

  • Codex session completed ..., or
  • Codex session ended with error ..., or
  • Issue stalled ... restarting with backoff

For one specific session investigation, keep the trace narrow:

1. Capture one session_id for the ticket. 2. Build a timestamped slice for only that session:

  • rg -n "session_id=<thread>-<turn>" log/symphony.log*

3. Mark the exact failing stage:

  • Startup failure before stream events (Codex session failed ...).
  • Turn/runtime failure after stream events (turn_* / ended with error).
  • Stall recovery (Issue stalled ... restarting with backoff).

4. Pair findings with issue_identifier and issue_id from nearby lines to confirm you are not mixing concurrent retries.

Always pair session findings with issue_identifier/issue_id to avoid mixing concurrent runs.

Notes

  • Prefer rg over grep for speed on large logs.
  • Check rotated logs (log/symphony.log*) before concluding data is missing.
  • If required context fields are missing in new log statements, align with

elixir/docs/logging.md conventions.

Related skills

Debuggingtesting

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.