Skilled Worker
A plugin marketplace of structured AI workflows for knowledge workers — built for Claude Code and Claude Cowork.
Generic prompting gives you text. A skill gives you a repeatable process: the same framework, the same output shape, every time you ask. Ask for a PRD and you get the same nine sections, with the questions you skipped marked as skipped, every time.
Early days — two plugins work today. ss-product-management has nine skills and a
command; ss-ai-learning has five. The other two are published as empty scaffolds so
the structure is visible; they install cleanly but do nothing yet. Watch or star the
repo if you want to know when they land.
Plugins
| Plugin | What it covers | Status |
|---|---|---|
ss-product-management |
Research, PRDs, user stories, prototypes, prototype verification, test scenarios, e2e runs, bug reports, exec recommendations | 9 skills, 1 command |
ss-job-search |
Role targeting, company research, applications, interview prep | Planned — empty |
ss-resume |
Resume review, tailoring to a job description, impact bullets | Planned — empty |
ss-ai-learning |
Study plans, concept explainers, practice projects, tool evaluations, research digests | 5 skills |
ss-product-management skills
| Skill | Produces |
|---|---|
deep-research |
A sourced answer to a question a decision rests on — researched across several angles at once, every finding attacked before it is believed, ranked by confidence, every claim carrying a link and a date |
prd-drafting |
A PRD: problem, users, goals, a two-lane flow walkthrough (what the user sees / how data moves), scoped requirements, metrics, open questions |
user-story-creation |
Takes a PRD (or feature) and produces vertically sliced stories with Given/When/Then criteria, INVEST-checked, sequenced, and traced back to requirements |
prototype-creation |
Takes a PRD (or story) as context and produces a prototype brief plus a single-file clickable HTML prototype or wireframe spec |
prototype-verification |
Checks a prototype against the stories and scenarios it should satisfy — coverage map, scenario walk-through, and every failure sorted into prototype defect, spec gap, or bad scenario |
testing-scenarios |
Takes a PRD (or story) and produces a prioritized test pass — happy paths, boundaries, failures, permissions, state transitions — with a traceability table |
e2e-testing |
Executes a test pass in a real browser against a running build — local, or a preview/PR deployment for people who do not run it locally — scenario results with screenshot, console and network evidence, flaky calls made honestly, and a bug report per failure |
executive-presentation |
Turns an analysis into a one-page recommendation for senior leadership — R3N: the recommendation first, the reasoning with its numbers and sources, the risk of acting and of doing nothing, and startable next steps |
bug-report |
A reproducible bug report with expected vs actual, evidence, and separate severity/priority |
They chain in that order: the PRD is the spine, and the prototype, stories, and test
pass all read it directly; the test pass is executed by e2e-testing once there is a
build to run it against, and both that and verification feed bug reports.
deep-research sits upstream of all of it — it answers the questions a PRD would
otherwise assume, and its findings land in the PRD carrying their sources.
deep-research is built around one idea: research that a decision rests on has to be
auditable. It splits a question into several angles and researches them in parallel
contexts, so agreement between angles means something; it traces repeated claims back
past the citations, because three articles quoting one press release are one source; and
it sends every finding to a skeptic in a fresh context whose job is to disprove it.
What survives is ranked by confidence, contradictions stay contradictions rather than
being averaged into a number no source supports, and what was refuted stays visible with
its reason. Then it stops and waits for you.
Then it loops. Once the stories and scenarios exist, prototype-verification walks them
against the prototype and sorts every failure into three piles: the prototype is wrong
(back to prototype-creation), the spec is wrong (back to the PRD), or the scenario is
wrong (back to the test pass). Fix, re-check all of them, repeat until the P0 scenarios
pass or it stops converging. A spec nobody has executed is a guess, and this is the
cheapest place to execute one.
Verification is a separate skill on purpose, and it runs in a fresh context — spawn a
subagent and hand it the file paths; no new session required. A context holding the
build conversation knows what each screen was supposed to do and reads it as doing
that, so it never grades its own work: the verifier reports and never edits, the builder
fixes and never self-certifies. The report also states what it could not check — a
prototype hardcodes its data, so concurrency, retries, and persistence come back as
not verifiable here rather than as a pass.
e2e-testing is the other end of that: once a build exists, it drives a real browser
through the same scenarios and reports what the build actually does — and it is built
for people who do not run the app locally. It asks which environment before the first
click, and treats the answer by class rather than by hostname: a preview or PR
deployment is the normal case and gets the full pass, because it is disposable; a shared
staging needs a yes that names it, and skips the destructive scenarios; production is a
refusal, because e2e scenarios submit forms, mutate records and trigger emails, and
"read-only" is not a promise anything clicking through flows can keep. It captures a
screenshot, the console and the failed requests for every failure; it reports a scenario
that failed and then passed as flaky rather than as a pass; and it never edits the app
or the scenario to get a better number. Without a browser tool it says so and stops,
instead of reading the code and describing what would probably happen.
executive-presentation is where the chain comes out. It takes an analysis — research,
a test pass, a PRD, a spreadsheet — and turns it into the page a senior audience will
actually read: the recommendation first, as a decision specific enough to refuse, then
at most three reasons each leading with a number that carries its source and its
arithmetic, then the risk in both directions, because the cost of doing nothing is the
half usually left out and usually the half that moves the decision. It names the
falsifier — what would make this recommendation wrong — and it never invents a figure:
a gap is marked [NEEDS DATA] and left visible.
ss-product-management commands
| Command | Runs |
|---|---|
/spec-feature |
The full chain — PRD, prototype, stories, test pass, then the stories and scenarios run back through the prototype — stopping for review after each artifact |
Installing
Claude Code CLI:
claude plugin marketplace add strategysoul/skilled-worker
claude plugin install ss-product-management@skilled-worker
Claude Cowork: Customize → Browse Plugins → Add Marketplace from GitHub, then
enter the same strategysoul/skilled-worker.
Working on the skills themselves? Clone the repo and add it as a local marketplace by
path instead — your edits then apply after claude plugin marketplace update skilled-worker, with no push required.
Using it
Skills load on their own when what you ask matches what they do. You don't name them:
"Write up a PRD for letting agencies onboard sub-accounts" "Turn this PRD into stories" "How should we test this before release?" "Something's broken — the submit button spins forever"
The command is explicit, and runs the whole chain with a review stop after each piece:
/spec-feature onboarding form for new agency accounts
It goes problem framing → PRD → prototype → stories → test pass → verification. That last step runs the stories and scenarios back through the prototype, so the chain ends by telling you what the PRD got wrong rather than handing you four documents that agree with each other because nothing ever tested them.
flowchart TD
IDEA([feature idea]) --> S0["<b>Step 0</b><br/>create specs/[slug]/"]
S0 --> S1["<b>Step 1</b> · framing.md<br/><i>is this the right problem?</i>"]
S1 --> S2["<b>Step 2</b> · PRD.md<br/><i>two-lane flow walkthrough</i>"]
S2 --> S3["<b>Step 3</b> · prototype.html<br/><i>riskiest flow only</i>"]
S3 --> S4["<b>Step 4</b> · stories.md<br/><i>vertically sliced</i>"]
S4 --> S5["<b>Step 5</b> · test-scenarios.md<br/><i>traced to the spec</i>"]
S5 --> S6{{"<b>Step 6</b> · verification.md<br/>fresh context — a subagent<br/>walks every P0 scenario"}}
S6 --> S7["<b>Step 7</b> · README.md<br/><i>spec pack · what is ready to start</i>"]
S6 -. "<b>PROTO-BUG</b><br/>fix and re-verify" .-> S3
S6 -. "<b>SPEC-GAP</b><br/>a decision, not a fix" .-> S2
S6 -. "<b>TEST-DEFECT</b><br/>the scenario is wrong" .-> S5
classDef verify stroke-width:2px
class S6 verify
Solid arrows are the chain, and every one of them is a checkpoint — the artifact is
shown and a decision taken before the next is built on it. The dotted arrows are the
point of the whole thing: Step 6 is the first time anything executes the spec, and each
failure it finds goes back to whoever owns it. SPEC-GAP is the valuable one, and it
returns to the PRD as a question, never as a fix applied downstream.
Every run makes a folder first and writes each artifact into it as that artifact is produced:
specs/agency-sub-account-onboarding/
├── README.md # what exists and what state it is in
├── framing.md # the agreed problem, before any drafting
├── PRD.md
├── prototype.html # edited in place across verification rounds
├── prototype-brief.md # what is fake, what is deliberately excluded
├── stories.md
├── test-scenarios.md
└── verification.md # coverage, results, findings, round log
Nothing lives only in the conversation, so the chain survives a session ending mid-way — point the command at an existing folder and it resumes from the first missing artifact instead of regenerating what is already there.
What makes these different from a prompt
The PRD skill produces a two-lane flow walkthrough: one numbered sequence showing
what the user sees beside what the system does with the data — payload, states,
failure handling, what is persisted. "Account creation in progress" and
status=pending are the same fact in two vocabularies, and a spec containing only one
of them gets the other invented later, differently.
Everything downstream reads that walkthrough. Stories slice it, tests verify it, prototypes render it — and each one reports back what the PRD got wrong.
ss-ai-learning skills
For three overlapping situations: learning AI well enough to make decisions about it, learning to build with it, and keeping up without drowning.
| Skill | Produces |
|---|---|
ai-study-plan |
A learning path with a demonstrable capability target, an artifact per unit, and a stopping rule |
ai-concept-explainer |
An explanation pitched at the decision behind the question, with the mechanism, the failure modes, and where the analogy breaks |
ai-practice-project |
A hands-on project scoped to the hours available, with milestones, what to observe at each, and spend guardrails |
ai-tool-evaluation |
An adopt/pass/pilot decision with criteria set before testing, measured against your own data and a real baseline |
ai-research-digest |
A paper or release cut down to the claim, the evidence, what is genuinely new, and act/watch/ignore |
The through-line: none of them let you mistake reading for capability. Study units are done when an artifact exists, projects tell you what to look at rather than what to build, evaluations set thresholds before the demo, and digests are allowed to conclude "this changes nothing for you".
Skills vs. commands
Two different things, and the difference matters:
- A skill (
<plugin>/skills/<name>/SKILL.md) is a reusable framework. It is model-invoked — Claude loads it on its own when the user's request matches the skill'sdescription. That description is the entire trigger, so it must name the situations and phrases a real user would type. - A command (
<plugin>/commands/<name>.md) is a/slashworkflow the user runs deliberately. Its job is to sequence several skills into one end-to-end deliverable.
A skill should stand alone. A command should not duplicate a skill's content — it should point at it.
Repository layout
skilled-worker/
├── .claude-plugin/
│ └── marketplace.json # every plugin listed here, or it doesn't install
├── ss-product-management/
│ ├── .claude-plugin/
│ │ └── plugin.json # name, version, description, keywords, license
│ ├── skills/
│ │ └── <skill-name>/SKILL.md
│ └── commands/
│ └── <command-name>.md
├── ss-job-search/ # same shape
├── ss-resume/ # same shape
├── ss-ai-learning/ # same shape
├── templates/ # copy these when adding a skill or command
│ ├── SKILL.md
│ └── COMMAND.md
├── validate_plugins.py # manifest + frontmatter checks
├── CLAUDE.md # conventions Claude should follow in this repo
└── CONTRIBUTING.md # how to add a skill
Adding a skill
mkdir -p ss-resume/skills/tailor-to-job
cp templates/SKILL.md ss-resume/skills/tailor-to-job/SKILL.md
Fill in the template, then validate:
python validate_plugins.py
The directory name and the frontmatter name must match — the validator enforces it.
Contributing
Issues and pull requests are welcome — especially reports that a skill didn't fire
when it should have. A skill loads based on its description alone, so a description
that doesn't match how people actually phrase things is the most common defect here,
and it's invisible to the author.
See CONTRIBUTING.md for how to add a skill, and CLAUDE.md for the writing conventions this repo follows.
Structure is checked in CI:
python validate_plugins.py
License
MIT — see LICENSE.
No comments yet
Be the first to share your take.