Crap Analyzer
swingerman/engineer
A skill your agent uses to produce a risk-based refactor + test plan for recently-changed code on a diff/branch/PR by computing CRAP (complexity × untested) on changed methods.
Build, test, and verify a sandbox change across Go, JS, and Python.
$ npx skills add michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install michelangelo-ai/michelangelo ma-sandbox-test-plan --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/michelangelo-ai/michelangelo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ma-sandbox-test-plan .claude/skills/ma-sandbox-test-plan && 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 "ma-sandbox-test-plan" agent skill from https://github.com/michelangelo-ai/michelangelo/tree/main/.claude/skills/ma-sandbox-test-plan into .claude/skills/ma-sandbox-test-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ma-sandbox-test-plan", 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/michelangelo-ai/michelangelo/tree/main/.claude/skills/ma-sandbox-test-planType 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 michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install michelangelo-ai/michelangelo ma-sandbox-test-plan --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/michelangelo-ai/michelangelo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/ma-sandbox-test-plan .agents/skills/ma-sandbox-test-plan && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ma-sandbox-test-plan" agent skill from https://github.com/michelangelo-ai/michelangelo/tree/main/.claude/skills/ma-sandbox-test-plan into .agents/skills/ma-sandbox-test-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ma-sandbox-test-plan", 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 michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install michelangelo-ai/michelangelo ma-sandbox-test-plan --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/michelangelo-ai/michelangelo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/ma-sandbox-test-plan .cursor/skills/ma-sandbox-test-plan && 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 "ma-sandbox-test-plan" agent skill from https://github.com/michelangelo-ai/michelangelo/tree/main/.claude/skills/ma-sandbox-test-plan into .cursor/skills/ma-sandbox-test-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ma-sandbox-test-plan", 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/michelangelo-ai/michelangelo.git --path .claude/skills/ma-sandbox-test-plan--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 michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install michelangelo-ai/michelangelo ma-sandbox-test-plan --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/michelangelo-ai/michelangelo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/ma-sandbox-test-plan .gemini/skills/ma-sandbox-test-plan && 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 "ma-sandbox-test-plan" agent skill from https://github.com/michelangelo-ai/michelangelo/tree/main/.claude/skills/ma-sandbox-test-plan into .gemini/skills/ma-sandbox-test-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ma-sandbox-test-plan", 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 michelangelo-ai/michelangelo ma-sandbox-test-planInstalls 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 michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/michelangelo-ai/michelangelo.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/ma-sandbox-test-plan .github/skills/ma-sandbox-test-plan && 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 "ma-sandbox-test-plan" agent skill from https://github.com/michelangelo-ai/michelangelo/tree/main/.claude/skills/ma-sandbox-test-plan into .github/skills/ma-sandbox-test-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ma-sandbox-test-plan", 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 michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install michelangelo-ai/michelangelo ma-sandbox-test-plan --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/michelangelo-ai/michelangelo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/ma-sandbox-test-plan .opencode/skills/ma-sandbox-test-plan && 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 "ma-sandbox-test-plan" agent skill from https://github.com/michelangelo-ai/michelangelo/tree/main/.claude/skills/ma-sandbox-test-plan into .opencode/skills/ma-sandbox-test-plan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ma-sandbox-test-plan", 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.
ma-sandbox-test-planBuild, test, and verify a sandbox change across Go, JS, and Python.
Ma Sandbox Test Plan is an agent skill from michelangelo-ai/michelangelo. Build, test, and verify a sandbox change across Go, JS, and Python. Use when the user asks to verify a change or generate evidence that a feature works.
Its SKILL.md is about 2k 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 Testing & QA, covering Test generation. It works with Python, JavaScript and Model Context Protocol. The repository describes itself as: Michelangelo AI: Uber's end-to-end machine learning platform. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 491a9b2. 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:
gitbashkubectlgoyarnpoetryclaudevitestpytestFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, kubectl and yarn, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ma Sandbox Test Plan loads about 2k tokens when it runs. Until then it costs about 43 tokens; SKILL.md has 933 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 michelangelo-ai/michelangelo at commit 491a9b2, republished under its Apache-2.0 licence (© michelangelo-ai). 933 words, ~2,046 tokens.
.claude/skills/ma-sandbox-test-plan/SKILL.md (or your agent's skills folder).A pipeline that gates on failure at every stage. The output of each stage IS the evidence —
don't summarize it away. See .claude/skills/ma-sandbox-references/evidence-quality.md for what makes evidence good vs. hollow.
Stage 4's JavaScript scenarios need a Playwright MCP server connected in this session. This repo
doesn't ship one in .mcp.json — it's a per-user setup, not shared repo infra. If you don't have one
connected yet, add it once with:
claude mcp add playwright -- npx -y @playwright/mcp@latestMCP servers only load at session startup, so this doesn't take effect in the session that's currently
running the skill — end this session and start a new one, then re-invoke /ma-sandbox-test-plan. Check
/mcp to confirm the connection before running this skill.
CHANGED_FILES=$(git diff --name-only origin/main...HEAD)Categorize by path prefix: go/ → Go, javascript/ → JS, python/ → Python. Mixed changes run every
applicable stage below, once per stack, each gated independently — a Go build failure doesn't block
the JS pipeline from also reporting its own result.
| Stack | Commands |
|---|---|
| Go | go build ./cmd/<service>/... for each changed go/cmd/<service>/; go vet ./go/components/... |
| JS | yarn typecheck, yarn lint |
| Python | poetry check |
On any failure: stop that stack's pipeline, report the command and full error output, and do not proceed to Stage 2 for that stack. Other stacks (in a mixed change) still run independently.
Scope to the packages/dirs actually touched — derive this from Stage 0's $CHANGED_FILES directly,
there's no fixed mapping table to maintain:
| Stack | Command |
|---|---|
| Go | go test ./<dir>/... for each unique directory containing a changed .go file under go/components/ or go/cmd/ |
| JS | yarn test <changed-dir-glob> (this repo runs vitest --run, which accepts path filters) |
| Python | pytest <changed-dir> |
On failure: stop, report the failing test output, do not proceed to Stage 3 for that stack.
Only reached for stacks whose Stage 1–2 passed.
Go backend:
bash $(git rev-parse --show-toplevel)/.claude/skills/ma-sandbox-scripts/check-backend.sh| Output | Action |
|---|---|
clean | No local Go changes deployed — skip Go integration scenarios (Stage 4 Go section), note this in "Known gaps" |
deployed <service> | Enable debug logging before capturing any evidence: bash $(git rev-parse --show-toplevel)/.claude/skills/ma-sandbox-scripts/set_log_level.sh <service> debug |
needs-deploy <service> | Stop and respond: "You have local changes to <service> that aren't deployed. Run /ma-sandbox-deploy first, then re-run /ma-sandbox-test-plan." Do not proceed for this stack. |
JavaScript UI:
VITE_INFO=$(bash $(git rev-parse --show-toplevel)/.claude/skills/ma-sandbox-scripts/find-vite-port.sh)
VITE_PORT=$(echo "$VITE_INFO" | awk '{print $1}')
VITE_PID=$(echo "$VITE_INFO" | awk '{print $2}')
VITE_MODE=$(echo "$VITE_INFO" | awk '{print $3}') # "existing" or "started"$VITE_PORT in place of 5173 in all URLs below. Record $VITE_MODE/$VITE_PID for cleanup.deployed <service>), use the full sandbox at http://localhost:8090 instead of Vite, and skip straight to Stage 4.Python:
poetry run ma sandbox healthConfirm the services relevant to the change are running.
Before running scenarios, list the code paths identified from the diff and note any paths skipped — this list becomes the "Known gaps" input for Stage 5.
For each controller/reconcile path touched by the diff:
test-<feature>-<scenario> — see .claude/skills/ma-sandbox-references/sandbox-data.md for demo-data
conventions; prefer creating a new entity over disturbing shared demo state, per evidence principle 7).bash $(git rev-parse --show-toplevel)/.claude/skills/ma-sandbox-scripts/capture_service_logs.sh <service> --resource <test-name>kubectl get/kubectl describe — don't rely on logs alone..claude/skills/ma-sandbox-references/evidence-quality.md #8–9.Playwright setup. Use whichever Playwright MCP server is connected in this session — check /mcp
if unsure which name it registered under. None connected → stop and report the command from
Prerequisites above; don't guess or fall back to a non-MCP browser tool. Clean up stale screenshots:
rm -rf tmp/ma-sandbox-test-plan && mkdir -p tmp/ma-sandbox-test-plan (repo-root tmp/ is
already gitignored — screenshots are run evidence, not .claude/ config, and shouldn't sit in a
dot-prefixed directory Finder hides by default)
Derive the route. Read .claude/skills/ma-sandbox-references/routes.md for the phase/entity keyword tables and resolution
algorithm. Resolve phase and entity as independent signals, then combine. No matching row → stop and
report, don't guess.
Navigate and check preconditions.
browser_snapshot to confirm the page loaded (no error boundary, no blank state) — stop and report if it didn't..claude/skills/ma-sandbox-references/sandbox-data.md for what state each feature needs. If the required entity/state is
missing, create it (prefer the UI over a full re-seed) and document every setup step taken.kubectl for inspection, UI or ma CLI for creation.Exercise the feature — click, fill, trigger the interactions the description calls for.
Screenshot after each meaningful state: browser_take_screenshot → tmp/ma-sandbox-test-plan/{state-name}.png.
Check console errors: browser_console_messages(level: "error"). Classify:
| Classification | Matches |
|---|---|
| Blocking | Uncaught, TypeError, ReferenceError, Failed to fetch, Cannot read properties, React render error |
| Non-blocking | deprecated, 404 /favicon, CORS preflight, OPTIONS, sourceMap, net::ERR_ABORTED for known-missing mock data |
Anything matching neither list: treat as Blocking (unknown = assume blocking).
kubectl apply the relevant resources.capture_service_logs.sh) and CLI stdout/stderr.kubectl get.Print the integration evidence following .claude/skills/ma-sandbox-references/evidence-quality.md's guidance.
Build/lint/unit-test results from stages 1–2 are gates, not evidence — don't include them (CI covers that).
$VITE_MODE = started): ask "I started a Vite dev server (PID
$VITE_PID) for this session. Kill it now?" If yes: kill "$VITE_PID". If $VITE_MODE = existing,
leave it alone.bash $(git rev-parse --show-toplevel)/.claude/skills/ma-sandbox-scripts/set_log_level.sh <service> info.© michelangelo-ai, Apache-2.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 .claude/skills/ma-sandbox-test-plan of michelangelo-ai/michelangelo.
Open the folder on GitHubat commit 491a9b2
Ma Sandbox Test Plan 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 |
|---|---|---|---|---|---|---|
| Ma Sandbox Test Plan this skillmichelangelo-ai/michelangelo | 118 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Crap Analyzerswingerman/engineer | 154 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Zizkadb TestZIZKA-AI-SL/ZizkaDB | 129 | — | ~358 | Automated safety check: Pass | Custom licence | |
| Approval Testing Toolkitlexler/skill-factory | 239 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Anti Detect Browserantibrow/anti-detect-browser-skills | 17 | — | ~9.8k | Automated safety check: Warn | MIT | |
| Property Based Testingforyourhealth111-pixel/Vibe-Skills | 3.6k | — | ~4.8k | Automated safety check: Notes | Apache-2.0 |
swingerman/engineer
A skill your agent uses to produce a risk-based refactor + test plan for recently-changed code on a diff/branch/PR by computing CRAP (complexity × untested) on changed methods.
ZIZKA-AI-SL/ZizkaDB
Run the full ZizkaDB test suite across all layers — lint, Python unit tests, SDK tests, MCP tests, TypeScript tests, and dashboard build verification.
lexler/skill-factory
Writes snapshot-style approval tests in Python, JavaScript, TypeScript or Java, comparing output against an approved file instead of writing individual assertions.
antibrow/anti-detect-browser-skills
Drive Chromium from standard Playwright APIs with a real-device fingerprint applied in the kernel, one persistent isolated profile per identity, and a per-profile proxy whose exit IP sets timezone…
foryourhealth111-pixel/Vibe-Skills
Property-based testing with fast-check (TypeScript/JavaScript) and Hypothesis (Python).
ArabelaTso/Skills-4-SE
Automatically reduces bug-triggering test cases to minimal form while preserving the failure.
michelangelo-ai/michelangelo
Tail logs, inspect pods, and diagnose unhealthy services in a running Michelangelo sandbox.
michelangelo-ai/michelangelo
Build a Go service binary, package it into a Docker image, import into k3d, and deploy via helm sync.
michelangelo-ai/michelangelo
Canonical setup sequence for the Michelangelo local sandbox.
michelangelo-ai/michelangelo
Update Michelangelo documentation. An agent skill from michelangelo-ai/michelangelo.
michelangelo-ai/michelangelo
Structured interview for designing and implementing changes to the Michelangelo platform.
michelangelo-ai/michelangelo
Tear down the Michelangelo sandbox cluster and recreate it from scratch.
Works with
Categories
Build, test, and verify a sandbox change across Go, JS, and Python. Ma Sandbox Test Plan is an agent skill from michelangelo-ai/michelangelo. Build, test, and verify a sandbox change across Go, JS, and Python.
Ma Sandbox Test Plan fits situations like: the user asks to verify a change; generate evidence that a feature works.
Run `npx skills add michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a claude-code`. Or copy the skill folder (.claude/skills/ma-sandbox-test-plan in michelangelo-ai/michelangelo) into .claude/skills/ma-sandbox-test-plan in your project. Claude Code loads it when a task matches its description.
Run `npx skills add michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a codex`. Or copy the skill folder (.claude/skills/ma-sandbox-test-plan in michelangelo-ai/michelangelo) into .agents/skills/ma-sandbox-test-plan 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 michelangelo-ai/michelangelo --skill ma-sandbox-test-plan -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ma-sandbox-test-plan, .gemini/skills/ma-sandbox-test-plan, .github/skills/ma-sandbox-test-plan and .opencode/skills/ma-sandbox-test-plan in your project.
Going by SKILL.md and its folder, Ma Sandbox Test Plan needs the command-line tools its instructions call (git, bash, kubectl, go, yarn and poetry). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use git, 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.
Ma Sandbox Test Plan is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8.2k 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 Ma Sandbox Test Plan: Crap Analyzer (swingerman/engineer, 154 stars), Zizkadb Test (ZIZKA-AI-SL/ZizkaDB, 129 stars), Approval Testing Toolkit (lexler/skill-factory, 239 stars) and Anti Detect Browser (antibrow/anti-detect-browser-skills, 17 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
michelangelo-ai (a GitHub organization) maintains it in michelangelo-ai/michelangelo, which has 118 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 10, 2026.
Source: michelangelo-ai/michelangelo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.