Spec Impl logo

Spec Impl

Community
Klerith
spec-impl

Implements an approved spec. Validates that the state means "Approved" (in any language), creates a git branch named after the spec, switches to it, and starts the implementation step by step with pauses to review diffs.

Overview

PublisherKlerith
Repositoryfernando-skills
Skill namespec-impl
Stars
329
Forks
55
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by Klerith on GitHub. Read the source before you install it.

Installation

Install the Spec Impl AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Klerith/fernando-skills/tree/main/skills/engineering/spec-impl
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Klerith/fernando-skills.git /tmp/fernando-skills
mkdir -p .claude/skills
cp -r /tmp/fernando-skills/skills/engineering/spec-impl .claude/skills/spec-impl
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Spec Impl in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Spec Impl on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Spec Impl is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

/spec-impl — Implementer of approved specs

Session context

Current repository state: !git status --short

Current branch: !git branch --show-current

Specs available in this folder: !ls specs/ 2>/dev/null || echo "The specs/ folder does not exist"

Branch-creation config: !cat specs/.spec-config.yml 2>/dev/null || echo "AutoCreateBranch: true (default, no config file)"


Instructions

Follow these four phases in strict order. Do not advance to the next phase if the previous one did not complete correctly.


Phase 1 — Identify the spec

The received argument is: $ARGUMENTS

If $ARGUMENTS is empty:

  • List the files available in specs/ (you already have them above).
  • Ask the user to specify the exact name of the spec.
  • Stop and wait for an answer. Do not continue.

If $ARGUMENTS has a value:

  • Look for the file in specs/. The user may have written the full name (01-mvp-arkanoid), only the number (01), or only the slug (mvp-arkanoid). Try to find the correct file in any of those cases.
  • If you do not find the file, show the available specs and ask the user to correct the name.
  • If you do find it, continue to Phase 2.

Phase 2 — Validate the spec's state

Read the spec file you located in Phase 1 using the Read tool or cat.

In the file's contents, look for the line that contains the spec's state. The header label is typically **Status:** (English) or **Estado:** (Spanish), but it may use any language. Match by position (status line near the top of the spec) and by the surrounding state machine, not by the exact label.

Absolute rule: You can only continue if the state means "Approved" — regardless of the language used.

Treat any of the following (and their equivalents in other languages) as the Approved state and continue:

  • English: Approved
  • Spanish: Aprobado
  • Portuguese: Aprovado
  • French: Approuvé
  • German: Genehmigt
  • Italian: Approvato
  • …or any other language's word that clearly means "approved"

Anything else (Draft / Borrador, In review / En revisión, Implemented / Implementado, Obsolete / Obsoleto, or any unrecognized value) means stop and show the error message below.

State categoryExamples (any language)Action
ApprovedApproved, Aprobado, Aprovado, Approuvé, …Continue to Phase 3.
DraftDraft, Borrador, …Stop. Show the error message below.
In reviewIn review, En revisión, …Stop. Show the error message below.
ImplementedImplemented, Implementado, …Stop. Show the error message below.
ObsoleteObsolete, Obsoleto, …Stop. Show the error message below.
State line not found / unrecognized value—Stop. The file does not follow the expected format. Tell this to the user.

If you are unsure whether a value means "approved", do not assume. Stop and ask the user to clarify or to update the spec to the canonical wording.

Standard error message when the state does not mean Approved:

❌ I cannot implement this spec.

Current state: [STATE FOUND]
I only work with specs whose state means "Approved" (e.g. `Approved`, `Aprobado`,
or the equivalent in another language).

To continue you have two options:
  1. If the spec is ready to be implemented, open it and change the state
     to "Approved" (or the equivalent term your team uses) manually.
     That change is made by the human, not the agent.
  2. If the spec still needs work, use /spec [name] to resume it.

Do not offer alternatives, do not suggest "I can still start if you want". The block is intentional.


Phase 3 — Create the git branch and switch to it

