cold-reader
A document is done when a reader with no project context can understand it; this skill runs that check as a Vale lint plus a…
Lift-and-shift port of a repository, library, API, protocol, or other software artifact to a different language, runtime, or platform, with the original source available as a reference. This skill SHOULD be used when the user says "port from X to Y", "lift and shift", "rewrite
$ npx -y skills add kylesnowschwartz/SimpleClaude --skill sc-dirty-room --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sc-dirty-roomContext preview
The summary Claude sees to decide when to auto-load this skill.
Lift-and-shift port of a repository, library, API, protocol, or other software artifact to a different language, runtime, or platform, with the original source available as a reference. This skill SHOULD be used when the user says "port from X to Y", "lift and shift", "rewrite
name: sc-dirty-room description: > Lift-and-shift port of a repository, library, API, protocol, or other software artifact to a different language, runtime, or platform, with the original source available as a reference. This skill SHOULD be used when the user says "port from X to Y", "lift and shift", "rewrite in Go", "rewrite in Rust", "translate this codebase", "convert to TypeScript", "language migration", "rewrite in another language", "carry over the algorithms", "borrow techniques from", "dirty room", "dirty-room design", "sc-dirty-room", or wants to reimplement an existing artifact while studying its internals to preserve algorithms, data structures, or idioms worth keeping. NOT for legally-constrained reimplementation — use /sc-clean-room when copyright isolation matters. argument-hint: "[target: repo URL, local path, or artifact name] [optional: target language or scope]"
This is a bastardization of the technique used by Compaq 1982 to clone the IBM PC BIOS.
A structured approach to porting a software artifact to a different language or platform while consulting its internals. A **reading agent** examines the original and produces discovery, fixtures, and a translation brief — notes on which algorithms, data structures, and idioms are worth carrying across the language boundary. The implementation agent receives all three artifacts and explicit permission to read the original source directly.
The clean-room skill builds a wall between specification and implementation to preserve copyright independence; the dirty-room takes notes through the open window because the constraints here are technical, not legal. Use this when the goal is a faithful port rather than an independent reimplementation.
**Phases 0 through 6 run in sequence. The core phases (1-4) MUST NOT be skipped or reordered.**
**After each phase, present the output to the user and wait for approval before proceeding.**
The implementation agent in Phase 3 receives the original artifact's path and may read it freely. The reading agent's notes flow through to the porter. This is the explicit difference from /sc-clean-room — the wall is gone because the work is a translation, not a clean reimplementation. Process-level separation between agents is preserved only for token efficiency; it is no longer load-bearing for independence.
Parse $ARGUMENTS. The first argument is the target, anything after is a scope, focus, or target-language hint.
| Argument | Target | Version pin | |----------|--------|-------------| | Repository URL | Clone or fetch the repo | Record commit SHA | | Local path | Examine directly | Record git commit SHA; if not a git repo, record a checksum | | Package name | Locate via registry (npm, PyPI, RubyGems, crates.io, etc.) | Record exact package version | | Protocol or API name | Fetch public docs and specs | Record document revision or access date |
**Version pinning is mandatory.** Record an immutable identifier so all artifacts reference the same version.
Use `AskUserQuestion`:
Tell the user: "Target: [what]. Scope: [boundaries]. Languages: [source] → [target]."
**Slug**: `<artifact-name>-<source-lang>-to-<target-lang>` (lowercase, hyphens). Create with `mkdir -p .agent-history/dirty-room/<slug>`.
Run `git check-ignore -q .agent-history/` — if it fails, warn the user to add the ignore rule.
If the directory already exists, ask: start fresh, resume, or abort.
| Type | Reading focus | |------|---------------| | **Library/Package** | Exported functions, types, behaviour contracts, internal algorithms | | **CLI Tool** | Command interface, input/output formats, exit codes, argument parsing strategy | | **API/Service** | Routes, request/response schemas, error codes, middleware ordering | | **Protocol** | Message types, sequencing, state transitions, framing | | **Data Format** | Syntax, semantics, edge cases, error recovery, parser strategy | | **Algorithm** | Inputs, outputs, invariants, complexity, optimisations worth preserving |
Before leaving Phase 0, fix the following named variables.
**Substitution contract.** Two grammars appear in this skill and must not be confused:
| Variable | Definition | Derivation rule | |----------|------------|----------
A practical minimalist AI assistant framework that transforms complex AI interactions into natural conversations. Comes with a set of user-commands, sub-agents, hooks, and utilities designed for real-world software development tasks.
A document is done when a reader with no project context can understand it; this skill runs that check as a Vale lint plus a…
MUST be used for any request to draft, write, compose, or reword text another person will read, including 'draft a message',…
Choose the right kind of diagram for what the user is describing, then write and validate it in mermaid. This skill SHOULD be…
Clean-room reimplementation of a repository, library, API, protocol, or other software artifact. This skill SHOULD be used when…
Routes review and refactoring work to a named technique. This skill SHOULD be used when the user asks to "refactor safely",…
Invoke external AI CLIs (Codex, Gemini) for second opinions, code reviews, or alternative analysis. This skill SHOULD be used…