⏳ This skill is pending AI review.
Scores will appear once the review pipeline completes.
add-didactic-comments
Comment tagged files so the user learns the APIs they are studying, with a doc link in every comment.
Choose how to use this skill
You do not need every option. Choose the path your AI client supports. The stable page stays the same; versioned files are immutable.
1. Native installer
This listing has no registered native installer command. Use the complete package or source fallback below, depending on what your client supports.
Do not guess an installer command or replace an existing version without reviewing the diff.
2. Complete package recommended
Download the ZIP when available. It includes SKILL.md plus the references, security notes and version metadata.
No complete ProSkills package is published for this listing yet.3. Prompt-only
Copy the prompt above when the agent can read the stable page or when you want to adopt the workflow without installing a skill.
Need only the instruction file?
Download SKILL.md only if your client requires a single file. The complete ZIP is safer for a full installation because it preserves the references and release context.
No path installs or executes anything by itself. Your agent still needs access to the project files. Before updating, compare the installed version and review the diff.
// RATINGS
// README
No-bs skills
These agent skills are meant for pragmatic programmers. I actually use them and I'm actively improving them.
Why this repo?
- LLM answers are packed with buzzwords, and the one useful sentence is a needle in a haystack. I want the agent to do the work I assigned. The implications and the consequences are mine to reason about, until a real AGI shows up and it does me dirty.
- I don't like the shape the human-agent interaction usually takes: human stops thinking -> prompt -> the agent's plan (and no matter how much context engineering you do, unless you are building a calculator that plan hides serious holes) -> 500 to 1000+ lines of horrifying code.
Which skill should I pick?
I...
- Know how to code but I'm lazy, or I want to iterate fast $\Rightarrow$
fill-the-gaps - Don't know how to code something but I'm eager to learn $\Rightarrow$
add-didactic-comments - Want a plan I can act on, or a straight explanation of a codebase $\Rightarrow$
no-bs-answer - Have one narrow question and want one narrow answer $\Rightarrow$
answer-as-type - Want the agent to execute and shut up $\Rightarrow$
just-do-it - Don't want to take the agent's word for it $\Rightarrow$
back-your-claims
Install
The skills follow the Agent Skills format. Each one is a folder
under skills/.
Any agent, with the skills CLI
npx skills add MK27MK/no-bs-skills
Claude Code, as a plugin
Register this repo as a plugin marketplace, then install the plugin from it:
/plugin marketplace add MK27MK/no-bs-skills
/plugin install no-bs-skills@no-bs-skills
Run /reload-plugins if the install summary asks for it. The plugin puts the skills under
its name:
/no-bs-skills:no-bs-answer how does the auth middleware decide who is logged in?
By hand
Copy the folders you want from skills/ into the folder your agent reads:
| Agent | Project | User |
|---|---|---|
| Claude Code | .claude/skills/ | ~/.claude/skills/ |
| Codex | .agents/skills/ | ~/.agents/skills/ |
| Cursor | .agents/skills/ or .cursor/skills/ | ~/.agents/skills/ or ~/.cursor/skills/ |
| OpenCode | .agents/skills/ or .opencode/skills/ | ~/.agents/skills/ or ~/.config/opencode/skills/ |
The paths come from the docs of Codex, Cursor, and OpenCode.
Skills
Coding skills
fill-the-gaps
Use this to leave work half-written on purpose. Bare signatures, empty
classes, pseudo code, deleted calls, and AI TODO / AI FIXME / AI NOTE
markers all count as instructions: you write the code that says what the
software must be, and the agent writes the code that makes it run.
This skill takes two optional arguments, both y (yes) by default:
lock_definitions: the agent adds no function, class, or method. It fills the gaps with the definitions the tree already holds, and deletes any call whose definition is missing.lock_names: the agent keeps every name as you wrote it, even one it thinks is wrong.
Example: A feature or a project from scratch
You sketch the shape: the signatures you want to call, the empty classes that name the concepts, a few lines of pseudo code for the tricky part. Then you run the skill with both locks on. You get an implementation that matches the shape you drew.
Advantages: at modeling a domain and shaping an architecture, the pragmatic programmer beats even a frontier model. The sketch is the guard-rail: you keep the decisions you are better at, and the agent gets the mechanical work it is better at.
Example: Refactor
You are dealing with badly written code. You delete what has to go, drop an
AI FIXME [optional_details]comment on what stays but is wrong, and leave the callers pointing at nothing. Run withlock_definitions: nwhen the rewrite needs more pieces, andlock_names: nwhen the old names are part of the problem.
add-didactic-comments
Use this while learning an API. Point the agent at some files, name the topics
(TanStack Query, Pandas, ...), and it comments every call belonging to those topics,
saying what the call does to your data and linking the docs for the exact symbol.
It touches comments only, and it stops if you have unstaged changes.
No-edit skills
These skills answer and leave the files as they are. The skill text asks for this. Nothing takes the edit tools away.
answer-as-type
Ask the agent precise questions that can be answered as if they were functions. The agent sticks to the "data type" of the answer and says nothing more.
Useful when you have a non-trivial question that still has a simple answer.
Name the return type with the first word of the request: bool, int, float, str,
list, or set. Leave it out and the agent infers it from the question. A type you name is
final: int on a question about items returns how many they are.
Example: Picking a license
The agent had reminded me the repo was missing a license, so I asked:
me: "/no-bs-skills:answer-as-type str which license do I pick?" agent: "MIT"
Example from the tests: a type you name
me: "int What is the HTTP timeout in src/shop/client.py?" agent without the skill: "The HTTP timeout is **10 seconds** — `TIMEOUT_SECONDS = 10` at `src/shop/client.py:3`, used in the `httpx.get` call at line 7." agent with the skill: "10"
no-bs-answer
The actual information in an answer is too often buried under lines and lines of AI padding. You have a question with a practical answer, and you don't want to wade through remarks built on assumptions, which are built on guesses, which are built on nothing at all.
Use this skill to:
- Get a step-by-step plan: you want to fix a bug or implement something.
- Ask about a codebase: here the agent replies with a plain explanation and skips the plan.
Behavior skills
These skills change how the agent works and answers, whatever the task is.
just-do-it
Use this when you know exactly what you want. The agent does what you asked,
nothing else, makes sure the change works, and answers Done. with no remarks attached.
back-your-claims
Use this when the answer matters. Every claim the agent makes must be followed by a link (on the web) or a clickable path (local) to a reliable, human-written resource. No assumptions.
Tests
Three skills have tests: answer-as-type, fill-the-gaps, and just-do-it. The design is
34 tasks x 3 runs x 2 arms = 204 runs:
answer-as-type: 10 tasks x 3 runs x 2 arms = 60 runs.fill-the-gaps: 12 tasks (10 tasks and 2 controls) x 3 runs x 2 arms = 72 runs.just-do-it: 12 tasks (10 tasks and 2 controls) x 3 runs x 2 arms = 72 runs.
Every run is headless Claude Code (claude -p, model claude-sonnet-5) in a throwaway git
repository. The arm with the skill holds it in .claude/skills/, the arm without it is an
identical repository. Both arms get the same request. The unit is a run, so 9/30 means 9
of 30 runs: 10 tasks x 3 runs, in one arm.
| Skill | Tasks | A run fails when | How it is checked | Failed without the skill | Failed with the skill |
|---|---|---|---|---|---|
answer-as-type, type inferred | 5 | The reply is not the bare value in the expected type, or the value is wrong | The skill's check-value.py and an exact expected value | 15/15 | 0/15 |
answer-as-type, type named in the request | 5 | Same | Same | 15/15 | 0/15 |
fill-the-gaps | 10 | The agent adds, renames, or brings bac |
// HOW IT'S BUILT
KEY FILES