Once you have confirmed the state means Approved:

  1. Check the working tree first. Look at the git status --short output in the session context above. If it is not empty, stop and show the pending changes, then ask:

    ⚠️ There are uncommitted changes in the working tree.
    Switching branches would carry them over. What do you want to do?
      1. Commit or stash them yourself, then re-run this command  (recommended)
      2. Continue anyway — the changes travel to the new branch

    Wait for the answer. Do not stash or commit on the user's behalf unless they explicitly ask for it. If the working tree is clean, skip straight to step 1 without mentioning it.

  2. Derive the branch name from the spec file's full name, without the extension. Format: spec-NN-slug. Examples:

    • 01-mvp-arkanoid.md → branch spec-01-mvp-arkanoid
    • 02-powerups.md → branch spec-02-powerups
  3. Read the AutoCreateBranch flag from the Branch-creation config shown in the session context above.

    • If the config file does not exist, the value is missing, or the value is unrecognized → treat it as true (the default).
    • Only an explicit false (in any capitalization) disables automatic branch creation.

    If AutoCreateBranch is true (default): proceed without asking.

    • If the branch does not exist: create it with git checkout -b spec-NN-slug.
    • If it already exists: this means previous work is being resumed. Switch to it, read git log --oneline on the branch, and tell the user which steps of the plan already look done and which step you propose to resume from. Wait for confirmation on the resume point before implementing anything.
    • In both cases: switch to the branch with git checkout spec-NN-slug and confirm the change was successful before continuing.

    If AutoCreateBranch is false: ask before touching git. Show:

    AutoCreateBranch is set to false.
    Create and switch to the branch spec-NN-slug? [y/N]
    • If the user answers yes: create/switch to the branch exactly as in the true case above.
    • If the user answers no or leaves it empty: do not create any branch. Tell the user you will implement on the current branch (the one shown in the session context above) and ask for explicit confirmation to continue there. Do not improvise — wait for the answer.
  4. Visually confirm to the user the spec is ready and which branch is active:

    ✅ Ready to implement.
    
    Spec:   specs/NN-slug.md
    Branch: spec-NN-slug  (active)   (← or the current branch, if no new branch was created)
    State:  Approved   (← echo back the actual value found in the spec)
  5. Do not start implementing yet. First show the spec summary to the user so they have it fresh. Extract and show:

    • The objective (the line after **Objective:** / **Objetivo:** / equivalent label).
    • The scope (the ## Scope / ## Alcance / equivalent section).
    • The implementation plan (the section with the numbered steps — ## Implementation plan / ## Plan de implementación / equivalent).
    • The acceptance criteria (the checklist — ## Acceptance criteria / ## Criterios de aceptación / equivalent).

Match section headings by meaning, not by exact wording — the spec may be authored in any language.


Phase 4 — Implement step by step

After showing the spec summary, tell the user:

I am going to implement the spec following the implementation plan exactly.
I will pause after each step so you can review the diff.

Shall we start with Step 1?

Wait for explicit confirmation ("yes", "go ahead", "go", or equivalent). Do not start without it.

Once confirmed, follow these rules during the entire implementation:

Never commit automatically. Not per step, not at the end. You write the code and show the diff; committing is the user's decision and the user's command. Only commit if they explicitly ask you to.

One rule above all: implement what the spec says. If something in the spec looks suboptimal to you, mention it as an observation but implement what was agreed. Changes to the spec go into the spec, not into the code by surprise.

Work rhythm:

  • Implement one step of the plan.
  • Show a summary of which files you touched and what you did.
  • Say: Step N completed. Could you review the diff and let me know if I continue with Step N+1?
  • Wait for confirmation before continuing.

If during the implementation you find an ambiguity the spec does not resolve:

  • Stop.
  • Describe the ambiguity exactly.
  • Present two or three concrete options.
  • Wait for the user's decision.
  • Do not improvise.

If the user asks for something that is out of the spec's scope:

  • Remind them that it is out of this spec's scope.
  • Suggest noting it down for the next spec.
  • Do not implement it on this branch.

When finishing the last step:

✅ All steps of the plan are implemented.

Next step: verify the spec's acceptance criteria one by one.
If they all pass, update the spec's state to "Implemented" (or the equivalent
in your repo's language) and make the final commit before merging this branch.

Summary of expected behavior

/spec-impl 01-mvp-arkanoid

  Phase 1  →  Finds specs/01-mvp-arkanoid.md
  Phase 2  →  Reads the state → "Approved" (or "Aprobado", etc.) → ✅ continues
  Phase 3  →  git checkout -b spec-01-mvp-arkanoid → git checkout spec-01-mvp-arkanoid
              Shows objective, scope, plan and criteria
  Phase 4  →  Implements step by step with pauses
              Ends by reminding to verify the acceptance criteria

/spec-impl 02-powerups  (state: Draft / Borrador)

  Phase 1  →  Finds specs/02-powerups.md
  Phase 2  →  Reads the state → "Draft" → ❌ stops
              Shows the standard error message
              Does not create branch, does not touch code

Branch creation is controlled by the AutoCreateBranch flag in specs/.spec-config.yml. It defaults to true (create the branch automatically, as shown above). Set it to false to make Phase 3 ask [y/N] before creating the branch.

Frequently asked questions

What does the Spec Impl AI skill do?

Implements an approved spec. Validates that the state means "Approved" (in any language), creates a git branch named after the spec, switches to it, and starts the implementation step by step with pauses to review diffs.

Why use Spec Impl on TypingMind?

Because you install it once and use it with any model. Spec Impl is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Spec Impl in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Klerith/fernando-skills/tree/main/skills/engineering/spec-impl. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Spec Impl?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Spec Impl?

As many as you like. As long as a model supports skills, you can use Spec Impl with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Spec Impl AI skill free?

Yes. It is published on GitHub by Klerith under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