Manage your exceptions from the command line or with AI bots. The CLI is a single bash script that requires only curl and jq.

Using Claude Code, Codex, Hermes, OpenClaw, or another AI coding agent? Pair the CLI with our agent skills for one-command triage and fix.

Install

curl -fsSL https://raw.githubusercontent.com/theinventor/Oopsie/main/cli/oopsie -o oopsie
chmod +x oopsie
sudo mv oopsie /usr/local/bin/  # optional: add to PATH

Setup

Add a connection — a server URL plus an API key. Use your User API Key (from the Account page) to reach every project with one key:

oopsie config add prod --server https://your-oopsie-instance.com --key YOUR_USER_API_KEY

Or use a Project Key (from project settings) if you only need one project:

oopsie config add myproject --server https://your-oopsie-instance.com --key YOUR_PROJECT_KEY

With a user key, pin the project you work with most so you don't have to pass --project every time:

oopsie config set-project myapp

Everyday Commands

Command Description
oopsie whoamiShow current connection, auth type, and project access
oopsie projectsList all projects you can access (user key) or the one project (project key)
oopsie projectSummary of the active project (pinned or --project)
oopsie project create "New App" --if-missingCreate a uniquely named project with a user key, or reuse one exact match, and print the project key for client apps
oopsie project update <id> --name "Renamed App"Rename a project with a user key
oopsie project disable <id>Disable new exception ingest while keeping historical errors browsable
oopsie project enable <id>Re-enable exception ingest for a disabled project
oopsie errorsList error groups for the active project
oopsie errors --status resolvedFilter by status (unresolved/resolved/ignored)
oopsie errors --workflow-state blockedFilter by agent workflow state
oopsie show <id>Show error group details and recent occurrences
oopsie state <id> in_progress --note "..."Set workflow state without resolving or ignoring
oopsie note <id> --body "..."Add investigation evidence
oopsie resolve <id>Mark as resolved
oopsie ignore <id>Archive (ignore) an error group
oopsie reopen <id>Reopen a resolved or ignored error group
oopsie webhooksList webhook notification rules (destinations masked)
oopsie webhook setup --input-json -Create or reuse a webhook; secrets on stdin, never printed
oopsie webhook test <id>Send a connectivity probe to a stored webhook

Global Flags

FlagDescription
-p, --project <name>Scope to a specific project for this command (overrides pinned default)
-c, --connection <name>Use a non-default connection
--jsonMachine-readable envelope on webhook setup/test/list and version
oopsie errors --project myapp       # one-off override
oopsie errors -c staging -p myapp   # different server, specific project

Multiple Connections

Add connections for each server/environment. config use picks the default.

oopsie config add prod    --server https://oopsie.example.com         --key USER_KEY
oopsie config add staging --server https://staging.oopsie.example.com --key USER_KEY
oopsie config use prod
oopsie config list

API Reference

The CLI talks to these JSON API endpoints (Bearer token auth):

Method Endpoint Description
GET/api/v1/projectOne project (project key) or all accessible projects (user key)
POST/api/v1/projectsCreate a project with a user key and return its project key
PATCH/api/v1/projects/:idRename a project with a user key
PATCH/api/v1/projects/:id/disableDisable new exception ingest for a project
PATCH/api/v1/projects/:id/enableRe-enable exception ingest for a project
GET/api/v1/error_groupsList error groups (?status=, ?workflow_state=, ?limit=, ?offset=)
GET/api/v1/error_groups/:idError group details + occurrences + activity
PATCH/api/v1/error_groups/:id/workflow_stateSet workflow state with optional note
POST/api/v1/error_groups/:id/notesAdd investigation note
PATCH/api/v1/error_groups/:id/resolveMark resolved
PATCH/api/v1/error_groups/:id/ignoreArchive (ignore)
PATCH/api/v1/error_groups/:id/unresolveReopen
GET/api/v1/notification_rulesList notification rules (destinations masked)
POST/api/v1/notification_rules/setup_webhookIdempotent webhook create
POST/api/v1/notification_rules/:id/testConnectivity probe for a stored webhook
POST/mcpRemote MCP (Bearer API key) for ChatGPT and Grok

All endpoints require Authorization: Bearer YOUR_KEY. Project keys can report exceptions and manage error groups for one project. User keys can list, create, rename, disable, and enable projects. When calling project-scoped endpoints with a User API Key, include project_id as a query param or X-Project-Id as a header.

Remote MCP (ChatGPT, Grok)

Hosted clients cannot spawn oopsie-mcp. Point them at https://your-oopsie-instance.com/mcp with your User API key as a Bearer token. Pass project (name or id) on tool calls unless you authenticate with a project key.

# Grok CLI
grok mcp add --transport http oopsie https://your-oopsie-instance.com/mcp \
  --header "Authorization: Bearer ${OOPSIE_API_KEY}"

# ChatGPT: Settings → Apps → Developer mode → Create
# Connector URL: https://your-oopsie-instance.com/mcp
# Auth: Token, paste your User API key from the Account page

MCP

Pair the CLI with oopsie-mcp so a local agent (Cursor, Claude Code) can set up and test webhooks over stdio. The adapter shells oopsie --json; it never returns destinations or header values.

curl -fsSL https://raw.githubusercontent.com/theinventor/Oopsie/main/cli/oopsie-mcp -o oopsie-mcp
chmod +x oopsie-mcp
sudo mv oopsie-mcp /usr/local/bin/

# Cursor / Claude Desktop mcp.json
{
  "mcpServers": {
    "oopsie": {
      "command": "oopsie-mcp",
      "env": { "OOPSIE_BIN": "/usr/local/bin/oopsie" }
    }
  }
}

Agent Triage Flow

Use workflow state for coordination and lifecycle status for truth. Agents should set looking or in_progress before work, use blocked when external input is needed, add evidence with oopsie note, and resolve or ignore only when the note trail explains why.

oopsie state 42 looking --note "Reading recent occurrences"
oopsie note 42 --body "Reproduced locally with account 123"
oopsie state 42 ready_to_resolve --note "Fix deployed and verified"
oopsie resolve 42 --note "No new occurrences after deploy"