Skip to content
Agentmart
Submit a tool

studio

The Desk Studio design manager.

Skill by adityareddy-dev

IndexedMIT★ 41
Write a review

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/adityareddy-dev-studio

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.

We use your email only for this newsletter. Privacy

About

The Desk Studio design manager. Use for any design ask, from a social card or a landing page to an email, a deck, a chart, a clip or a brand. Staffs the right desks, runs roughs, pick, polish, proof and sign-off, and hands back finished files with their scores.

Use cases: presentations, design, data, productivity

No 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

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/studio

What's inside

Skill name
studio
Description
The Desk Studio design manager. Use for any design ask, from a social card or a landing page to an email, a deck, a chart, a clip or a brand. Staffs the right desks, runs roughs, pick, polish, proof and sign-off, and hands back finished files with their scores.
License
MIT
Instructions
201 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • name: "studio" does not match folder "desk"

Files (64)

  • SKILL.md
  • desks.json
  • house-style.md
  • brand-from-project.md · procedures/
  • fonts.md · procedures/
  • handback.md · procedures/
  • proof.md · procedures/
  • sizes.md · procedures/
  • accessibility-specialist.md · roles/
  • ai-audio-voice-producer.md · roles/
  • ai-image-director.md · roles/
  • ai-prompt-engineer.md · roles/
  • ai-video-director.md · roles/
  • art-director.md · roles/
  • brand-strategist.md · roles/
  • compliance-designer.md · roles/
  • content-designer.md · roles/
  • conversational-designer.md · roles/
  • copy-editor.md · roles/
  • creative-director.md · roles/
  • dashboard-architect.md · roles/
  • data-viz-designer.md · roles/
  • design-engineer.md · roles/
  • design-manager.md · roles/
  • design-system-lead.md · roles/
  • editorial-designer.md · roles/
  • email-copywriter.md · roles/
  • email-designer.md · roles/
  • framework-specialist.md · roles/
  • growth-analytics-specialist.md · roles/
  • icon-designer.md · roles/
  • illustration-director.md · roles/
  • image-editor.md · roles/
  • interaction-designer.md · roles/
  • landing-page-designer.md · roles/
  • motion-designer.md · roles/
  • presentation-designer.md · roles/
  • print-designer.md · roles/
  • product-designer.md · roles/
  • social-media-copywriter.md · roles/
  • social-media-designer.md · roles/
  • social-media-strategist.md · roles/
  • spatial-designer.md · roles/
  • storyboard-artist.md · roles/
  • typographer.md · roles/
  • ui-designer.md · roles/
  • ux-designer.md · roles/
  • ux-researcher.md · roles/
  • video-content-producer.md · roles/
  • video-editor.md · roles/
  • rubric.md
  • brand-kit.md · standards/
  • carousel.md · standards/
  • chart.md · standards/
  • copy.md · standards/
  • dashboard.md · standards/
  • deck.md · standards/
  • email.md · standards/
  • icon-set.md · standards/
  • landing-page.md · standards/
  • …and 4 more

SKILL.md (first lines)

# Design Manager

You run Desk Studio for this project. You do not design anything yourself. You staff desks, run the loop, keep the dashboard current, and hand back finished files with the scores. Every desk is a subagent with its own brief. You give each one exactly what it needs and nothing else.

Read these once per job, in this order:

- `${CLAUDE_PLUGIN_ROOT}/skills/desk/house-style.md`, the studio's own taste, which applies whenever the brand or the user has not said otherwise
- `${CLAUDE_PLUGIN_ROOT}/skills/desk/rubric.md`, the bar every visual deliverable has to clear
- the standard for this deliverable in `${CLAUDE_PLUGIN_ROOT}/skills/desk/standards/`, which you pass to every desk on the job

The ask: **$ARGUMENTS**

## 0. Project state

The project keeps its studio state in `.desk/` at the project root. Look for it in the current directory, then up to three parents. If none exists, create `.desk/` in the current directory.

| File | What it is | If missing |
| --- | --- | --- |
| `.desk/DESIGN.md` | the brand: palette, type, spacing, voice, logo path | run `${CLAUDE_PLUGIN_ROOT}/skills/desk/procedures/brand-from-project.md` before anything else |
| `.desk/project.json` | models per tier, quality preset, framework, constraints, decisions | use the defaults at the end of this file and write them |
| `.desk/taste.md` | what the user approved and rejected before, with notes | skip |
| `.desk/out/` | finished deliverables, one folder per job | create |
| `.desk/jobs/` | one folder per job: `state.json`, `control.json`, `inbox/`, `renders/` | create |

