ワンクリックで
tremendous-exception-task
Turn a Sentry exception alert into a well-structured Asana task. Use when Alex pastes a Slack link from
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Turn a Sentry exception alert into a well-structured Asana task. Use when Alex pastes a Slack link from
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Write in Alex's work voice and style. Use when drafting content for Notion, Slack, or task trackers (Asana, Linear, etc.): briefs, proposals, tech docs, team communications, task descriptions, and messages.
Generate monthly R&D time allocation for the accounting spreadsheet. Use when asked to 'fill in R&D', 'R&D tracking', 'accounting spreadsheet', or 'time tracking for accounting'.
Record feedback or praise for team members to Google Sheets for perf reviews. Use when the user wants to pin feedback, record praise, note someone's contribution, or save a highlight about a team member.
Generate a monthly engineering report based on Asana tasks and Notion roadmap. Use when asked to generate the a monthly engineering update for the team.
PR review interview workflow. Preps questions into the daily note, provides the opening script, and scores the candidate afterward. Interview content (rubric, questions, answer key) lives in the team Notion doc; this skill fetches it and applies Alex's formats. During scoring it also pulls the Granola transcript of the call into the daily note. Use when the user says "pr review interview", "score PR review", "pr review scorecard", "score the interview", "interview prep", or shares a candidate's PR review link from a pr-review-interview repo. Also triggers for "grade the review", "how did they do on the PR review", "interview questions", or "pr review notion link".
Write structured interview notes from raw bullet-point observations. Use when the user says "write interview notes", "write up the interview", "format my interview notes", or shares raw bullet-point notes from a candidate interview. Covers coding interviews, system design, PR review discussions, and any interview format.
| name | tremendous-exception-task |
| description | Turn a Sentry exception alert into a well-structured Asana task. Use when Alex pastes a Slack link from |
| argument-hint | [slack-permalink-or-sentry-url] |
Alex monitors #bot-exceptions-backend (Slack channel C0906JG9N1G), where a
Sentry bot posts backend exception alerts. When one is worth tracking, he
investigates and files an Asana task in Team Catalog. This skill automates
that: ingest the alert, investigate, write the task, create it.
One of these (the user usually pastes a single link):
#bot-exceptions-backend — the richest
input. The parent message is the Sentry bot alert (contains the Sentry issue
link, error class, culprit); replies often contain human triage ("probably
not actionable?", "should we swallow it?", a cc to someone). Read the whole
thread — the discussion shapes the task's framing and priority.If you get a Slack link, extract the Sentry URL from the thread. If you only get a Sentry link, proceed without Slack context.
Read every link before writing anything. The links are the primary data, not background confirmation.
Slack thread (if given a Slack link):
~/.private-prompts/bin/slack-readonly-cli message "<slack-permalink>"
This returns the single message. To get the full thread, use the parent
thread_ts it reports with the channel id:
~/.private-prompts/bin/slack-readonly-cli message "C0906JG9N1G:<thread_ts>"
The parent message's blocks contain the Sentry issue link (look for
tremendous-y0.sentry.io/issues/<id>), the error class, and the culprit
(e.g. Sidekiq/ExecutePayoutWorker). Capture human replies — they tell you
whether this is noise to swallow, a real bug, or already understood.
Sentry issue:
~/.claude/skills/tool-sentry/sentry-readonly-cli "<sentry-issue-url>"
This prints the error, the in-app stacktrace (your code first), event/user
counts, first/last seen, tags (queue, transaction, release,
retry_count), and breadcrumbs (the HTTP call / SQL that preceded the crash).
Note the event count and time window — "4 events, all within 2 seconds,
stopped" is a transient blip; "94 events since December, still growing" is a
regression. This distinction drives priority.
The Sentry stacktrace names in-app frames with file:line. Read them to find the
root cause, following the team's "claims are coordinates" rule — verify what the
code actually does rather than trusting the error message. For vendor errors,
the relevant client is usually under lib/catalog_vendors/<vendor>/client.rb
and the calling service under app/services/<vendor>/. Confirm:
POST /payments).raise_on_error,
the error class raised, and how ErrorHandlingService / the worker treats it).Keep the investigation proportional to the task. A transient blip needs a sentence of root cause; a systematic bug warrants tracing the retry flow.
Map the exception to the Vendor custom field when it is vendor-specific. Infer the vendor from, in order of reliability:
lib/catalog_vendors/<vendor>/... → that vendor.queue tag (e.g. rate_limited_hyperwallet_high).Match the name (case-insensitive) to the Vendor option GID in reference.md. If the exception is not tied to a vendor (a generic app error), leave Vendor unset.
Use judgment grounded in the Sentry signal and the Slack discussion. Defaults below match how Alex files a fresh "track this" exception (the two lightweight examples were both Low / Ready for work). Escalate when impact is real.
| Signal | Priority | Status | Notes |
|---|---|---|---|
| Transient blip, self-resolved, low volume | Low | Ready for work | Default. Often just needs error handling / noise suppression. |
| Ongoing regression, growing event count | Medium/High | Ready for work | Real bug. |
| Actively blocking payouts / money movement | High | Ready for work | Trace the full flow; recipients are affected. |
| Thread says "not actionable, should we swallow it?" | Low | Ready for work or Monitoring | Frame the task as: silence the noise or add handling. |
| Cause unclear, needs a human call | Low/Medium | Requires discussion |
Set Tag (multi-select) when an obvious one fits — bug, observability
(noise/alerting), incident-remediation, bug prevention, vendors. Leave it
unset rather than forcing a poor fit; the lightweight examples had no tag.
Leave Eng estimate unset unless the scope is genuinely obvious.
GIDs for every field and option are in reference.md.
Follow the team's write-task skill conventions (the /write-task skill is the
source of truth for prose style — short vs full template, tl;dr rules, Asana
HTML formatting). Key points for this skill:
Exception: <concise description> for a tracking ping (e.g.
"Exception: Hyperwallet 404 on POST /payments"), or a problem-focused title
for a deeper bug (e.g. "Galileo errors out with non-ASCII email addresses").
Make it scannable in a list of 50+ items.<a> links —
every example task does. Format with html_notes.<b> for section headers (not <h2> — it adds ugly
spacing), real newlines (not <br/>), <code> for identifiers, <ul>/<li>
sparingly. Bold the tl;dr label.Do not paste Sentry screenshots — attaching images needs an upload step; the Sentry link is sufficient.
Create with asana_create_task. Fixed values:
project_id: 1201647585774820 (Team Catalog)section_id: 1206602220889093 (Quick wins) for a lightweight tracking
task; 1202971212086474 (Up next) or 1203904722071016 (Backlog)
for something with more scope. Default to Quick wins for exception pings.assignee: leave unset (these go in unassigned, like the examples) unless
the user says otherwise.html_notes: the body from Step 5.custom_fields: a JSON string mapping field GID → value (option GID for
enums, array for the multi-select Tag). See reference.md for
the exact shape. Always set Vendor (when detected), Priority, and Status.After creating, report the new task's permalink_url back to the user, state
which template you used and why, and summarize the Vendor/Priority/Status you
set so a wrong inference is easy to spot.
Alex's manual flow usually ends by replying in the Slack thread, e.g. "I created
a task to track, but not urgent." Posting to a shared channel is outward-facing,
so do not post automatically — offer it, and only post on explicit
confirmation, using the Slack MCP tool slack_reply_to_thread (per
CLAUDE.local.md, never raw curl). Keep the reply short and link the task.
SENTRY_AUTH_TOKEN per the tool-sentry skill, and continue with whatever
Slack context you have rather than guessing at the stacktrace.752389237742425.