Skip to content
cccskills
FreePublished on GitHub

hunt-a-prod-error

Investigate opaque errors in shipped OpenWork builds using local logs and Sentry exception reports. Identify the change that caused the failure, reproduce it on the affected runtime, file a Linear issue, and reply to the original report.

OriginalShow the original description

A user saw internal_error, "Unexpected server error", a 500, or an opaque failure in a shipped OpenWork build. Find the cause from local logs and Sentry, name the regressing PR, file the issue, and reply where it was reported.

Works withSentry
See how to install

Good for

  • Investigating unexplained errors in shipped OpenWork builds
  • Identifying the PR that introduced a failure
  • Reproducing errors on the affected runtime
  • Filing findings and replying to the original report

Files included (1)

  • SKILL.md3.1 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Skill: Hunt a Prod Error

An opaque error has two halves. Local logs say where (route, status, timing, burst shape). Sentry says what (the exception and stack). You need both before naming a cause; either alone produces a guess.

1. Local logs: where and how often

Desktop server log (OTLP JSON, one record per request):

~/Library/Application Support/com.differentai.openwork/logs/openwork-server.log{,.1}

Engine log: ~/.local/share/opencode/log/opencode.log.

Tally 5xx by route, then compare against the same route family that did not fail. A failure rate on one route and zero on its siblings isolates the code path; a burst of failures in the same millisecond points at a shared event (GC, rollover, socket), not per-request data.

rg '"status":5' ~/Library/Application\ Support/com.differentai.openwork/logs/openwork-server.log* \
  | python3 -c 'import sys,json,re,collections; c=collections.Counter()
for l in sys.stdin:
  a=json.loads(l)["attributes"]; c[(a["method"], re.sub(r"(ses|ws|msg)_[A-Za-z0-9]+", r"\1_*", a["path"]), a.get("error.code"))]+=1
[print(v,k) for k,v in c.most_common()]'

Know the blind spot: the OpenCode proxy catch blocks in apps/server/src/server.ts forward the real exception to Sentry only; the local record carries the synthetic Unexpected server error and no cause.

2. Sentry: what threw

Sentry is connected through OpenWork Connect (search_capabilities → search_issues, get_sentry_resource). Org different-ai-inc, project desktop-app, region https://us.sentry.io.

Filter by the tags the server sets: surface:server and the templated route (for example route:"/workspace/:id/opencode/*"), plus release. Read the top issue's stack, firstSeen, users, and event count. The exact exception message is the string a regression spec must reproduce.

3. Name the regression

Correlate Sentry firstSeen with git log --since=<firstSeen - 2d> on the files in the stack. Confirm the shipped code matches source before reasoning about it:

npx --yes @electron/asar extract-file /Applications/OpenWork.app/Contents/Resources/app.asar server/dist/server.js

4. Reproduce on the shipping runtime

Reduce the mechanism to a script and run it on the runtime the error occurred in (run-tests → Match the runtime). A repro that passes on Bun for a Node/undici bug has proven nothing.

5. File and reply

  • Linear (team Engineering): symptom with the exact user-facing string, route tally, Sentry issue ids with users and counts, mechanism, repro, regressing PR, proposed fix. Link the Sentry issues as attachments.
  • Reply in the thread where the error was reported with the issue link and a five-line summary: what fails, how often, who is affected, why, what fixes it.
  • The fix PR carries a spec that reproduces the exact string on dev and passes on the head (write-a-spec). CI publishes the evidence.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

add-a-feature

FreeSummary

Manage OpenWork feature releases with feature flags, switches that control access to new behavior. Register features before coding, release them by organization and deployment, prepare a global shutdown option, and remove temporary flags after rollout.

  • Registering a feature before implementation
  • Releasing a feature to selected organizations
  • Separating cloud and self-hosted availability
different-ai/openwork24.2KUpdated Oct 18, 2026

Connect OpenCode browser tools to a locally running OpenWork Electron app to inspect its UI, enter a task, and check the response. This skill supports exploration and debugging through CDP, Chrome's remote control protocol.

  • Connecting browser tools to a local Electron development app
  • Inspecting screen state during debugging
  • Entering a task in the composer and running it
different-ai/openwork24.2KUpdated Oct 18, 2026

Check added lines in a change for information identifying customers, prospects, partners, or outside individuals. Report locations and generic remediation without reproducing identities, and escalate cases where the information is already public.

  • Checking changes for customer and partner identities
  • Reviewing documents and test data for identifying details
  • Reporting disclosure locations without repeating identities
different-ai/openwork24.2KUpdated Oct 18, 2026

Connects supported AI clients, including Claude Code and Codex, to OpenWork through MCP, a protocol for accessing external tools. It guides account sign-in and verifies that tools for finding and running organization capabilities are available.

  • Connecting an AI client to OpenWork organization resources
  • Signing in and verifying available MCP tools
  • Switching organizations or troubleshooting authentication
different-ai/openwork24.2KUpdated Oct 18, 2026

Review an outside contributor’s pull request before running its code. Identify concealed behavior, obfuscated code, risky dependencies, and build hooks, with file locations and specific checks for maintainers to follow up.

  • Screening an outside contributor’s pull request before execution
  • Checking encoded code and unexplained network calls
  • Reviewing dependency changes and installation scripts
different-ai/openwork24.2KUpdated Oct 18, 2026

create-plugin

FreeSummary

Create an OpenCode plugin for OpenWork with custom tools and hooks, which run code at specific events. The skill builds the plugin file and adds its entry to the project configuration.

  • Adding custom tools to OpenWork
  • Creating a plugin to save and list notes
  • Running custom code before or after tool execution
different-ai/openwork24.2KUpdated Oct 18, 2026

See all skills by different-ai

Report a problem with this skill