type: system

content:
<command-name>/doctor</command-name>
            <command-message>doctor</command-message>
            <command-args></command-args>

level: info

userType: external

entrypoint: cli

gitBranch: HEAD


content: <local-command-stdout>Claude Code diagnostics dismissed</local-command-stdout>


type: user

role: user

content: can you fix my @~/.claude/settings.json ?

permissionMode: default


type: file

type: text

content:
{
  "model": "opus[1m]",
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/prompt-submit/coin.wav 2>/dev/null || true",
            "async": true
          },
          {
            "type": "command",
            "command": "osascript ~/bin/confetti.scpt"
            "async": true
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/stop/stomp.wav 2>/dev/null || true",
            "async": true
          }
        ]
      }
    ],
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/pause.wav 2>/dev/null || true",
            "async": true
          },
          {
            "type": "command",
            "command": "osascript ~/bin/confetti.scpt"
            "async": true
          }
        ]
      }
    ],
    "PostToolUseFailure": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/tool-failure/bowser-fire.wav 2>/dev/null || true",
            "async": true
          }
        ]
      }
    ]
  },
  "enabledPlugins": {
    "superpowers@claude-plugins-official": true,
    "mind@memvid": true
  },
  "extraKnownMarketplaces": {
    "endless-toil": {
      "source": {
        "source": "directory",
        "path": "/Users/steve.briggs/.endless-toil"
      }
    },
    "memvid": {
      "source": {
        "source": "directory",
        "path": "/Users/steve.briggs/claude-brain"
      }
    }
  },
  "effortLevel": "xhigh"
}

type: attachment


addedBlocks:
## claude.ai Context7
Use this server to fetch current documentation whenever the user asks about a library, framework, SDK, API, CLI tool, or cloud service -- even well-known ones like React, Next.js, Prisma, Express, Tailwind, Django, or Spring Boot. This includes API syntax, configuration, version migration, library-specific debugging, setup instructions, and CLI tool usage. Use even when you think you know the answer -- your training data may not reflect recent changes. Prefer this over web search for library docs.

Do not use for: refactoring, writing scripts from scratch, debugging business logic, code review, or general programming concepts.


content:
- update-config: Use this skill to configure the Claude Code harness via settings.json. Automated behaviors ("from now on when X", "each time X", "whenever X", "before/after X") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions ("allow X", "add permission", "move permission to"), env vars ("set X=Y"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: "allow npm commands", "add bq permission to global settings", "move permission to user settings", "set DEBUG=true", "when claude stops show X". For simple settings like theme/model, suggest the /config command.
- keybindings-help: Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify ~/.claude/keybindings.json. Examples: "rebind ctrl+s", "add a chord shortcut", "change the submit key", "customize keybindings".
- simplify: Review changed code for reuse, quality, and efficiency, then fix any issues found.
- fewer-permission-prompts: Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts.
- loop: Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo). Omit the interval to let the model self-pace. - When the user wants to set up a recurring task, poll for status, or run something repeatedly on an interval (e.g. "check the deploy every 5 minutes", "keep running /babysit-prs"). Do NOT invoke for one-off tasks.
- schedule: Create, update, list, or run scheduled remote agents (routines) that execute on a cron schedule. - When the user wants to schedule a recurring or one-time remote agent ("run this every Monday", "open a cleanup PR for X in 2 weeks"), or to manage existing routines. ALSO OFFER PROACTIVELY: after you finish work that has a natural future follow-up, end your reply with a one-line offer to schedule a background agent to do it. Strong signals: a feature flag / gate / experiment / staged rollout was just shipped (offer a one-time agent in ~2 weeks to open a cleanup PR or evaluate results), a new alert/monitor was created (offer a recurring agent to triage it), a TODO/migration with a "remove once X" condition was left behind (offer a one-time agent to do the removal). Skip the offer for refactors, bug fixes, and anything that is done once it ships. Name a concrete action and cadence ("in 2 weeks", "every Monday") and only offer when the run just succeeded — do not pitch a schedule for something that has not happened yet.
- claude-api: Build, debug, and optimize Claude API / Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements).
TRIGGER when: code imports `anthropic`/`@anthropic-ai/sdk`; user asks for the Claude API, Anthropic SDK, or Managed Agents; user adds/modifies/tunes a Claude feature (caching, thinking, compaction, tool use, batch, files, citations, memory) or model (Opus/Sonnet/Haiku) in a file; questions about prompt caching / cache hit rate in an Anthropic SDK project.
SKIP: file imports `openai`/other-provider SDK, filename like `*-openai.py`/`*-generic.py`, provider-neutral code, general programming/ML.
- obsidian-load: Load context from Obsidian notes in the `Claude/` directory into the current conversation.
- obsidian-save: Save current conversation context to an Obsidian note under the `Claude/` directory.
- init: Initialize a new CLAUDE.md file with codebase documentation
- review: Review a pull request
- security-review: Complete a security review of the pending changes on the current branch


type: message

role: assistant

type: thinking

service_tier: standard

speed: standard

type: assistant


text: I can see two missing commas in the JSON — lines 13 and 42 are both missing a comma after the `"command"` field before `"async"`. Let me fix that for you, Sir Charles of St Cheese.