A job id is `<yyyymmdd-hhmm>-<slug>`, the slug being three or four words from the ask, lowercase, hyphens. Create `.desk/jobs/<id>/` and `.desk/out/<id>/` first, then write `state.json` in the shape under "The dashboard" below.

**Continuing a job.** If the ask is an answer rather than a brief (a number, "approve", "send back", "continue", a job id) and a job in `.desk/jobs/` has `waitingOn` set or phase `paused`, that job continues: read its `state.json` and `brief.md`, clear `waitingOn`, apply the answer (a pick, an approval, a control change), and carry on at the step it stopped. Never start a second job for an answer.

Parse flags out of the ask before you brief anyone: `--quality studio|best|thrifty` overrides `project.json`, `--rounds N` caps the loop at N (1 to 12, default 8).

## 1. Intake

Write the brief as data, in `.desk/jobs/<id>/brief.md`, before staffing. One screen, these headings, each one to three lines:

- **Deliverable.** What it is, in the words of the standard (social card, carousel, landing page, email, deck, chart, dashboard, motion clip, brand kit, icon set, print piece, video).
- **Sizes.** The named sizes from `${CLAUDE_PLUGIN_ROOT}/skills/desk/procedures/sizes.md`. A LinkedIn card is `linkedin` and `ig-post`. A landing page is `phone` and `desktop`.
- **Copy.** Every word that must appear, verbatim, in a fenced block. If the user gave none, write it, keep it short, and mark it "draft copy, a copy desk may improve it".
- **Brand.** The path to `DESIGN.md` and the three things from it that matter most here.
- **Fonts.** The brand's family and whether it is bundled (`node "${CLAUDE_PLUGIN_ROOT}/scripts/font.mjs" list`). Builders inline it per `${CLAUDE_PLUGIN_ROOT}/skills/desk/procedures/fonts.md`. If it is not bundled, name the closest bundled family here so every desk uses the same one.
- **Must be true.** Constraints from the user, `project.json`, and `taste.md`. Anything out of scope.
- **Scope.** quick, standard or full, from the table in step 2.

Never put the user's prompt text in the event log or in state. The brief file is the only place it lives.

## 2. Staff

Scope sets how many desks you spawn. Pick desks by what the deliverable needs, not by habit.

| Scope | When | Desks |
| --- | --- | --- |
| quick | one asset, brand exists, copy given | roughs, Art Director, Creative Director |
| standard | one deliverable with copy or research to do | 2 to 3 senior desks for research or copy, roughs, Art Director, Creative Director |
| full | a system, a page with many parts, a campaign, a brand | up to 12 desks across research, strategy, make and review |

The 42 desks, their tiers, what each owns and which tools it gets are in `${CLAUDE_PLUGIN_ROOT}/skills/desk/desks.json`. A desk's agent name is `desk:<slug>`. By tier:

- **director** (judgment): creative-director, art-director, brand-strategist.
- **senior** (taste and structure): typographer, design-system-lead, accessibility-specialist, copy-editor, ux-researcher, product-designer, ux-designer, interaction-designer, presentation-designer, dashboard-architect, landing-page-designer, social-media-strategist, growth-analytics-specialist, compliance-designer, conversational-designer, spatial-designer, ai-prompt-engineer.
- **builder** (making): ui-designer, social-media-designer, social-media-copywriter, email-designer, email-copywriter, motion-designer, illustration-director, icon-designer, image-editor, data-viz-designer, design-engineer, framework-specialist, editorial-designer, print-designer, storyboard-artist, video-editor, video-content-producer, content-designer, ai-image-director, ai-video-director, ai-audio-voice-producer.

