sketch
Settle the shape a piece of work has to hold before any logic and file it: the caller's usage, the types, the signatures and the module boundaries with…
Skill by Thalisu
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/thalisu-sketch
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Shell scripts
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/sketch
What's inside
- Skill name
sketch- Description
- Settle the shape a piece of work has to hold before any logic and file it: the caller's usage, the types, the signatures and the module boundaries with unimplemented bodies, plus each rival shape it rejected in one line, shaped by an agent that writes nothing and filed in the Scratch by this session, never implemented.
- License
- MIT
- Instructions
- 111 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- files: referenced but missing: scripts/link-skills.sh
Files (17)
- AGENT.md
- SKILL.md
- openai.yaml · agents/
- README.md · evals/
- case.yaml · evals/typed-sketch-filed-in-feature-folder/
- location-and-shape-in-one-line.md · evals/typed-sketch-filed-in-feature-folder/graders/
- location-named-in-last-message.md · evals/typed-sketch-filed-in-feature-folder/graders/
- sketch-bodies-not-implemented.md · evals/typed-sketch-filed-in-feature-folder/graders/
- sketch-boundaries-per-module.md · evals/typed-sketch-filed-in-feature-folder/graders/
- sketch-filed-in-feature-folder.md · evals/typed-sketch-filed-in-feature-folder/graders/
- sketch-header-keys.md · evals/typed-sketch-filed-in-feature-folder/graders/
- sketch-in-format.md · evals/typed-sketch-filed-in-feature-folder/graders/
- sketch-rejected-rival.md · evals/typed-sketch-filed-in-feature-folder/graders/
- sketch-shapes-the-argument.md · evals/typed-sketch-filed-in-feature-folder/graders/
- tree-unchanged-but-the-sketch.md · evals/typed-sketch-filed-in-feature-folder/graders/
- prompt.md · evals/typed-sketch-filed-in-feature-folder/
- contract.sh · tests/
SKILL.md (first lines)
# Sketch
Settle the shape of the work the developer typed and file it as one Sketch in the project's
Scratch. The work is split in two on purpose. The `sketch` agent explores the shape in a window of
its own and returns the Sketch's text; it writes nothing, since it may read text a stranger wrote.
This session resolves where the Sketch goes, checks that place, and writes the file, per
[scratch.md](../../.agents/scratch.md). It shapes nothing itself and implements nothing: when the
agent cannot be forked or returns no Sketch, the command ends with one line saying why, and no
file is written.
The developer's argument sits at the end of this file, between the `<arguments>` tags: what to
shape, and the feature slug to file the Sketch under when the developer passed one. Empty: one
message asking what to shape, and nothing else.
`<skill-dir>` below is the directory this file sits in. Steps 1 to 5 run in order, and each stop
they name ends the command there.
## 1. Where it goes
The slug is the one the developer passed. With none, derive one from the argument: the words that
name the work, lowercased, joined with dashes. Resolve it with the shared script and never by
reading the folder, since the rule about which folder a slug names lives there and nowhere else.
Test for the script first, then run it:
```sh
test -f <skill-dir>/../../.agents/scripts/resolve-feature-folder.sh
bash <skill-dir>/../../.agents/scripts/resolve-feature-folder.sh <slug>
```
It prints `slug=`, `root=`, `folder=` and `spec=`, and creates nothing. The script's exit decides,
never an empty stdout, since a refusal and a missing file both leave stdout empty:
| What came back | What this session does |
|---|---|
| exit 0 | the Sketch goes to `<root>/<folder>/sketch.md` when `folder=` is relative, as it is from anywhere in the main checkout, to `<folder>/sketch.md` when it is absolute, as it is from a linked worktree, or to `<root>/.scratch/sketches/<slug>.md` when `folder=none` |
| any other exit, and `test -f` finds the script | stop: nothing is written, and the one line is the script's own stderr line |
| `test -f` does not find the script | not a stop: the root is the first entry of `git worktree list --porcelain`, the slug is lowercased with every character that is not a letter or a digit turned into a dash and the dashes squeezed and trimmed, the Sketch goes to `<root>/.scratch/sketches/<slug>.md`, and the end owes the line that the resolver was absent |
On exit 0, `<slug>`, `<root>` and `<folder>` are the `slug=`, `root=` and `folder=` the script
printed, never the word the developer typed, so the destination is always an absolute path.
## 2. The check before anything else
The destination goes through one check before the agent is forked, so a refused place costs no
exploration:
```sh
dest="$(readlink -m <the destination>)"
case "$dest" in "<root>/.scratch/"*) echo inside ;; *) echo refused ;; esac
```
`refused` ends the command: nothing is written, and one line names the path that was refused.
`readlink -m` collapses the `..` and follows the symlinks in the destination, so a path that only
looks contained is caught here. The other side stays the unresolved `<root>/.scratch/`, so a
`.scratch` that is itself a symlink sends the destination outside the prefix and is refused on
every row of step 1, including the one without the resolver.
## 3. The shape
Call the Agent tool with `subagent_type: sketch`. Its prompt is the brief the agent's definition
fixes, one labelled part per line, and the agent sees nothing of this session but that brief:
| Part of the brief | What this session puts there |
|---|---|
| what to shape | the argument, in the developer's own words |
| the map | `none`, unless the argument names one |
| the Digest | `none`, unless the argument names one |
| the repository root | the `<root>` of step 1 |
| where the Sketch goes | the destination of step 1, which the agent puts on the header's `Written:` line |
| the chain's `.agents/` folder | the absolute path `readlink -f <skill-dir>/../../.agents` prints, since the agent holds no shell to follow the install link itself |
The agent returns the Sketch's text, then the shape on a line starting `Shape:`, then a `No map:`
line when the brief carried none. What comes back decides:
| What came back | What this session does |
|---|---|
| the Agent tool lists no `sketch` | stop: nothing is written, and one line names `scripts/link-skills.sh` in the skills repository as the run that links it |
| a return that does not carry the sections of the [Sketch format](../../.agents/formats/sketch-format.md) | stop: it is not a Sketch, nothing is written, and one line says so |
| a return that carries them | step 4 |
## 4. The ignore, then the write
Whether the project's own committed file carries the scratch ignore is read in the main checkout:
```sh
( cd <root> && git check-ignore -v .scratch/ )
```
A first field of `.gitignore` owes nothing. Anything else, the clone's exclude list, a global
excludes file or no output at all, owes the line, appended before the write:
```sh
( cd <root> && if [ -L .gitignore ]; then echo '.scratch/ is not ignored: .gitignore is a symlink, so nothing was appended'; else grep -qxF '.scratch/' .gitignore 2>/dev/null || { [ -z "$(tail -c1 .gitignore 2>/dev/null)" ] || echo; printf '.scratch/\n'; } >> .gitignore; fi )
```
Then write the Sketch whole at the destination: the agent's text from the Sketch's title line to
the last line of its rejected rivals, as returned, with nothing added and nothing reworded. The
`Shape:` and `No map:` lines that follow it belong to step 5 and stay out of the file. A Sketch
already there is replaced whole.
## 5. The end
The final message is one line that holds the Sketch's location and the shape together, so the
developer learns both without opening the file. One more line only when it is owed: the
`.scratch/` line appended, no map, or no resolver. Nothing else in the tree changes.
<arguments>
$ARGUMENTS
</arguments>From Thalisu/SKILLS, MIT.
More from Thalisu/SKILLS
- 0.592score
improve-prompt
Thalisu
Rewrite a prompt for one Claude model from Anthropic's live prompting docs for that model: every change cites the section of the docs that asks for it, what…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
journey
Thalisu
Walk every path of a spec from the actor's seat: how they arrive, what they see, what they do, what the system answers, what happens when it fails.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
architect
Thalisu
Design the shape before code: sketch the caller's usage first, then the types, function signatures and module boundaries with `not implemented` bodies…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
how
Thalisu
Explains how a subsystem works: explores the codebase and produces a senior-engineer walkthrough of its architecture, runtime flow, key concepts, where things…
SkillAFreshness: A★ 1Claude Code +9 - 0.589score
debt
Thalisu
Gather a feature's Pending debt (its Debt files and the Review Findings still open) and judge it into a Debt review beside the Spec
SkillAFreshness: A★ 1Claude Code +9 - 0.589score
do
Thalisu
Match a request to one Playbook and run its steps: a Ticket's path or issue reference builds that Ticket as the last step of the chain, a request in words…
SkillAFreshness: A★ 1Claude Code +9 - 0.588score
tickets
Thalisu
Cut a spec, and the journey its verdict points at, into tracer-bullet tickets: one demoable vertical slice per ticket, or a Logic ticket and a Front-end…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
discuss
Thalisu
Interview the user about a plan before code is written: one question at a time, each with a recommended answer and the failure it hunts, answered from the…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
discover
Thalisu
Batch "does this already exist in the repo / where is it" lookup, answered in one terse line per item by the discover agent (FOUND / DUPLICATE / PARTIAL /…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
setup-pre-commit
Thalisu
Set up a Husky pre-commit hook in the current project: finds where the hook belongs, keeps the formatter the project already uses instead of forcing Prettier…
SkillAFreshness: A★ 1Claude Code +9 - 0.582score
teach
Thalisu
Explain a change or subsystem plainly so the user genuinely understands it instead of getting a summary.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
spec
Thalisu
Synthesise the current conversation into a spec, publish it where the project's issue tracker points, and name the next command: journey when the stories add…
SkillAFreshness: A★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 1, 2026 (28 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Thalisu/SKILLS
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Thalisu
- 0.592score
journey
Thalisu
Walk every path of a spec from the actor's seat: how they arrive, what they see, what they do, what the system answers, what happens when it fails.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
architect
Thalisu
Design the shape before code: sketch the caller's usage first, then the types, function signatures and module boundaries with `not implemented` bodies…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
how
Thalisu
Explains how a subsystem works: explores the codebase and produces a senior-engineer walkthrough of its architecture, runtime flow, key concepts, where things…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
improve-prompt
Thalisu
Rewrite a prompt for one Claude model from Anthropic's live prompting docs for that model: every change cites the section of the docs that asks for it, what…
SkillAFreshness: A★ 1Claude Code +9 - 0.589score
do
Thalisu
Match a request to one Playbook and run its steps: a Ticket's path or issue reference builds that Ticket as the last step of the chain, a request in words…
SkillAFreshness: A★ 1Claude Code +9 - 0.589score
debt
Thalisu
Gather a feature's Pending debt (its Debt files and the Review Findings still open) and judge it into a Debt review beside the Spec
SkillAFreshness: A★ 1Claude Code +9
Cite this page
sketch skill. Agent Mart. https://agentmart.dev/skills/thalisu-sketch (last updated 2026-10-24)