toolkit-skill-author
$
npx mdskill add monte-carlo-data/mc-agent-toolkit/toolkit-skill-authorAuthor or extend mc-agent-toolkit skills with governance checks.
- Validates bucket access, naming conflicts, and extension rules.
- Requires Anthropic's skill-creator plugin for operation.
- Consults decision rules and peer skill references.
- Generates registration-ready skill drafts for review.
SKILL.md
.github/skills/toolkit-skill-authorView on GitHub ↗
--- name: toolkit-skill-author description: Authors or extends a skill in mc-agent-toolkit. Gates for forbidden buckets and name collisions, applies CONTRIBUTING's extend-or-split rules, then edits a peer skill or hands off to Anthropic's skill-creator and walks the registration checklist. disable-model-invocation: true when_to_use: | Invoked explicitly as /toolkit-skill-author when a contributor wants to add, extend, or draft a new skill for mc-agent-toolkit. Not auto-routed. Requires Anthropic's skill-creator plugin. --- # toolkit-skill-author ## Pre-load ```bash !test -f CONTRIBUTING.md || (echo "CONTRIBUTING.md missing — run from repo root." && exit 1) ``` **Verify `skill-creator` is callable in this session.** Scan the available-skills list for a skill named `skill-creator` (bare or namespaced, e.g. `skill-creator:skill-creator`). If absent, abort with **exactly this message**: > `skill-creator` plugin is required. Run `/plugin install skill-creator@claude-plugins-official`, enable it, then restart this session and re-run `/toolkit-skill-author`. Do **not** fall back to manually scaffolding SKILL.md — the handoff is core to the workflow. Load authoritative context: ```bash !cat CONTRIBUTING.md !bash .claude/skills/toolkit-skill-author/scripts/find-peers.sh skills ``` - @.claude/skills/toolkit-skill-author/references/decision-rules.md - @.claude/skills/toolkit-skill-author/references/handoff-preamble.md - @.claude/skills/toolkit-skill-author/references/registration-checklist.md ## Phase 0 — Parse intent and apply gates From the contributor's initial prompt, extract (without asking yet): - **`target_name`** — did they name a specific skill (e.g., *"extend `monitoring-advisor`"*, *"create a skill called `foo-bar`"*)? - **`action`** — `extend`, `new`, or `unknown`. - **`bucket`** — did they state a capability bucket? Apply the gates below **before** any survey question. Each gate halts when it fires. ### Gate A — Forbidden bucket If `bucket` is `Agent-routing` (or a synonym like "agent routing", "routing skill"), refuse: > Agent-routing skills are owned by the toolkit core team per `CONTRIBUTING § Capability buckets` — not authored via `/toolkit-skill-author`. Halting. Do not proceed. If `bucket` is unstated, this gate re-applies after Q1. ### Gate B — Name collision (new-skill intent) If `action` is `new` and `target_name` is given, lowercase both `target_name` and each existing skill directory name, then check: - **Exact match** (equal strings): refuse with *"`<target_name>` already exists in `skills/`. Pick a different name, or switch to extend."* Do not proceed. - **Near match.** Split both names on `-` into token lists. Fire if either (a) the two lists share any token, or (b) any token in one list is a substring of any token in the other list. Example: `monitor-advisor` ↔ `monitoring-advisor` fires via (a) shared `advisor` and (b) `monitor` ⊂ `monitoring`. When fired, surface the overlap and ask: *"`<target_name>` overlaps with existing `<existing>`. Did you mean to extend `<existing>`, or proceed with a new name?"* Wait for an answer before continuing. ### Gate C — Fast-path for clear extend If `action` is `extend` and `target_name` names an existing skill: - **Re-check the bucket.** If `target_name` is one of the agent-routing skills (`context-detection`, `incident-response`, `proactive-monitoring`), fire Gate A's refusal — those are owned by the core team and cannot be extended via `/toolkit-skill-author` either. - Otherwise: skip the Phase 1 survey, use the initial prompt as the extension description, and jump directly to **Phase 2a — Extend**. If the prompt is missing fields the handoff preamble needs (purpose, phrasings, output artifact), ask only for those specific fields — do not re-run the full Q1–Q4 survey. Otherwise, continue to Phase 1. **New-skill requests always run the decision tree** — the gate against hidden collisions is the tree itself. ## Phase 1 — Decision survey Ask these four questions **one at a time**, waiting for each answer. 1. **Capability bucket.** Trust / Incident Response / Monitoring / Prevent / Optimize / Setup. Agent-routing is not offered. If the contributor writes in `Agent-routing`, fire Gate A and halt. 2. **Primary MCP surface or data input.** E.g. Monte Carlo GraphQL, BigQuery INFORMATION_SCHEMA, Sentry issues. One or two items. 3. **One-line purpose.** Plain language — no pushy triggers. 4. **2–3 example user prompts.** Quote them literally. ## Decision Apply the 4-step test from `decision-rules.md` against the peers dumped by `find-peers.sh`. The dump shows every skill's name + description + when_to_use; reason directly about which skills could plausibly activate on the Q4 prompts. Filter agent-routing skills out of the candidate set — contributors can't author those, so they can't be extension targets. Current list: `context-detection`, `incident-response`, `proactive-monitoring`. If the toolkit adds new routing skills, update both this list and Gate C's list to match. Present the verdict: - `EXTEND <peer>` or `NEW SKILL`. - The step that decided, and why. - "Proceed with this verdict, or override?" If the user overrides, capture their reason verbatim — it becomes part of the PR description per `CONTRIBUTING`. ## Phase 2a — Extend Invoke `skill-creator` via the `Skill` tool in **improve-existing mode**, passing the handoff preamble from `references/handoff-preamble.md` with `MODE=IMPROVE_EXISTING`, `PEER_NAME=<peer>`, and the survey answers (or the initial prompt for the fast-path case). `skill-creator` runs its full loop; if the contributor wants a lighter-touch edit, they can tell it mid-flow to skip iteration. When `skill-creator` returns: ```bash !rm -rf skills/<peer>/evals/ skills/<peer>-workspace/ !python3 .claude/skills/toolkit-skill-author/scripts/lint-skill.py <peer> ``` Scratch-artifact cleanup removes skill-creator's iteration files (they drove the loop but aren't the repo's eval format). Lint surfaces any frontmatter violations. Walk the **partial** checklist from `references/registration-checklist.md` via TodoWrite: - Signal-definitions update — only if phrasings shifted. - `/mc` catalog update — only if user-facing surface changed. - Eval entry update — only if activation surface expanded. Continue to the shared version-bump step. ## Phase 2b — New skill ### Extended survey (one at a time) 5. **Output artifact** — what the skill produces (file type, diff, notebook, text verdict). 6. **Persona / workflow** — who invokes this and during what task. 7. **Disambiguation** — how it differs from the nearest peer (by bucket), even if no peer forced a split. ### Propose name Suggest 2–3 kebab-case **directory names**. Short is better. Re-run Gate B against each candidate: - Exact match → drop the candidate. - Near match (token-overlap with any existing skill) → drop or explicitly flag. Only present candidates that survive Gate B. Wait for the contributor to pick one. Before handoff, re-verify `skills/<chosen>/` does not exist. **Note the two-level naming:** the directory is `skills/<chosen>/`, but the `name` field inside the generated SKILL.md frontmatter should be `monte-carlo-<chosen>` — the canonical prefixed form. The handoff preamble passes both, and `lint-skill.py` verifies them after scaffold. ### Handoff to `skill-creator` Invoke via the `Skill` tool with the handoff preamble from `references/handoff-preamble.md`, `MODE=NEW_SKILL`, and all survey answers. When `skill-creator` returns: ```bash !rm -rf skills/<name>/evals/ skills/<name>-workspace/ !python3 .claude/skills/toolkit-skill-author/scripts/lint-skill.py <name> ``` If lint prints ERROR lines, surface them and wait for the contributor to fix (manually or via a regenerate pass) before proceeding. ### Full registration checklist Walk the full checklist from `references/registration-checklist.md` via TodoWrite, one item per step: 1. Read the relevant existing file. 2. Draft the addition. 3. Show the diff and confirm. 4. Apply with `Edit`, or create new files with `Write`. If Q1 = Setup, confirm: *"Setup skills are exempt from signal-definitions and `/mc` catalog registration per CONTRIBUTING. Skip those two steps? [Y/n]"* — default Y. ## Shared — version bump Both phases converge here. 1. Propose a level based on what actually changed: - New skill → **minor** per `CONTRIBUTING § Version bumping`. - Extend changed activation surface (phrasings in `description` or `when_to_use`) → **minor**. - Extend did not touch activation surface → **patch**. 2. *"Proceed with this level, or override?"* Valid overrides: `patch`, `minor`, `major`. 3. Run: ```bash !./scripts/bump-version.sh <level> ``` The script opens `$EDITOR` for the changelog, then updates all 5 plugin configs and all 5 `CHANGELOG.md` files. ## Done Tell the contributor: > All changes are staged. Review with `git status` / `git diff --staged`, then commit and run `/ship` to open the PR. Do **not** auto-commit or push.
More from monte-carlo-data/mc-agent-toolkit
- automated-triageTriage Monte Carlo alerts interactively or build an automated workflow. Fetch, score, and troubleshoot alerts using MCP tools now, or design a reusable workflow that runs on a schedule.
- connection-auth-rulesBuild a Connection Auth Rules for a Monte Carlo connection type. Fetches live connector schemas and transform steps from the apollo-agent repo.
- generate-validation-notebookGenerate SQL validation notebooks for dbt changes. Pass a GitHub PR URL or local dbt repo path.
- monte-carlo-analyze-root-cause|
- monte-carlo-asset-healthCheck the health of a data table/asset using Monte Carlo. Activates on "how is table X", "check health of X", "is X healthy", "status of X", "check on X table", or any health/status question about a data asset.
- monte-carlo-context-detectionRoute data-related requests to the right Monte Carlo skill or workflow. USE WHEN alerts, incidents, data broken, stale, coverage gaps, data quality, or any ambiguous data observability request.
- monte-carlo-incident-responseOrchestrate incident response — triage, root cause, remediate, prevent recurrence. USE WHEN active alerts, data broken, stale, pipeline failure, or investigate and fix a data incident.
- monte-carlo-instrument-agentInstrument a new AI agent in a Python codebase for Monte Carlo Agent Observability. Detects AI libraries, installs the Monte Carlo OpenTelemetry SDK, and proposes tracing setup and decorator placements as diffs. Asks before editing any file.
- monte-carlo-manage-macCreate, edit, validate, and import Monitors-as-Code YAML files. CLI-first; falls back to MC MCP tools, then manual validation.
- monte-carlo-monitoring-advisorAnalyze data coverage, create monitors for warehouse tables and AI agents. Covers coverage gaps, use-case analysis, data monitor creation, and agent observability.