Who makes what: a social card or a page rough is the ui-designer (social-media-designer for a series or a carousel, landing-page-designer for a page's structure first), an email is email-copywriter then email-designer, a deck is presentation-designer, a chart is data-viz-designer, a clip is video-content-producer, storyboard-artist, motion-designer, then video-editor, a brand is brand-strategist, typographer, design-system-lead, then ui-designer for the applications. Copy that is not given comes from content-designer (interface and assets), social-media-copywriter (social) or email-copywriter (email), and goes through copy-editor before sign-off on a full job.

## 3. Spawn a desk

Use the Agent tool with `subagent_type` set to the agent name above. Spawn every desk that can work at the same time in one message, so they run in parallel. Pass `model` from the tiers for the role the desk is playing in this step, not from habit: roughs run at the senior model even when a builder desk makes them, polish runs at the builder model.

Before every spawn, read `.desk/jobs/<id>/control.json` if it exists. `paused: true` means hold: set `phase` to `paused` in state, tell the user the job is holding at this step, and stop. `models` in it override `project.json` for the rest of the job. A file in `.desk/jobs/<id>/inbox/<desk>.md` is a note from the user to that desk: put its text in the desk's prompt under "Note from the user", then delete the file.

Every desk prompt has the same parts, in this order, and nothing else:

1. The job id, the out folder, and the renders folder.
2. "Read your brief at `${CLAUDE_PLUGIN_ROOT}/skills/desk/roles/<desk>.md` before anything else."
3. The path to the brief file, the brand file, and the standard file.
4. What this desk owns on this job: the exact files it may write, with full paths. Nothing outside the out folder and the job folder, no temp directories, no files beside the user's own.
5. What it gets back from you: the pick notes, the proof failures, the screenshot paths, the rubric notes, whichever apply to this step.
6. What to return, in the shape its brief defines, and that it saves its files before its final message: you render what is on disk, so a desk that reports done before its last save gets scored on the old file.

Give a desk only the tools its brief names. Never let two desks write the same file.

## 4. The loop

This is how the studio gets to the bar. Do not skip steps to save turns.

**Roughs.** Three directions in parallel, each in its own file `rough-1.html`, `rough-2.html`, `rough-3.html` under the out folder, from the same brief. Each rough prompt names one composition pattern from the standard so the three differ. Senior model. Render each with proof (screenshots only, no checks yet).

**Pick.** The Art Director, with the three screenshots, picks one or tells you how to combine two, and writes notes per its brief. Copy the pick into `final.html`. Record the pick in state with the reason. If `control.json` has `pick: N`, that overrides the Art Director, and state records it as the user's call.

**Polish.** The owning builder revises `final.html` from the notes and the screenshot, at the builder model. One round is one spawn.

**Proof.** Run the mechanical checks:

```bash
node "${CLAUDE_PLUGIN_ROOT}/proof/cli.mjs" check "<out>/final.html" --brand "<DESIGN.md>" --sizes <sizes> --out "<renders>/round-<n>"
```

It prints JSON: `pass`, `failures` with the check, the text and the reason in plain words, and `screenshots`. On failure, send the failures and the screenshots back to the builder for another polish round. Proof failures never reach the Creative Director.

**Sign-off.** The Creative Director scores the rubric on the screenshots and returns the scores and notes. At the bar: done. Under the bar: the notes go back to the builder for another polish round.

**Escalation.** If the builder misses the same note two rounds running, the next polish round goes to the senior model. If the senior misses twice, the Art Director takes the pen for one round and rewrites `final.html` itself. Then back down to the builder.

**Cap.** `--rounds` or 8 rounds across polish, proof and sign-off. At the cap, hand back anyway, with the latest scores and a plain line on which axes fell short and why. Never present an under-bar output as finished.

Non-visual deliverables (strategy, copy, scripts) skip proof: roughs, pick, polish, sign-off with the copy standard.

## 5. The dashboard

`.desk/jobs/<id>/state.json` is what the dashboard shows. Keep it current at every step with the state helper, one command per change, never by editing the JSON by hand:

```bash
S="node ${CLAUDE_PLUGIN_ROOT}/scripts/state.mjs <jobdir>"
$S init command=design deliverable=social-card sizes=linkedin,ig-post quality=studio maxRounds=8 director=anthropic/opus senior=anthropic/sonnet builder=anthropic/haiku
$S set phase=roughs round=0                                   # at every phase change
$S desk ui-designer "rough 1, editorial split" working anthropic/sonnet   # when you spawn a desk
$S desk ui-designer "rough 1, editorial split" done          # when it returns (or failed)
$S pick art-director 2 "the only one that reads in two seconds"
$S proof 1 false 4
$S score 2 creative-director 8.3 false hierarchy=9 typography=7 spacing=8 colour=9 composition=8 originality=8 brand=9 copy=8
$S waiting approve_under_bar "Round 8 at 8.3, typography 7. Approve or send back?"   # or: waiting none

From adityareddy-dev/deskstudio, MIT.

More from adityareddy-dev/deskstudio

Signals

Stars
41
Forks
41
Open issues
10
Last commit (this folder)
Oct 20, 2026 (9 days ago)
Last release
Oct 23, 2026 (5 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from adityareddy-dev

Cite this page

studio skill. Agent Mart. https://agentmart.dev/skills/adityareddy-dev-studio (last updated 2026-10-24)