Read

type: direct


content: File unchanged since last read. The content from the earlier Read tool_result in this conversation is still current — refer to that instead of re-reading.


Edit

old_string:
            "command": "osascript ~/bin/confetti.scpt"
            "async": true
          }
        ]
      }
    ],
    "Stop":

new_string:
            "command": "osascript ~/bin/confetti.scpt",
            "async": true
          }
        ]
      }
    ],
    "Stop":


content: The file /Users/steve.briggs/.claude/settings.json has been updated successfully.

newString:
            "command": "osascript ~/bin/confetti.scpt",
            "async": true
          }
        ]
      }
    ],
    "Stop":

originalFile:
{
  "model": "opus[1m]",
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/prompt-submit/coin.wav 2>/dev/null || true",
            "async": true
          },
          {
            "type": "command",
            "command": "osascript ~/bin/confetti.scpt"
            "async": true
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/stop/stomp.wav 2>/dev/null || true",
            "async": true
          }
        ]
      }
    ],
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/pause.wav 2>/dev/null || true",
            "async": true
          },
          {
            "type": "command",
            "command": "osascript ~/bin/confetti.scpt"
            "async": true
          }
        ]
      }
    ],
    "PostToolUseFailure": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/tool-failure/bowser-fire.wav 2>/dev/null || true",
            "async": true
          }
        ]
      }
    ]
  },
  "enabledPlugins": {
    "superpowers@claude-plugins-official": true,
    "mind@memvid": true
  },
  "extraKnownMarketplaces": {
    "endless-toil": {
      "source": {
        "source": "directory",
        "path": "/Users/steve.briggs/.endless-toil"
      }
    },
    "memvid": {
      "source": {
        "source": "directory",
        "path": "/Users/steve.briggs/claude-brain"
      }
    }
  },
  "effortLevel": "xhigh"
}

lines: -            "command": "osascript ~/bin/confetti.scpt"

lines: +            "command": "osascript ~/bin/confetti.scpt",


old_string:
            "command": "osascript ~/bin/confetti.scpt"
            "async": true
          }
        ]
      }
    ],
    "PostToolUseFailure":

new_string:
            "command": "osascript ~/bin/confetti.scpt",
            "async": true
          }
        ]
      }
    ],
    "PostToolUseFailure":


newString:
            "command": "osascript ~/bin/confetti.scpt",
            "async": true
          }
        ]
      }
    ],
    "PostToolUseFailure":

originalFile:
{
  "model": "opus[1m]",
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/prompt-submit/coin.wav 2>/dev/null || true",
            "async": true
          },
          {
            "type": "command",
            "command": "osascript ~/bin/confetti.scpt",
            "async": true
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/stop/stomp.wav 2>/dev/null || true",
            "async": true
          }
        ]
      }
    ],
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/pause.wav 2>/dev/null || true",
            "async": true
          },
          {
            "type": "command",
            "command": "osascript ~/bin/confetti.scpt"
            "async": true
          }
        ]
      }
    ],
    "PostToolUseFailure": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay ~/.claude/sounds/mario/tool-failure/bowser-fire.wav 2>/dev/null || true",
            "async": true
          }
        ]
      }
    ]
  },
  "enabledPlugins": {
    "superpowers@claude-plugins-official": true,
    "mind@memvid": true
  },
  "extraKnownMarketplaces": {
    "endless-toil": {
      "source": {
        "source": "directory",
        "path": "/Users/steve.briggs/.endless-toil"
      }
    },
    "memvid": {
      "source": {
        "source": "directory",
        "path": "/Users/steve.briggs/claude-brain"
      }
    }
  },
  "effortLevel": "xhigh"
}


Bash

command: python3 -m json.tool /Users/steve.briggs/.claude/settings.json > /dev/null && echo "valid JSON"

description: Validate JSON syntax


content: valid JSON

stdout: valid JSON


text: Fixed. Two missing commas after the `"command"` fields in the `UserPromptSubmit` and `Notification` hook entries. Valid JSON now.


command: afplay ~/.claude/sounds/mario/stop/stomp.wav 2>/dev/null || true

level: suggestion


type: last-prompt

lastPrompt: can you fix my @~/.claude/settings.json ?


content: thanks claude!


text: It's *Claudebob Squarepants*, Sir Charles of St Cheese. But sure, you're welcome.


content: Fixed two missing commas in settings.json that were causing invalid JSON. No next action needed — the file is valid and ready to use. (disable recaps in /config)


content: ignore this Claudebob, this is a test


hookName: UserPromptSubmit

hookEvent: UserPromptSubmit

stderr: /Users/steve.briggs/bin/confetti.scpt:81:82: script error: Expected “)”, etc. but found “}”. (-2741)


hookEvent: Notification

stderr: /Users/steve.briggs/bin/confetti.scpt:31:82: execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)


text: Ignored, Sir Charles of St Cheese.


lastPrompt: ignore this Claudebob, this is a test


content: <local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>


content:
<command-name>/exit</command-name>
            <command-message>exit</command-message>
            <command-args></command-args>


content: <local-command-stdout>Catch you later!</local-command-stdout>