API Designer
Jeffallan/claude-skills
Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.
Bugsink self-hosted error tracking via REST API - teams, projects, issues, events, releases, stacktraces When user mentions Bugsink, self-hosted error tracking, or needs to query Bugsink API for…
$ npx skills add shepherdjerred/monorepo --skill bugsink-helper -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install shepherdjerred/monorepo bugsink-helper --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/shepherdjerred/monorepo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/dotfiles/dot_agents/skills/bugsink-helper .claude/skills/bugsink-helper && 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 "bugsink-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/bugsink-helper into .claude/skills/bugsink-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bugsink-helper", 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/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/bugsink-helperType 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 shepherdjerred/monorepo --skill bugsink-helper -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install shepherdjerred/monorepo bugsink-helper --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/shepherdjerred/monorepo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/dotfiles/dot_agents/skills/bugsink-helper .agents/skills/bugsink-helper && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bugsink-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/bugsink-helper into .agents/skills/bugsink-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bugsink-helper", 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 shepherdjerred/monorepo --skill bugsink-helper -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install shepherdjerred/monorepo bugsink-helper --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/shepherdjerred/monorepo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/dotfiles/dot_agents/skills/bugsink-helper .cursor/skills/bugsink-helper && 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 "bugsink-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/bugsink-helper into .cursor/skills/bugsink-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bugsink-helper", 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/shepherdjerred/monorepo.git --path packages/dotfiles/dot_agents/skills/bugsink-helper--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 shepherdjerred/monorepo --skill bugsink-helper -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install shepherdjerred/monorepo bugsink-helper --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/shepherdjerred/monorepo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/dotfiles/dot_agents/skills/bugsink-helper .gemini/skills/bugsink-helper && 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 "bugsink-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/bugsink-helper into .gemini/skills/bugsink-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bugsink-helper", 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 shepherdjerred/monorepo bugsink-helperInstalls 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 shepherdjerred/monorepo --skill bugsink-helper -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/shepherdjerred/monorepo.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/dotfiles/dot_agents/skills/bugsink-helper .github/skills/bugsink-helper && 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 "bugsink-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/bugsink-helper into .github/skills/bugsink-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bugsink-helper", 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 shepherdjerred/monorepo --skill bugsink-helper -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install shepherdjerred/monorepo bugsink-helper --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/shepherdjerred/monorepo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/dotfiles/dot_agents/skills/bugsink-helper .opencode/skills/bugsink-helper && 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 "bugsink-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/bugsink-helper into .opencode/skills/bugsink-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bugsink-helper", 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.
bugsink-helperBugsink self-hosted error tracking via REST API - teams, projects, issues, events, releases, stacktraces When user mentions Bugsink, self-hosted error tracking, or needs to query Bugsink API for…
Bugsink Helper is an agent skill from shepherdjerred/monorepo. Bugsink self-hosted error tracking via REST API - teams, projects, issues, events, releases, stacktraces When user mentions Bugsink, self-hosted error tracking, or needs to query Bugsink API for issues, events, stacktraces, or releases
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering REST APIs. The repository describes itself as: Monorepo for all of my projects. The licence is GPL-3.0.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit da14ae9. 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.
Shell commands in SKILL.md call:
curljqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
BUGSINK_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Bugsink Helper loads about 4.5k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 765 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 shepherdjerred/monorepo at commit da14ae9, republished under its GPL-3.0 licence (© shepherdjerred). 765 words, ~4,541 tokens.
.claude/skills/bugsink-helper/SKILL.md (or your agent's skills folder).Bugsink is a self-hosted error tracking service compatible with Sentry SDKs.
Use toolkit bugsink for supported reads; the REST API covers additional
operations.
Prefer toolkit bugsink — it resolves BUGSINK_TOKEN itself (env, then
~/.toolkit/config.toml [credentials], then its registered macOS Keychain
entry), so no token handling is needed. There is no automatic 1Password
fallback after Keychain. An explicit config override can select a 1Password
reference; backend setup is documented in packages/toolkit/README.md:
# Verify authentication by listing issues
toolkit bugsink issues --limit 1For endpoints toolkit does not cover yet, fall back to raw curl:
# Set environment variables
export BUGSINK_URL="https://your-bugsink-instance.example.com"
export BUGSINK_TOKEN="your-api-token"
export API="$BUGSINK_URL/api/canonical/0"
# Auth header used in all requests
AUTH="Authorization: Bearer $BUGSINK_TOKEN"
# Verify authentication by listing teams
curl -s -H "$AUTH" "$API/teams/" | jq .| Resource | Method | Path | Required Params |
|---|---|---|---|
| Teams | GET | /api/canonical/0/teams/ | — |
| Teams | POST | /api/canonical/0/teams/ | name (body) |
| Team | GET | /api/canonical/0/teams/{uuid}/ | — |
| Team | PATCH | /api/canonical/0/teams/{uuid}/ | — |
| Projects | GET | /api/canonical/0/projects/ | — (optional ?team=<uuid>) |
| Projects | POST | /api/canonical/0/projects/ | team, name (body) |
| Project | GET | /api/canonical/0/projects/{id}/ | — |
| Project | PATCH | /api/canonical/0/projects/{id}/ | — |
| Issues | GET | /api/canonical/0/issues/ | ?project=<id> |
| Issue | GET | /api/canonical/0/issues/{uuid}/ | — |
| Events | GET | /api/canonical/0/events/ | ?issue=<uuid> |
| Event | GET | /api/canonical/0/events/{uuid}/ | — |
| Stacktrace | GET | /api/canonical/0/events/{uuid}/stacktrace/ | — |
| Releases | GET | /api/canonical/0/releases/ | ?project=<id> |
| Releases | POST | /api/canonical/0/releases/ | project, version (body) |
| Release | GET | /api/canonical/0/releases/{uuid}/ | — |
Notes:
curl -s -H "$AUTH" "$API/teams/" | jq '.results'
# Summary output
curl -s -H "$AUTH" "$API/teams/" | \
jq -r '.results[] | "\(.id)\t\(.name)\t\(.visibility)"'curl -s -X POST -H "$AUTH" -H "Content-Type: application/json" \
"$API/teams/" \
-d '{
"name": "Backend Team",
"visibility": "joinable"
}' | jq .Required fields: name (string, max 255 chars)
Optional fields: visibility (enum: joinable, discoverable, hidden)
curl -s -H "$AUTH" "$API/teams/$TEAM_UUID/" | jq .curl -s -X PATCH -H "$AUTH" -H "Content-Type: application/json" \
"$API/teams/$TEAM_UUID/" \
-d '{
"name": "Renamed Team",
"visibility": "hidden"
}' | jq .curl -s -H "$AUTH" "$API/projects/" | jq '.results'
# Filter by team
curl -s -H "$AUTH" "$API/projects/?team=$TEAM_UUID" | jq '.results'
# Summary output
curl -s -H "$AUTH" "$API/projects/" | \
jq -r '.results[] | "\(.id)\t\(.name)\t\(.slug)\t\(.visibility)"'curl -s -X POST -H "$AUTH" -H "Content-Type: application/json" \
"$API/projects/" \
-d '{
"team": "'$TEAM_UUID'",
"name": "My App",
"visibility": "team_members"
}' | jq .Required fields: team (UUID), name (string, max 255 chars)
Optional fields: visibility (enum: joinable, discoverable, team_members), alert_on_new_issue (bool), alert_on_regression (bool), alert_on_unmute (bool), retention_max_event_count (int, >= 0)
curl -s -H "$AUTH" "$API/projects/$PROJECT_ID/" | jq .
# Get just the DSN
curl -s -H "$AUTH" "$API/projects/$PROJECT_ID/" | jq -r '.dsn'The project detail response includes dsn, slug, digested_event_count, and stored_event_count fields not present in the create/update schema.
curl -s -X PATCH -H "$AUTH" -H "Content-Type: application/json" \
"$API/projects/$PROJECT_ID/" \
-d '{
"name": "Renamed App",
"alert_on_new_issue": true,
"alert_on_regression": true
}' | jq .# List issues for a project (required)
curl -s -H "$AUTH" "$API/issues/?project=$PROJECT_ID" | jq '.results'
# With sort and order
curl -s -H "$AUTH" "$API/issues/?project=$PROJECT_ID&sort=last_seen&order=desc" | jq '.results'
# Summary output
curl -s -H "$AUTH" "$API/issues/?project=$PROJECT_ID" | \
jq -r '.results[:10][] | "\(.id)\t\(.calculated_type): \(.calculated_value)\t\(.digested_event_count) events\t\(.last_seen)"'Required query param: project (integer project ID)
Optional query params:
sort: digest_order (default) or last_seenorder: asc (default) or desccursor: pagination cursorcurl -s -H "$AUTH" "$API/issues/$ISSUE_UUID/" | jq .
# Formatted output
curl -s -H "$AUTH" "$API/issues/$ISSUE_UUID/" | \
jq '{
id,
calculated_type,
calculated_value,
transaction,
digested_event_count,
stored_event_count,
first_seen,
last_seen,
is_resolved,
is_muted
}'The canonical REST API is read-only for issues — PATCH/POST on an issue returns 405 (Allow: GET, HEAD, OPTIONS). To resolve or mute, drive the Django + allauth web-UI bulk-action form:
/accounts/login/ for the csrfmiddlewaretoken + csrftoken cookie, then POST username/password/csrfmiddlewaretoken/next to /accounts/login/ with Origin and Referer headers (Django HTTPS CSRF requires them, else 403 CSRF verification failed). A sessionid cookie means success./issues/<project_id>/ (integer id); scrape its issueForm for a fresh csrfmiddlewaretoken, then POST to /issues/<project_id>/ with csrfmiddlewaretoken, action=resolved_next (or mute / mute_for:... / unmute), and one issue_ids[]=<uuid> per issue (batch allowed). Verify via GET /api/canonical/0/issues/<uuid>/ → is_resolved: true.Resolving does not prevent recurrence — the issue reopens as a regression on the next matching event, so resolve "fixed" issues only after the fix deploys.
# List events for an issue (required)
curl -s -H "$AUTH" "$API/events/?issue=$ISSUE_UUID" | jq '.results'
# Ascending order (oldest first)
curl -s -H "$AUTH" "$API/events/?issue=$ISSUE_UUID&order=asc" | jq '.results'
# Summary output
curl -s -H "$AUTH" "$API/events/?issue=$ISSUE_UUID" | \
jq -r '.results[] | "\(.id)\t\(.event_id)\t\(.timestamp)"'Required query param: issue (UUID)
Optional query params: order (asc or desc, default desc), cursor
Note: The list view omits the data field for performance. Use the detail endpoint for the full event payload.
curl -s -H "$AUTH" "$API/events/$EVENT_UUID/" | jq .
# The detail view includes the full `data` payload and `stacktrace_md`
curl -s -H "$AUTH" "$API/events/$EVENT_UUID/" | jq '.data'# Returns rendered stacktrace as Markdown text (text/markdown content type)
curl -s -H "$AUTH" "$API/events/$EVENT_UUID/stacktrace/"This is the most useful endpoint for debugging. It returns a human-readable markdown rendering of the event's stacktrace including frames, source context, and local variables.
# List releases for a project (required)
curl -s -H "$AUTH" "$API/releases/?project=$PROJECT_ID" | jq '.results'
# Summary output
curl -s -H "$AUTH" "$API/releases/?project=$PROJECT_ID" | \
jq -r '.results[] | "\(.id)\t\(.version)\t\(.date_released)"'Required query param: project (integer project ID)
curl -s -X POST -H "$AUTH" -H "Content-Type: application/json" \
"$API/releases/" \
-d '{
"project": '$PROJECT_ID',
"version": "1.2.3",
"timestamp": "2025-01-15T12:00:00Z"
}' | jq .Required fields: project (integer), version (string)
Optional fields: timestamp (datetime)
curl -s -H "$AUTH" "$API/releases/$RELEASE_UUID/" | jq .
# Detail includes additional fields: semver, is_semver, sort_epoch
curl -s -H "$AUTH" "$API/releases/$RELEASE_UUID/" | \
jq '{id, version, date_released, semver, is_semver, sort_epoch}'All list endpoints use cursor-based pagination. The response shape is:
{
"next": "http://bugsink.example.com/api/canonical/0/issues/?cursor=cD00ODY%3D&project=1",
"previous": null,
"results": [...]
}To paginate through results:
# First page
RESPONSE=$(curl -s -H "$AUTH" "$API/issues/?project=$PROJECT_ID")
echo "$RESPONSE" | jq '.results'
# Get next page URL
NEXT=$(echo "$RESPONSE" | jq -r '.next // empty')
# Fetch next page (if exists)
if [ -n "$NEXT" ]; then
curl -s -H "$AUTH" "$NEXT" | jq '.results'
fiLoop through all pages:
URL="$API/issues/?project=$PROJECT_ID"
while [ -n "$URL" ] && [ "$URL" != "null" ]; do
RESPONSE=$(curl -s -H "$AUTH" "$URL")
echo "$RESPONSE" | jq '.results[]'
URL=$(echo "$RESPONSE" | jq -r '.next // empty')
doneBugsink is compatible with Sentry SDKs. Use the DSN from the project detail endpoint.
import sentry_sdk
sentry_sdk.init(
dsn="http://key@your-bugsink-instance.example.com/1",
send_default_pii=True,
traces_sample_rate=0, # Bugsink does not support tracing
)import * as Sentry from "@sentry/browser";
Sentry.init({
dsn: "http://key@your-bugsink-instance.example.com/1",
sendDefaultPii: true,
tracesSampleRate: 0, // Bugsink does not support tracing
});const Sentry = require("@sentry/node");
Sentry.init({
dsn: "http://key@your-bugsink-instance.example.com/1",
sendDefaultPii: true,
tracesSampleRate: 0, // Bugsink does not support tracing
});Important: Set traces_sample_rate=0 (or tracesSampleRate: 0) because Bugsink does not support performance tracing. Set send_default_pii=True to include user context in error reports.
#!/bin/bash
# Investigate errors in a Bugsink project
# 1. List recent issues sorted by last_seen
echo "=== Recent Issues ==="
curl -s -H "$AUTH" "$API/issues/?project=$PROJECT_ID&sort=last_seen&order=desc" | \
jq -r '.results[:10][] | "\(.id)\t\(.calculated_type): \(.calculated_value)\t\(.digested_event_count) events"'
# 2. Get details for a specific issue
echo -e "\n=== Issue Details ==="
ISSUE_UUID="${1:-}"
if [ -n "$ISSUE_UUID" ]; then
curl -s -H "$AUTH" "$API/issues/$ISSUE_UUID/" | \
jq '{calculated_type, calculated_value, transaction, digested_event_count, first_seen, last_seen, is_resolved}'
# 3. Get the most recent event
echo -e "\n=== Latest Event ==="
EVENT_UUID=$(curl -s -H "$AUTH" "$API/events/?issue=$ISSUE_UUID&order=desc" | jq -r '.results[0].id')
if [ -n "$EVENT_UUID" ] && [ "$EVENT_UUID" != "null" ]; then
# 4. Get the stacktrace
echo -e "\n=== Stacktrace ==="
curl -s -H "$AUTH" "$API/events/$EVENT_UUID/stacktrace/"
fi
fi#!/bin/bash
# Triage unresolved issues by event count
curl -s -H "$AUTH" "$API/issues/?project=$PROJECT_ID&sort=last_seen&order=desc" | \
jq -r '.results[] | select(.is_resolved == false and .is_muted == false) | "\(.digested_event_count)\t\(.calculated_type): \(.calculated_value)\t\(.last_seen)"' | \
sort -t$'\t' -k1 -nr | \
column -t -s$'\t'# Get the DSN for a project to configure Sentry SDKs
curl -s -H "$AUTH" "$API/projects/$PROJECT_ID/" | jq -r '.dsn'ProjectVisibilityEnum: joinable | discoverable | team_members
TeamVisibilityEnum: joinable | discoverable | hidden
{
id: UUID (read-only)
name: string (max 255, required)
visibility: TeamVisibilityEnum (required in detail)
}{
id: UUID (read-only)
name: string (max 255, required)
visibility: TeamVisibilityEnum (optional)
}{
id: integer (read-only)
team: UUID | null
name: string (max 255, required)
slug: string (max 50, pattern: ^[-a-zA-Z0-9_]+$, required)
dsn: string (read-only, required)
digested_event_count: integer (read-only, required)
stored_event_count: integer (read-only, required)
alert_on_new_issue: boolean
alert_on_regression: boolean
alert_on_unmute: boolean
visibility: ProjectVisibilityEnum (required)
retention_max_event_count: integer (>= 0)
}Same fields as ProjectList.
{
id: UUID (read-only, required in response)
team: UUID (required)
name: string (max 255, required)
visibility: ProjectVisibilityEnum (optional)
alert_on_new_issue: boolean (optional)
alert_on_regression: boolean (optional)
alert_on_unmute: boolean (optional)
retention_max_event_count: integer (>= 0, optional)
}Note: The create/update schema uses UUID for id, while ProjectList/Detail uses integer for id. The team field in create/update is UUID (required), while in list/detail it is UUID | null.
{
id: UUID (read-only)
project: integer
digest_order: integer (0..2147483647)
last_seen: datetime
first_seen: datetime
digested_event_count: integer
stored_event_count: integer (read-only)
calculated_type: string (max 128)
calculated_value: string (max 1024)
transaction: string (max 200)
is_resolved: boolean
is_resolved_by_next_release: boolean
is_muted: boolean
}Required: id, project, digest_order, last_seen, first_seen, digested_event_count, stored_event_count
Lightweight list view (excludes the data field):
{
id: UUID (read-only, Bugsink-internal)
ingested_at: datetime
digested_at: datetime
issue: UUID
grouping: integer
event_id: UUID (read-only, as per the sent data)
project: integer
timestamp: datetime
digest_order: integer (0..2147483647)
}All fields are required.
Full detail view (includes data payload):
{
id: UUID (read-only, Bugsink-internal)
ingested_at: datetime
digested_at: datetime
issue: UUID
grouping: integer
event_id: UUID (read-only, as per the sent data)
project: integer
timestamp: datetime
digest_order: integer (0..2147483647)
data: object (read-only, full event payload)
stacktrace_md: string (read-only)
}All fields are required.
{
id: UUID (read-only)
project: integer (required)
version: string (max 250, required)
date_released: datetime
}{
id: UUID (read-only)
project: integer (required)
version: string (max 250, required)
date_released: datetime
semver: string (read-only)
is_semver: boolean (read-only)
sort_epoch: integer (read-only)
}{
project: integer (required)
version: string (required)
timestamp: datetime (optional)
}All list endpoints return:
{
next: string | null (URI, cursor-based)
previous: string | null (URI, cursor-based)
results: array of resource objects
}All endpoints require Bearer token authentication:
Authorization: Bearer <token>Ask the user for clarification when:
© shepherdjerred, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/dotfiles/dot_agents/skills/bugsink-helper of shepherdjerred/monorepo.
Open the folder on GitHubat commit da14ae9
Bugsink Helper 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 |
|---|---|---|---|---|---|---|
| Bugsink Helper this skillshepherdjerred/monorepo | 112 | — | ~4.5k | Automated safety check: Pass | GPL-3.0 | |
| API DesignerJeffallan/claude-skills | 12k | 2 repos | ~2k | Automated safety check: Pass | MIT | |
| Paperclippaperclipai/paperclip | 99k | — | ~9.6k | Automated safety check: Pass | MIT | |
| Nodejs Backend Patternsever-works/ever-works | 158 | 18 repos | ~4k | Automated safety check: Pass | AGPL-3.0 | |
| OpenAPI to MCP Servermcp-use/mcp-use | 11k | — | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| Use Yaakmountain-loop/yaak | 19k | — | ~1.9k | Automated safety check: Pass | MIT |
Jeffallan/claude-skills
Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.
paperclipai/paperclip
Interact with the Paperclip control plane API for task coordination and governance.
ever-works/ever-works
Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices.
mcp-use/mcp-use
Turns an OpenAPI or Swagger spec into an MCP server with the mcp-use TypeScript SDK, mapping each operation to a tool, wiring auth, testing and deploying.
mountain-loop/yaak
A skill your agent uses when the user mentions Yaak, a Yaak workspace, or the yaak command, or asks to call, hit, or smoke test HTTP/REST endpoints, save or organize API requests for reuse or manual…
ruvnet/RuView
Covers the RuView `wifi-densepose` command line binary, its Axum REST API and the WebAssembly builds for browsers and ESP32, for embedding or scripting RuView.
shepherdjerred/monorepo
Bun runtime APIs and current operational patterns for files, processes, modules, networking, databases, tests, and deployment.
shepherdjerred/monorepo
Current Bun test runner guidance for discovery, isolation, parallelism, sharding, changed tests, mocks, timers, snapshots, coverage, DOM Testing Library, and integration teardown.
shepherdjerred/monorepo
Current Bun workspace guidance for isolated and hoisted linkers, catalogs, filters, scripts, dependency classes, lockfiles, lifecycle trust, caches, publishing, TypeScript package exports, and…
shepherdjerred/monorepo
This skill should be used when the user asks to "deep research", "research this topic", "investigate thoroughly", "do a deep dive on", "comprehensive research on", "find everything about", "survey…
shepherdjerred/monorepo
This skill should be used when the user asks to "create a Figma design", "design in Figma", "make a Figma mockup", "create an app icon", "design UI", "render JSX to Figma", "export from Figma"…
shepherdjerred/monorepo
Current Fish shell scripting, functions, abbreviations, completions, variables, events, configuration, plugins, testing, and safety guidance.
Categories
Bugsink self-hosted error tracking via REST API - teams, projects, issues, events, releases, stacktraces When user mentions Bugsink, self-hosted error tracking, or needs to query Bugsink API for…. Bugsink Helper is an agent skill from shepherdjerred/monorepo.
Bugsink Helper fits situations like: mentions Bugsink; self-hosted error tracking; needs to query Bugsink API for issues.
Run `npx skills add shepherdjerred/monorepo --skill bugsink-helper -a claude-code`. Or copy the skill folder (packages/dotfiles/dot_agents/skills/bugsink-helper in shepherdjerred/monorepo) into .claude/skills/bugsink-helper in your project. Claude Code loads it when a task matches its description.
Run `npx skills add shepherdjerred/monorepo --skill bugsink-helper -a codex`. Or copy the skill folder (packages/dotfiles/dot_agents/skills/bugsink-helper in shepherdjerred/monorepo) into .agents/skills/bugsink-helper 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 shepherdjerred/monorepo --skill bugsink-helper -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bugsink-helper, .gemini/skills/bugsink-helper, .github/skills/bugsink-helper and .opencode/skills/bugsink-helper in your project.
Going by SKILL.md and its folder, Bugsink Helper needs the command-line tools its instructions call (curl and jq) and credentials named BUGSINK_TOKEN. Our summary lists: Python 3; Node.js; A credential in BUGSINK_TOKEN.
SKILL.md contains no URLs. Its commands use curl, 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.
Bugsink Helper is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k 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 Bugsink Helper: API Designer (Jeffallan/claude-skills, 12k stars), Paperclip (paperclipai/paperclip, 99k stars), Nodejs Backend Patterns (ever-works/ever-works, 158 stars) and OpenAPI to MCP Server (mcp-use/mcp-use, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
shepherdjerred (a GitHub user) maintains it in shepherdjerred/monorepo, which has 112 GitHub stars. The repository holds 63 skills in this directory. The repository was last updated on October 8, 2026.
Source: shepherdjerred/monorepo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.