Jobs to Be Done skill for Codex
Find the progress customers hire you for. Codex runs Jobs to Be Done work from recent switching decisions: it reconstructs each timeline, records push, pull, anxiety and habit with interview evidence, and clusters people by circumstance rather than demographic. Output is solution-free job statements, desired-outcome statements per job step, job stories with concrete triggers, and a list of competing solutions that includes doing nothing.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- jobs-to-be-done Installs to ~/.agents/skills/jobs-to-be-done/ for every project on this machine.
curl -fsSL codexskills.dev/cli.mjs -o codex-skills.mjsnode codex-skills.mjs install jobs-to-be-done The CLI also searches, updates and removes skills. Run it with no arguments to pick from a list. Needs Node 20.12+.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- --project jobs-to-be-done Installs to .agents/skills/jobs-to-be-done/ in the current repository. Commit it and everyone who runs Codex there gets it.
curl -fsSLO codexskills.dev/downloads/jobs-to-be-done.zipunzip -o jobs-to-be-done.zip -d ~/.agents/skills/ The archive holds the skill folder with its generated agents/openai.yaml. Unzip into .agents/skills/ to scope it to a repo.
& ([scriptblock]::Create((irm codexskills.dev/install.ps1))) jobs-to-be-done PowerShell 5.1 or 7. Installs to %USERPROFILE%\.agents\skills\. Add -Project for the current repo.
104-line POSIX script. No sudo, no telemetry. Read install.sh
Use it in Codex
Start a prompt with $jobs-to-be-done, or pick it from /skills.
You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.
What Codex reads before loading it
Applies Jobs to Be Done to product work - switch interviews mapped on a timeline (first thought, passive and active looking, deciding, consuming), the four forces of progress (push, pull, anxiety, habit), job statements and job maps, desired-outcome statements, and job stories (When / I want to / So I can) that replace persona-based user stories. Use when asked to run JTBD research, write job stories, figure out why customers hire or fire the product, define competition by job rather than category, or reframe a feature backlog around customer progress.
Use it when
- You want to understand why customers adopt, switch or churn
- Personas are not helping the team make design decisions
- You need to see the real competition, including manual workarounds
- Messaging or onboarding should address specific switching anxieties
Use something else when
- You need general interview logistics and guide writing: use customer-interviews
- You need sprint-sized delivery stories: use user-stories
How to check the result
Job statements contain no product or feature words, each force summary cites interviews, and every job story's When clause names a concrete trigger.
The mistake it prevents
Writing a job statement that is really a feature, such as export to CSV, which locks research into the current solution.
JTBD work is done well when the job is stated without reference to any product, the forces behind real switching decisions are backed by interview evidence, and the resulting job stories describe a situation and motivation precise enough to design for, so that a solution can be judged by whether it helps the customer make progress.
Core vocabulary
| Term | Meaning | Example |
|---|---|---|
| Job | Progress a person wants in a circumstance | Get the team aligned on this week’s priorities without a meeting |
| Circumstance | The situation that makes the job arise | Monday, team is remote, two people were out last week |
| Functional / emotional / social dimensions | What must get done, how they want to feel, how they want to be seen | Done; in control; seen as organized by their boss |
| Hire / fire | Choosing or dropping a solution for the job | Fired the weekly sync meeting, hired an async update doc |
| Competition | Anything hired for the same job, including doing nothing | Spreadsheets, Slack threads, a meeting, a person |
Test a job statement: if it mentions your product, a feature, or a technology, it is a solution, not a job. Rewrite it.
Switch interviews
Interview people who switched recently (ideally within 90 days), toward or away from your product. Rebuild the timeline:
First thought -> Passive looking -> Event -> Active looking -> Deciding -> First use -> Ongoing use
Ask for concrete moments on each step: “When did you first think the old way was not
working? Where were you? What happened that day?” Dates, places and people make memories
reliable; generalities do not. Use $customer-interviews for logistics, consent and
general question rules; this skill adds the timeline and forces lens.
Four forces
For each interview, record evidence for each force:
| Force | Direction | Listen for |
|---|---|---|
| Push of the situation | Toward change | “We missed a deadline because…”, “my boss asked why…” |
| Pull of the new solution | Toward change | “I saw that it could…”, “a friend showed me…” |
| Anxiety of the new | Against change | “What if the team won’t use it?”, migration fears, price risk |
| Habit of the present | Against change | “We’ve always done it in spreadsheets”, sunk setup effort |
Switching happens when push + pull exceed anxiety + habit. Product and marketing levers differ by force: onboarding and migration tools reduce anxiety; templates and imports fight habit; messaging should name the push the customer already feels.
Job map and outcome statements
When the job is understood, map its steps (a universal job map: define, locate, prepare, confirm, execute, monitor, modify, conclude). For each step write desired-outcome statements in a consistent form so they can later be rated for importance and satisfaction in a survey:
Minimize the time it takes to confirm everyone has seen the priorities
Minimize the likelihood that a dependency between two people is missed
Format: direction (minimize / increase) + metric (time, likelihood, number) + object +
context. Keep them solution-free. Opportunity scoring needs a quantitative survey
($survey-design); do not fabricate importance or satisfaction numbers.
Job stories
Use job stories when the situation matters more than the persona:
When <situation with specific trigger and context>,
I want to <motivation / what I'm trying to do>,
so I can <expected outcome>.
Example rewrite:
- User story: “As a team lead, I want a weekly summary so that I know what happened.”
- Job story: “When I start Monday after a week away, I want to see which commitments changed and who changed them, so I can re-plan before the 10:00 stand-up without pinging everyone.”
The job story tells a designer what information, timing and level of detail matter. Keep
user stories ($user-stories) for sprint-sized delivery slices; job stories frame what
those slices should achieve.
Workflow
- [ ] 1. State the decision this JTBD work informs
- [ ] 2. Recruit recent switchers (both directions) and non-adopters
- [ ] 3. Run 8-12 switch interviews; capture timeline and forces per person
- [ ] 4. Cluster interviews by circumstance and push, not by demographic
- [ ] 5. Write 1-3 job statements per cluster, solution-free
- [ ] 6. Map job steps; write desired-outcome statements per step
- [ ] 7. Write job stories for the circumstances the product will target
- [ ] 8. List competing solutions per job, including non-consumption
Output template
## JTBD findings: <scope>
Interviews: 11 (6 switched to us, 3 switched away, 2 evaluated and stayed put)
### Job 1: <solution-free statement>
Circumstances: <when it arises>
Dimensions: functional <...>; emotional <...>; social <...>
Forces (count of interviews with evidence):
- Push (9): <summary + 1 quote>
- Pull (7): ...
- Anxiety (6): ...
- Habit (8): ...
Competing solutions: spreadsheets (5), weekly meeting (4), nothing (2)
Job stories:
- When ..., I want to ..., so I can ...
Implications: <product, onboarding, messaging, pricing>
Gotchas
- Jobs stated too broadly (“be productive”) cannot guide design; too narrowly (“export to CSV”) they are features. Aim for a statement a competitor outside your category could also serve.
- Personas and jobs are not the same; two very different personas often share a job, and one persona has many jobs.
- Do not interview people about switches that happened years ago; memories become rationalizations.
- Firing evidence is as valuable as hiring evidence. Always include people who left.
- Counting forces across interviews indicates prevalence in the sample, not the market; say so.
Verification
Check every job statement contains no product, feature or technology words; every force summary cites at least one interview; every job story has a concrete trigger in its When clause (a time, event or state, not “when I use the app”); and the competing solutions list includes non-consumption or a manual workaround.
What the zip contains
SKILL.md plus the interface file below. Nothing runs on install.
agents/openai.yaml
Gives the Codex app a display name, a one-line description and a starter prompt for this skill.
interface:
display_name: "Jobs to Be Done"
short_description: "Find the progress customers hire you for"
default_prompt: "$jobs-to-be-done Plan JTBD switch interviews to learn why teams move from spreadsheets to our tool" About this skill
Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.