Security Review
bobmatnyc/claude-mpm
Security review gate for MCP server installations. An agent skill from bobmatnyc/claude-mpm.
A skill your agent uses for ANY new software project from idea to release — websites, WordPress/WooCommerce plugins, MCP servers, web apps, components, or libraries.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add joseconti/declaracion-renta-espana --skill keel -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install joseconti/declaracion-renta-espana keel --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/joseconti/declaracion-renta-espana.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/keel .claude/skills/keel && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "keel" agent skill from https://github.com/joseconti/declaracion-renta-espana/tree/main/.claude/skills/keel into .claude/skills/keel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "keel", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/joseconti/declaracion-renta-espana/tree/main/.claude/skills/keelType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add joseconti/declaracion-renta-espana --skill keel -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install joseconti/declaracion-renta-espana keel --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joseconti/declaracion-renta-espana.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/keel .agents/skills/keel && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "keel" agent skill from https://github.com/joseconti/declaracion-renta-espana/tree/main/.claude/skills/keel into .agents/skills/keel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "keel", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joseconti/declaracion-renta-espana --skill keel -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install joseconti/declaracion-renta-espana keel --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joseconti/declaracion-renta-espana.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/keel .cursor/skills/keel && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "keel" agent skill from https://github.com/joseconti/declaracion-renta-espana/tree/main/.claude/skills/keel into .cursor/skills/keel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "keel", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/joseconti/declaracion-renta-espana.git --path .claude/skills/keel--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add joseconti/declaracion-renta-espana --skill keel -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install joseconti/declaracion-renta-espana keel --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joseconti/declaracion-renta-espana.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/keel .gemini/skills/keel && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "keel" agent skill from https://github.com/joseconti/declaracion-renta-espana/tree/main/.claude/skills/keel into .gemini/skills/keel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "keel", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install joseconti/declaracion-renta-espana keelInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add joseconti/declaracion-renta-espana --skill keel -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/joseconti/declaracion-renta-espana.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/keel .github/skills/keel && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "keel" agent skill from https://github.com/joseconti/declaracion-renta-espana/tree/main/.claude/skills/keel into .github/skills/keel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "keel", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joseconti/declaracion-renta-espana --skill keel -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install joseconti/declaracion-renta-espana keel --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joseconti/declaracion-renta-espana.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/keel .opencode/skills/keel && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "keel" agent skill from https://github.com/joseconti/declaracion-renta-espana/tree/main/.claude/skills/keel into .opencode/skills/keel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "keel", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
keelA skill your agent uses for ANY new software project from idea to release — websites, WordPress/WooCommerce plugins, MCP servers, web apps, components, or libraries.
Keel is an agent skill from joseconti/declaracion-renta-espana. Use this skill for ANY new software project from idea to release — websites, WordPress/WooCommerce plugins, MCP servers, web apps, components, or libraries. Multi-phase workflow: discovery with competitive scan, functional spec with flows, design handoff to Claude Design, faithful build with zero deviation, development with test points and a real-testing playground, full docs/, per-platform security, non-negotiable accessibility, release hygiene, AI-time estimates with client budgets, and a forge issue log…
Its SKILL.md is about 11k tokens, which your agent loads only when the skill is triggered. The skill folder holds 32 other files, including reference files (for example `CHANGELOG.md`, `references/accessibility.md` and `references/adoption.md`).
It sits in Security, covering Security review and MCP servers. It works with Model Context Protocol, GitHub, GitLab and WooCommerce. The repository describes itself as: SKILL para realizar la declaración de la Renta española 2025 (Junio 2026). The licence is GPL-3.0-or-later.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d60ef59. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comapi.github.comraw.githubusercontent.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Keel loads about 11k tokens when it runs, and up to ~94k if it reads all its reference files. Until then it costs about 257 tokens; SKILL.md has 5,807 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
*`, `*.pem`, `*.key`, `*.p12`/`*.pfx`, `id_rsa*`, `*credentials*`, `*secret*`, `wp-config.php` with real values, databasAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from joseconti/declaracion-renta-espana at commit d60ef59, republished under its GPL-3.0-or-later licence (© joseconti). 5,807 words, ~10,538 tokens.
.claude/skills/keel/SKILL.md (or your agent's skills folder). This skill also uses 31 other files; get the full folder from GitHub.Keel v1.11.0 — Licensed under GPL-3.0-or-later. Keel is the structural backbone laid down first, on which the whole project is built.
English is the most token-efficient language for an LLM: the same content in Spanish or another Latin-script language costs roughly 15–30% more tokens (non-Latin scripts, far more), and Keel re-reads its living state (docs/PROGRESS.md, docs/decisions.md, docs/lessons-learned.md) in every session, so any per-word overhead compounds for the entire life of the project.
Therefore everything Keel creates is written in English by default — every docs/ artifact (discovery, specs, progress, decisions, lessons learned, architecture, API reference, playground instructions), every continuation prompt for a new chat, every prompt or brief handed to Claude Code or Claude Design (design briefs, design requests, build specs), every template instance, report, commit message, and code comment — in addition to the product output itself, which is already English-based per "Output language & internationalization" below.
Announce it up front. At the start of every new project (and every adoption), tell the user in one line: everything Keel creates will be in English to minimize token consumption and therefore cost; if they prefer another language for the docs or any other artifact set, they only have to say so, knowing that it will increase token usage and spend. If the user chooses another language, honor it, record it in the project card and docs/decisions.md with the trade-off acknowledged, and apply it consistently from then on.
Existing projects whose docs are in another language (resume or adoption): ask the user once whether they want the existing documentation translated to English, stating the token/cost benefit in one line. If yes, translate it all and record the switch in decisions.md; if no, record the choice, keep that language consistently, and do not ask again.
This is NOT about the conversation. Keep talking to the user in whatever language the user writes (usually Spanish), exactly as always — the English default governs only what Keel creates. And it never removes product locales: what end users see follows the Phase 1 §6 i18n decisions; the product's translations are never dropped to save tokens.
If the user asks which version of Keel they have or are using (e.g. "what version is this skill", "which Keel version do I have"), state it plainly from the frontmatter: "You're using Keel v1.11.0." Keep the version in the frontmatter (metadata.version), this line, and CHANGELOG.md in sync whenever the skill is updated; the frontmatter is the source of truth.
Keel is distributed from https://github.com/joseconti/keel-skill (releases: https://github.com/joseconti/keel-skill/releases). Once per session, when Keel is invoked and before the entry-mode decision, check whether a newer release exists. Reading this section IS the cue: run the check the moment you read it, before any project work. In a Keel project's repo the CLAUDE.md lock makes this its step 1 — the full read of this SKILL.md comes BEFORE even the state files, at every session start — precisely so this check runs in every session, whether or not the skill auto-triggered. The check is best-effort and must never block, delay, or interrupt the work: if any step fails (no network, no fetch mechanism, API error), skip silently, continue with the running version, and do not retry in this session.
git ls-remote --tags https://github.com/joseconti/keel-skill.git → take the highest semver tag. Strip the leading v and compare segment by segment as numbers (1.10.0 > 1.9.0) — never as strings; ignore tags that are not vX.Y.Z. Fallbacks, in order: GET https://api.github.com/repos/joseconti/keel-skill/releases/latest (field tag_name) with a web-fetch tool, or fetch the releases page. If the environment provides no mechanism at all, skip..claude/skills/keel/ (each copy's frontmatter metadata.version — the source of truth). A copy can be behind even when the running one is current — in Cowork it is common that the app install is up to date while the opened project's embedded copy is not; that embedded copy must still be updated. All copies at the latest version → say nothing and continue.~/.claude/skills/keel/, or app-managed skill storage) and the project's embedded copy (.claude/skills/keel/).git clone --depth 1 --branch vX.Y.Z https://github.com/joseconti/keel-skill.git or the tag archive https://github.com/joseconti/keel-skill/archive/refs/tags/vX.Y.Z.tar.gz; if an already-current local copy exists (e.g. the app install is at the latest version and only the project's embedded copy is behind), copy from it instead of downloading, per the version-sync rule in references/project-state.md — and replace that copy's ENTIRE tree with the new keel/ directory following the verified full-copy protocol in references/project-state.md ("Portability"): whole tree, verify file-for-file against the source, retry once; if it still fails, abort that copy's update (never the session), leave it intact, and treat it under the inform path below. After a verified replacement: summarize the improvements to the user from the new CHANGELOG.md (every entry after the previously running version), re-read the new SKILL.md and the current phase's reference from the new copy (the copies in context belong to the old version), and continue under the new version. When the session is working inside a Keel project, then run the post-update reconciliation (references/project-state.md, "Post-update reconciliation") so the project itself catches up with what the new version introduces — new required files or directories, new project-card lines, lock-block changes, never-asked questions — tracked by the project card's Keel baseline: line.CHANGELOG.md entries after the running version — e.g. from https://raw.githubusercontent.com/joseconti/keel-skill/main/keel/CHANGELOG.md; if unreachable, point to the release notes on the releases page), and how to update it themselves — the app-installed skill is the user's to update (repository INSTALL.md, section "Updating"). If the project's embedded copy WAS updated and only the app/environment install could not be, say exactly that — the project is already current; updating the installed skill in the app is what remains. Then continue normally and do not repeat the notice this session.Lock freshness (same moment, every session inside a Keel project). After the update check, verify the project's CLAUDE.md Keel block is current by its stamp alone — a one-line look, never a content comparison: the KEEL:BEGIN delimiter carries the version of the Keel that last wrote the block (KEEL:BEGIN — vX.Y.Z do not remove: …). Stamp equal to the running version → current, done. Stamp different or missing (blocks from before v1.11.0 carry no stamp; match delimiters by the KEEL:BEGIN prefix, never by exact text) → refresh: rewrite the block between the delimiters from the canonical copy in references/project-state.md ("Portability" §1), restamped with the running version, with the user's OK (mirror AGENTS.md if the project keeps one). Never touch anything outside the delimiters. This is what keeps the always-loaded CLAUDE.md rules from drifting behind the skill.
Overwriting the skill is safe: Keel is stateless — project artifacts live in each project's docs/, never in the skill folder (see the repository's INSTALL.md). Installing an official newer release is an installation, not an authoring edit: it does not fall under the version change policy below, which governs hand-editing version strings in this copy.
This rule is unbreakable. There are no exceptions, no edge cases, no judgment calls. It overrides every other instinct or inference the assistant might have about how version numbers "should" evolve based on the scale of the edit.
The Keel version — in metadata.version in the frontmatter, in the heading line above, and in CHANGELOG.md — must NEVER be changed unless the user has explicitly instructed it in the current conversation (e.g. "bump to 1.1.0", "release 1.0.1", "this is version 2", "tag a new minor release"). An explicit "yes" to a direct question about a specific version also counts as explicit instruction. Nothing else does.
What does NOT count as authorisation to change the version:
Required behavior:
metadata.version, the heading version line, and CHANGELOG.md untouched. Do not add a new changelog entry on your own initiative.If at any point the assistant is about to write a version number that the user did not explicitly authorise in the current conversation, the assistant must stop and ask. This rule is not contextual, not negotiable, and not overridable by other instructions in the same conversation unless those instructions are themselves explicit user authorisation for a specific version.
Scope note: this rule governs Keel's own version (this skill's files). The versions of projects built with Keel follow their own project rules (Phase 7 versioning) and are not restricted by this section. Likewise, replacing the whole running copy with an official newer release per the update check above is an installation, not a version edit — it needs no bump authorisation.
The user builds many projects (WordPress/WooCommerce plugins, MCP servers, web apps, components, libraries) and was repeating the same standing requirements every time: document everything, security per platform, full API/class/function docs in a docs/ dir, a design handoff that doesn't waste tokens, a build that stays faithful to the design, proper git/package hygiene. This skill encodes that whole process once. Follow the phases in order; load each phase's reference file only when you reach it (progressive disclosure — do not pull every reference into context at once).
docs/PROGRESS.md, docs/decisions.md, and docs/lessons-learned.md are created the moment Phase 1 starts (per references/project-state.md) and updated at the moment of every change — not at phase ends. A fresh chat resumes from state, never from re-scanning code or re-asking the user. Decisions recorded in decisions.md are never re-opened by the assistant on its own initiative.docs/PROGRESS.md, the technical plan's code map, docs/architecture.md, and docs/api/INDEX.md — then open only the specific file needed. Read each static reference once per session, in the fixed order defined in references/project-state.md; never re-read files already in context. This keeps sessions cheap, deterministic, and prompt-cache-friendly.docs/. Documentation is not a final-phase afterthought; each phase contributes its artifacts to docs/.references/handoff-contract.md..gitignore exclusion, untracking, history purge plus credential rotation if it was ever pushed) before anything is committed. See "Confidential data never reaches Git" below.references/accessibility.md.docs/, code comments, UI copy, commit messages — is spelled and punctuated perfectly. In Spanish this means every ñ, every accent/tilde (á é í ó ú ü) and every opening ¿/¡ is present and correct, with zero spelling or grammatical errors. This is a hard contract, not a preference: dropping accents or the ñ, or writing "espanol"/"anadir"/"informacion", is a defect to be fixed like any other. See "Writing quality — perfect orthography" below.docs/api/ and/or docs/reference/ at the same test point where it is built. The slice does not pass its Phase 5 test point until its docs are written and its example actually runs. Phase 6 consolidates documentation; it does not create it from scratch.docs/playground.md.references/estimation-budget.md.docs/issues.md records the full picture at the moment it changes: the inventory of what exists, what was resolved and exactly HOW (diagnosis, resolution, commits, verification), and what remains pending. If a problem surfaces later, what was done is on record — never reconstructed from memory. Template and rules in references/project-state.md.Work through these in order. The reference file for a phase is the authoritative instruction set for it — read it when you enter the phase.
| Phase | Purpose | Reference to load |
|---|---|---|
| 1. Discovery | Competitive scan first, then idea, feature discussion, project type, constraints, preliminary estimate | references/phase-1-discovery.md |
| 2. Functional spec | Flows, requirements, scope, technical plan (stack/architecture/conventions), what needs design, firm estimate & client budget | references/phase-2-functional-spec.md |
| 3. Design handoff | What to tell Design + the files Design must read/return | references/phase-3-design-handoff.md |
| 4. Faithful build | Audit Design's return, consolidate spec, build with zero deviation, guided external setup | references/phase-4-faithful-build.md |
| 5. Development | How to build, with test points throughout | references/phase-5-development.md |
| 6. Documentation | docs/: API, classes, functions, usage, architecture | references/phase-6-documentation.md |
| 7. Release | git hygiene, package hygiene, release prep | references/phase-7-release.md |
| 8. Project website (conditional) | study the product, plan & build its site: site type, sections, domain, design direction, vanilla build, self-hosted fonts, product screenshots, SEO + AEO, launch | references/phase-8-website.md |
Phases 3 and 4 are skipped only if Phase 2 concludes the project genuinely needs no UI/design. If there is any UI, they are mandatory.
Phase 8 is conditional: it runs only if Phase 1 recorded website intent (yes). It's normally done after Phase 7 (the release reminds the user) but can be run whenever they're ready. It is not a separate skill — it reuses Keel's own Phases 3–7 treating the site as a "website" project, and loads its own phase-8-* references for the web-specific depth. If Phase 1 said no website, skip Phase 8 entirely.
Security is cross-cutting: the moment the project type is fixed in Phase 1, also load the matching profile from references/security/ and keep it in mind through every later phase. See "Security routing" below.
After Phase 1 sets the project type, load exactly one profile (don't load all of them):
| Project type | Security profile |
|---|---|
| WordPress plugin / WooCommerce extension | references/security/wordpress.md |
| Web app (SPA, API backend, hosted service) | references/security/web-app.md |
| MCP server | references/security/mcp-server.md |
| Reusable component / library / package | references/security/library-component.md |
If a project spans types (e.g. a WordPress plugin that ships an MCP server), load both relevant profiles and apply the stricter rule on any conflict.
Before EVERY commit and EVERY push — test points and sprint closes (Phase 5), the release (Phase 7), website deploys (Phase 8), adoption's first commit, any ad-hoc commit — check that nothing confidential is about to enter the repository. This is not a Phase 7 step: it applies from the project's very first commit, in every environment.
.env*, *.pem, *.key, *.p12/*.pfx, id_rsa*, *credentials*, *secret*, wp-config.php with real values, database dumps and exports (*.sql, *.sqlite), backups, local config carrying tokens.-----BEGIN ... PRIVATE KEY-----), API keys and tokens (api+_key assignments, Bearer ..., provider-prefixed keys such as AKIA..., sk-..., ghp_...), passwords in config, OAuth client secrets, payment-gateway merchant keys (e.g. a Redsys SHA-256 merchant key), license keys, and real personal or customer data (names, emails, orders) in fixtures, seeds, logs, or dumps.git status / git diff --staged plus grep patterns always; a dedicated scanner (gitleaks, trufflehog) when available — helpful, never required..gitignore so it can never reach the repository; commit only once the exclusion is in place.git rm --cached + .gitignore, then commit the removal.git filter-repo / BFG) AND the exposed credential treated as compromised and rotated. Say this explicitly and guide the user through it if they want.docs/decisions.md and proceed. Without that explicit confirmation, the file does not go in. Obvious placeholders (your-api-key-here) in templates and docs are not findings..gitignore at the scaffold and Phase 7 re-verifies the whole tree before release — neither replaces this check at each commit.api_key-style assignment, a private-key header line) — it describes it or splits it apart. This keeps docs/ committable with the pre-commit gate active (references/claude-config.md) instead of forcing bypasses on the project's own records.Accessibility is not a project type or a phase — it applies to everything built, on every platform, and it is decided and stated up front in Phase 1, not discovered at the end. Building accessibly from line one and "making it accessible" after the fact are different jobs; the second is a rewrite. Treat accessibility exactly like security: load its reference the moment the project type and target platform(s) are fixed in Phase 1, keep it live through every later phase, and tell the user it is in force before anything is built.
Load references/accessibility.md once the platform is known. It has a universal core (applies everywhere) plus a section per platform — Web/HTML, WordPress/WooCommerce, iOS/iPadOS, Android, macOS, Windows, and cross-platform frameworks. Apply the universal core plus the section(s) matching the project's target platform(s). If the project spans platforms, apply every matching section.
The commitment is the maximum reasonably achievable, never a token gesture: WCAG 2.2 AA as the floor with AAA where feasible, EN 301 549 and the European Accessibility Act where they apply (they apply to the user's EU market), and the platform's native accessibility API and assistive technologies fully supported — screen readers (VoiceOver, TalkBack, Narrator, NVDA/JAWS), Switch Control / Switch Access, Voice Control / Voice Access, Dynamic Type / system text scaling, and the reduced-motion and high-contrast preferences. "Use every accessibility tool the platform offers" is the standing rule.
When the user needs to price the project for a client — the normal case when someone asks them for a quote — Keel produces a realistic, itemized estimate and a client-ready budget, computed from how the work is ACTUALLY delivered: the AI's working hours plus the developer's (vibe coder's) supervision hours — never from traditional human development time. The full procedure lives in references/estimation-budget.md; load it at each of these moments:
docs/estimate.md, so the user can answer a client early.docs/budget.md — itemized segments with hours, the developer's hours at their rate (asked, with currency), the AI cost per model and payment mode (API per-token prices verified online; ≈ 0 marginal cost on subscription), the two blocks SEPARATE, the budget written in the client's language (asked), and an explicit present → adjust → approve loop with the user (e.g. choosing not to bill the AI cost because a subscription makes it a non-expense).docs/token-ledger.md (created with Estimate v1) gets one row per working session — measured where the environment exposes usage, honestly estimated where it does not. At release, Phase 7 closes it with the final reconciliation: total tokens by model, cost at verified prices, and the deviation vs the estimate, reported to the user — every finished project calibrates the next estimate.The language the assistant and the user talk in (often Spanish) and the language the product is built in are two different things, decided separately. Getting this wrong has been a recurring defect, so it is fixed here as a contract.
docs/ artifacts follow the same default — English, for token economy (see "Token economy" at the top; confirmed as the docs-language decision in Phase 1 §6). The user may choose another docs language explicitly, accepting the extra token consumption and cost; only the conversation itself follows the user's language..pot generated from the English source. A Spanish-hardcoded (or Spanish-base) WordPress/WooCommerce project is a defect, not a valid outcome. This is recorded in decisions.md at Phase 1 and verified in Phase 5.Everything the assistant writes, in any language and on any surface (chat replies, docs/, code comments, UI copy, commit messages, release notes), must be orthographically and grammatically perfect. This is a standing contract with no exceptions and is not overridable by speed, informality, or context.
For Spanish specifically — because this is where mistakes have repeatedly slipped through — the rule is absolute:
Treat a spelling or grammar mistake exactly like a code bug: it is caught and fixed, never shipped. If unsure of a spelling, verify it instead of guessing. The same standard of correctness applies to every other language the project is written in.
docs/; see Phase 6 for the docs layout), updating docs/PROGRESS.md and docs/decisions.md as the work happens — not at the end.docs/PROGRESS.md (with its artifacts) and set the next action. Briefly tell the user what was produced and what the next phase will do.references/project-state.md, initialize the state files (confirming the project directory with the user first), and run Phase 1.docs/PROGRESS.md exists. Follow the fixed session-start order from references/project-state.md: docs/PROGRESS.md (project card, phase status, exact position, open items) → docs/decisions.md (never re-litigate) → docs/lessons-learned.md (never repeat) → the current phase's reference → only the inputs PROGRESS.md names. Continue from where things stand — never restart, never reinterpret decisions already made. If the project card's Keel baseline: is older than the running Keel (or missing), offer the post-update reconciliation from references/project-state.md before continuing. (Keel-built projects that somehow lack state: identify the furthest completed phase from the artifacts in docs/, create the state files, then continue.)references/adoption.md and follow it: inventory read-only, initialize state and the CLAUDE.md lock, ask the never-made Phase 1 decisions, reconstruct 01/02/03 as-built plus a complete docs/api/INDEX.md, audit gaps into docs/04-adoption-audit.md, prioritize them with the user, then continue as a normal Keel project. Adoption changes no code.Portability lock: every Keel project carries a CLAUDE.md block (plus optionally the skill embedded at .claude/skills/keel/) so that ANY environment or AI opening the repo — Claude app, Cowork, Claude Code, or another assistant — is bound to this workflow even without the skill installed. Defined in references/project-state.md ("Portability"); created in Phase 1 step 0a / adoption step 2. If you are running in a project whose lock is missing or predates this mechanism, add it (with the user's OK) before continuing. Projects may additionally carry the optional native Claude Code config package — rules, agents, settings, the confidential-data pre-commit gate — defined in references/claude-config.md.
Ending a session mid-work (any phase): produce the self-sufficient continuation prompt from references/project-state.md so the next chat resumes exactly where this one stopped.
references/project-state.md — the living state system (PROGRESS.md, decisions.md, lessons-learned.md, Design Request register, api/INDEX.md), the universal continuation prompt, and the context & cache discipline. Read at project start (Phase 1) and on every resume.references/estimation-budget.md — the AI-time estimation & client-budget procedure (preliminary at Phase 1 close, firm at Phase 2 close, recomputed on scope changes).references/claude-config.md — the optional native Claude Code package for the project (.claude/rules/, .claude/agents/, .claude/settings.json, the confidential-data pre-commit gate, .mcp.json). Offered once at Phase 1 step 0a / adoption step 2; rules and agents materialize at Phase 2 close; settings, gate, and .mcp.json at the Phase 5 scaffold.references/handoff-contract.md — the exact design-handoff/ structure that flows Design → Build. Used by Phases 3 and 4. Read before either.references/design-brief-template.md — the brief to give Design (Phase 3).references/build-spec-template.md — the consolidated BUILD-SPEC.md (Phase 4).references/design-request-template.md — the prompt back to Design when the handoff has gaps (Phase 4).references/phase-1-discovery.mdreferences/phase-2-functional-spec.mdreferences/phase-3-design-handoff.mdreferences/phase-4-faithful-build.mdreferences/phase-5-development.mdreferences/phase-6-documentation.mdreferences/phase-7-release.mdreferences/phase-8-website.md (conditional — orchestrates the website sub-phase)references/phase-8-site-discovery.mdreferences/phase-8-section-catalogue.mdreferences/phase-8-domain-decision.mdreferences/phase-8-design-direction.mdreferences/phase-8-technical-seo.mdreferences/phase-8-launch-checklist.mdreferences/project-state.md (cross-cutting — state, resume, context & cache discipline, portability lock; loaded at project start and on resume)references/adoption.md (entry mode 3 — adopting Keel in an existing project)references/claude-config.md (cross-cutting — optional native Claude Code project config: rules, agents, settings, pre-commit gate, .mcp.json; offered at 0a/adoption, materialized at Phase 2 close and the Phase 5 scaffold)references/estimation-budget.md (cross-cutting — AI-time estimation & client budget; loaded at Phase 1 close, Phase 2 close, and on scope changes)references/handoff-contract.mdreferences/design-brief-template.mdreferences/build-spec-template.mdreferences/design-request-template.mdreferences/accessibility.md (cross-cutting — non-negotiable, loaded from Phase 1 like the security profile)references/security/wordpress.mdreferences/security/web-app.mdreferences/security/mcp-server.mdreferences/security/library-component.md© joseconti, GPL-3.0-or-later. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 31 other files (references) in .claude/skills/keel of joseconti/declaracion-renta-espana.
Open the folder on GitHubat commit d60ef59
Keel next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Keel this skilljoseconti/declaracion-renta-espana | 190 | — | ~11k | Automated safety check: Warn | GPL-3.0-or-later | |
| Security Reviewbobmatnyc/claude-mpm | 156 | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| Setup Context A8cwoocommerce/woocommerce-ios | 358 | — | ~627 | Automated safety check: Notes | GPL-2.0 | |
| Researching With Deepwikiaiskillstore/marketplace | 433 | — | ~1.2k | Automated safety check: Pass | None | |
| MCP Server Security Auditawarexone/Agentic-Bug-Hunter | 5.3k | — | ~1.9k | Automated safety check: Warn | MIT | |
| MCP Security Auditgithub/awesome-copilot | 40k | — | ~3.1k | Automated safety check: Pass | MIT |
bobmatnyc/claude-mpm
Security review gate for MCP server installations. An agent skill from bobmatnyc/claude-mpm.
woocommerce/woocommerce-ios
Set up the ContextA8C MCP server for accessing Automattic internal resources (Slack, Linear, P2s, GitHub Enterprise, etc.)
aiskillstore/marketplace
Research GitHub, GitLab, and Bitbucket repositories using DeepWiki MCP server.
awarexone/Agentic-Bug-Hunter
Audits MCP servers and their client configs for tool poisoning, prompt injection, over-privileged tools, injection bugs, secret leaks and missing approval gates.
github/awesome-copilot
Audit MCP (Model Context Protocol) server configurations for security issues.
github/awesome-copilot
Review the implementation source code of MCP (Model Context Protocol) servers, clients, and tool handlers against a security baseline — authentication, sessions, rate limiting, input-schema…
joseconti/declaracion-renta-espana
Asistente para la Declaración de la Renta (IRPF) en España, ejercicio 2025.
Categories
A skill your agent uses for ANY new software project from idea to release — websites, WordPress/WooCommerce plugins, MCP servers, web apps, components, or libraries. Keel is an agent skill from joseconti/declaracion-renta-espana. Use this skill for ANY new software project from idea to release — websites, WordPress/WooCommerce plugins, MCP servers, web apps, components, or libraries.
Keel fits situations like: ANY new software project from idea to release — websites; wordPress/WooCommerce plugins; the user starts a new project; says I have an idea for a plugin/site/app.
Run `npx skills add joseconti/declaracion-renta-espana --skill keel -a claude-code`. Or copy the skill folder (.claude/skills/keel in joseconti/declaracion-renta-espana) into .claude/skills/keel in your project. Claude Code loads it when a task matches its description.
Run `npx skills add joseconti/declaracion-renta-espana --skill keel -a codex`. Or copy the skill folder (.claude/skills/keel in joseconti/declaracion-renta-espana) into .agents/skills/keel in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add joseconti/declaracion-renta-espana --skill keel -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/keel, .gemini/skills/keel, .github/skills/keel and .opencode/skills/keel in your project.
Going by SKILL.md and its folder, Keel needs the command-line tools its instructions call (git).
SKILL.md names 3 domains. In commands or code: github.com, api.github.com and raw.githubusercontent.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way.
Keel is published under the GPL-3.0-or-later licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 11k tokens (SKILL.md is roughly 42k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 83k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Keel: Security Review (bobmatnyc/claude-mpm, 156 stars), Setup Context A8c (woocommerce/woocommerce-ios, 358 stars), Researching With Deepwiki (aiskillstore/marketplace, 433 stars) and MCP Server Security Audit (awarexone/Agentic-Bug-Hunter, 5.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
joseconti (a GitHub user) maintains it in joseconti/declaracion-renta-espana, which has 190 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on July 16, 2026.
Source: joseconti/declaracion-renta-espana on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.