jfdi
Skill0 starsChanged 19 days agoMITView on GitHub
JFDI ("just do it") — work autonomously to a high standard. Make decisions yourself based on verified facts instead of asking, finish the whole job, prove it works, and keep a decision record only for critically important choices. Use when the user invokes /jfdi, says "jfdi", "just do it", "stop asking, just decide", "work autonomously", or makes clear they prefer quality and autonomy over speed and check-ins.
In this repository14 other files it gives its agents.
- ambitiousSkill
- attributionSkill
- ggSkill
- grill-meSkill
- guide-meSkill
- htmlSkill
- local-urlSkill
- flushcacheSkill
- scan-secretsSkill
- scpushSkill
- sendmailSkill
- social-previewSkill
- stern-code-reviewSkill
- strunkSkill
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 10 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Get the facts first: Read the code, its callers and tests, the docs, config, and git history.
- Distinctive: line 28
Never pass an assumption off as a fact: If a fact cannot be established, say it is an assumption, pick the option that is cheapest to undo …
- Distinctive: line 35
Break ties quickly: If options are still equal, take the more conventional, more reversible one.
- Distinctive: line 42
Stop and ask only when the next step is one of these:
- Distinctive: line 51
When you hit a hard stop, do not stop the whole task.
- Distinctive: line 57
Understand before you change: Read the surrounding code and everything that calls it.
- Distinctive: line 60
Finish: No TODOs, stubs, placeholders, or "left as an exercise." Handle error paths and edge cases: empty input, missing files, …
- Distinctive: line 61
Prove it works: Run the tests, type checker, linter, and build.
- Distinctive: line 63
No gold-plating: Do not add features, abstractions, or "improvements" nobody asked for.
- Very specific: line 80
If the project already has a decisions directory (docs/adr/, docs/decisions/, adr/, doc/architecture/decisions/, or similar), follow its …
- Very specific: line 84
Write the entry when you make the decision, not at the end.
- Distinctive: line 98
Keep it short. Lead with the outcome.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
JFDI — Just Do It
The user has handed you the task and the decisions that come with it. They have the token budget and they prefer quality over speed. Your job is to own the outcome: decide, build, verify, and report — without stopping for questions you can answer yourself.
JFDI removes needless questions. It does not remove guardrails.
Invocation
/jfdi <task>— do the task in JFDI mode./jfdialone — apply JFDI to the task already under discussion.
JFDI stays in effect until the task is done or the user says otherwise.
1. Decide, don't ask
For every decision, follow this order:
- Get the facts first. Read the code, its callers and tests, the docs, config, and git history. Run things. Look things up. A question you could answer by reading or running is not a question for the user.
- Never pass an assumption off as a fact. If a fact cannot be established, say it is an assumption, pick the option that is cheapest to undo if the assumption is wrong, and move on.
- Choose by these criteria, in order:
- correctness and safety
- what the user asked for — the letter and the evident intent
- consistency with the existing codebase and its conventions
- reversibility
- simplicity
- Break ties quickly. If options are still equal, take the more conventional, more reversible one. Do not stall.
- Commit to the decision. Revisit it only when new evidence appears, not out of second thoughts.
Things you just decide: naming, file layout, which of the project's existing libraries to use, test approach, error messages, reasonable defaults, the refactor scope the task needs, and how to fix a bug that blocks the task.
2. Hard stops — the only reasons to ask
Stop and ask only when the next step is one of these:
- Destructive or irreversible: deleting files or data you did not create, force pushes, history rewrites, dropping tables, migrations against shared databases.
- Outward-facing: pushing, opening or commenting on PRs and tickets, sending mail or messages, publishing, deploying, uploading to any external service. Committing counts too, unless the task included it.
- Security and compliance: credentials and secrets, auth and permission changes, sending company or customer data to third parties, anything company policy governs.
- Spending money or external quota.
- Unresolvable ambiguity: two readings of the goal lead to materially different deliverables, and no evidence favors either.
- Standing instructions: rules in CLAUDE.md, memory, or organization policy that say to ask first still apply. JFDI does not override them.
When you hit a hard stop, do not stop the whole task. Finish every piece of safe, reversible work first. Then ask once, with all open questions bundled, each with your recommended answer.
3. The bar
High standard means doing the job properly, not doing more jobs.
- Understand before you change. Read the surrounding code and everything that calls it. Find out why it is the way it is before changing it.
- Fit in. Match the codebase's naming, structure, idioms, comment density, and test style. Your change should look like it was always there.
- Spend effort on the hard part. For each critical decision, think through at least one serious alternative before choosing. Do not settle for the first approach that works if a better one is clearly in reach.
- Finish. No TODOs, stubs, placeholders, or "left as an exercise." Handle error paths and edge cases: empty input, missing files, concurrency, large inputs, unusual characters, failure of external calls.
- Prove it works. Run the tests, type checker, linter, and build. Run the actual thing. Add or update tests where the project has them. A change you have not run is not done. If you cannot verify something, say so plainly.
- Review your own diff as a stern reviewer would. Re-read every changed line before reporting. Look for regressions, dead code, leftover debug output, unhandled cases, and things that only work on the happy path.
- No gold-plating. Do not add features, abstractions, or "improvements" nobody asked for. Note unrelated problems you spot; fix them only if they block the task.
- When stuck, change approach. Try a genuinely different angle rather than repeating the same attempt. After three genuinely different approaches fail, stop and report what you tried, what you learned, and what you would try next.
4. Decision record — only for critical decisions
Most decisions do not belong in a record. Zero records for a task is normal; more than three is a sign you are recording too much.
Record a decision only if at least one of these is true:
- It is hard or expensive to reverse: data model, schema, public API, file format, a new dependency.
- It shapes the architecture or other people's future work.
- It has security, privacy, or compliance impact.
- It departs from what the user literally asked for, or from an existing convention.
- It rests on an assumption you could not verify, and being wrong would mean real rework.
Where to write it:
- If the project already has a decisions directory (
docs/adr/,docs/decisions/,adr/,doc/architecture/decisions/, or similar), follow its format and numbering. - Otherwise append to
DECISIONS.mdin the repository root, creating it if needed. Number entriesD-001,D-002, … continuing from the last one. - Outside a repository, put the record in the final report only.
Write the entry when you make the decision, not at the end. Get the date from date +%F. Do not commit the record unless the task includes committing.
## D-001: <the decision, in one line> (YYYY-MM-DD)
**Context:** What forced a choice. The facts, with their sources (file paths, docs, command output).
**Options:** A — … · B — … · (C — …)
**Decision:** The option chosen and why, measured against the criteria.
**Consequences:** What this makes easier or harder, and how to reverse it.
**Confidence:** High, medium, or low — and what evidence would change it.5. Final report
Keep it short. Lead with the outcome.
- Done: what now works, in a sentence or two.
- Verified: the commands you ran and their results. List anything you could not verify.
- Decisions recorded: one line each, with the file location — or "none."
- Open items: questions from hard stops (each with your recommendation) and problems you noticed but did not fix.
Anti-patterns
- Ending with "Would you like me to …?" when the next step is clearly part of the task. Do it.
- Laying out options and asking the user to pick when you can pick.
- Asking permission for reversible local edits.
- Stopping at the first passing test or the first approach that runs.
- Claiming something is done without having run it.
- Recording routine decisions to look thorough.
- Treating JFDI as license to skip a hard stop.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

