Skip to content
Development
Skill

/issue-brief

Explain a GitHub issue, discussion, or feature request in plain language before deciding whether to build it. Covers what the reporter actually wants, a numbered walkthrough of the failure using real hostnames/ports/endpoints, how the code behaves today with file:line anchors,

From plugin
tokentelemetry
3853 skills3 agents

Claude Code

$ npx -y skills add VasiHemanth/tokentelemetry --skill issue-brief --agent claude-code

SKILL.md

issue-brief.SKILL.md
name: issue-brief
description: Explain a GitHub issue, discussion, or feature request in plain language before deciding whether to build it. Covers what the reporter actually wants, a numbered walkthrough of the failure using real hostnames/ports/endpoints, how the code behaves today with file:line anchors, what implementing it would take, and the traps (security regressions, open PRs touching the same files, older issues with the same root cause). Use whenever a github.com issues/ or discussions/ link is pasted, or the user says check / look at / verify / assess / analyse this issue, what does this issue want, is it worth doing, what would it take, or refers to one by number (issue 198, discussion 49). Also handles the follow-ups "what are the cons" and "explain that in simple terms". NOT for pull requests (use /review) and NOT for implementing. An issue-brief ends with the working tree untouched.

issue-brief — explain an issue before building it

The output is an **explanation**, not a design doc and not a diff. Assume the reader has not read the reporter's post and does not have the file layout in their head. Lead with the plain meaning; the architecture comes fourth.

1. Fetch the thing

Issues:

gh issue view <number-or-url> --json number,title,state,author,createdAt,closedAt,labels,body,comments

**Discussions need GraphQL.** There is no `gh discussion` command (verified on gh 2.92), and `gh issue view` will not resolve a discussion number. Use:

gh api graphql -f query='
{ repository(owner:"VasiHemanth", name:"tokentelemetry") {
    discussion(number: NNN) {
      number title url category{name} author{login} createdAt body
      comments(first:20){ nodes { author{login} body } }
    } } }'

Then, before writing anything:

  • **Check it isn't already done.** Grep the codebase for the feature's nouns.

Issue 135 (Pi agent support) was closed and fully shipped; the tell was `PI_SESSIONS_DIR` and `test_pi_scan.py` already sitting on main.

  • **Search for the same root cause elsewhere**, open and closed

(`gh issue list --search`). Issues 198 and 96 were the same two-port problem reported twice, a year apart, by different people.

  • **Check open PRs that touch the files you'd touch** (`gh pr list`). They set

the landing order.

2. Answer in this order

1. **What the reporter actually wants**, in one or two sentences of plain language, jargon stripped. Name them. Link the earlier issue or PR if it's a repeat. 2. **A concrete walkthrough of the problem.** Pick one realistic setup and trace it as numbered steps, with real hostnames, real ports, real endpoints. Never "suppose a user does X". Say what the user *sees* first, then why it happens. 3. **How it works today**, only the part that bears on the issue, with `file.py:line` anchors so the claim can be checked. 4. **What implementing it would take**: the shape of the change and which layer it belongs in, not a full diff. 5. **Traps and interactions.** Security regressions, open PRs on the same files, closed issues with the same root cause, what has to land first. 6. **A verdict and one next step** ("worth accepting, want me to draft the reply comment?").

Steps 3 and 4 collapse to a sentence each when the issue is simple. Steps 1, 2 and 6 are never skipped.

3. Prose rules

  • **Symptom before mechanism.** "It looks broken but nothing crashed, the page

just never got its data," and only then the middleware ordering.

  • **Expand every acronym and product name once**, the first time it appears.

The reporter's Pangolin / SSE / CORS gets one clause of explanation.

  • **Don't paste code blocks.** Quote a few lines at most, or cite `file:line`

and let the reader open it.

  • **No hedging stacks.** One verdict. If it is genuinely balanced, say what

evidence would decide it.

  • **Say what you touched.** State explicitly that the tree is untouched, or

what changed if implementation was requested separately.

4. "What are the cons?"

Answer as **con → mitigation pairs**, grouped by how much they matter, and say plainly which group each falls in:

  • **Blocker.** Must ship in the same PR or the feature is a regression.
  • **Verify before merge.** Fine in principle, needs a number on the bench.
  • **Acceptable.** The ordinary cost of the approach. Name it and move on.

Every con gets a mitigation or it isn't finished. A con with no mitigation is a blocker by definition.

5. Worked example (issue 198, single-port proxy)

> **What they want.** Jiaocz runs TokenTelemetry behind Pangolin, a reverse > proxy that maps a *domain* to *one* port. They want the API reachable > through the web port so one domain is enough. Same root cause as issue 96 > (SSH tunnel with only 3000 forwarded). > > **What breaks.** TokenTelemetry runs two servers: 3000 serves the page, 8000 > serves the data. > 1. You open `tt.mydomain.com`. The dashboard loads, layout fine. > 2. The page fetches `tt.mydomain.com:8000` for sessions. > 3. Nothing is there. The proxy only published 3000. > 4. Empty shell. Blank charts, zero sessions. > > **Today.** `frontend/src/lib/api.ts` builds `API_BASE` from > `window.location.hostname` plus `NEXT_PUBLIC_API_PORT`. Everything funnels > through `apiFetch`, no SSE, no WebSockets, one binary endpoint. > > **The trap.** `RemoteAuthMiddleware` (`backend/main.py:228`) exempts > loopback. Proxy everything through Next and every request arrives from > 127.0.0.1, so the token gate is bypassed for the whole internet and > `/remote-access` (`main.py:5709`) hands the token to any visitor who asks.

Note what the example does. The failure is walked before a single filename appears, and the security trap is stated consequence-first ("bypassed for the whole internet"), not as a description of middleware registration order.

6. Don't

  • Don't open a worktree or edit files. This skill is read-only.
  • Don't comment on the issue, close it, or label it unless asked.
  • Don't use
Read more
@vasihemanth
Ships withtokentelemetry

Local observability for AI coding agents and autonomous agents — Claude Code, Codex, Gemini CLI, Cursor, Copilot, Qwen, OpenCode, Vibe, Antigravity, Grok Build, Cline, SmallCode, Pi, Oh My Pi, Muse Code, Prime Agent, Qoder, ZCode, Kimi Code, and Nous

3853 skills3 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
385
Star history of VasiHemanth/tokentelemetry on GitHub, a chart by star-history.com

Other skills on tokentelemetry.

bug-audit

bug-audit

Weekly multi-agent audit for serious bugs (data integrity, silent caps, staleness, timestamp math, trust boundaries). Fans out…

change-brief

change-brief

Explain a change that already exists — a pull request, a merged commit, a closed issue's fix, or an uncommitted diff — in terms…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about issue-brief.

Which coding agents can use issue-brief?
issue-brief installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.