Repository navigation
agent-dispatch: reglas coherentes, instalación probada, ejemplos de decisión y CI - #1
Merged
Merged
Conversation
- Description: lead with when to use it (before any subagent, parallel agents, workflow or loop) instead of "always-on", which a skill is not: only the description is always in context. - Section 4 maps each tier to the Claude Code Agent call (model, effort) and says what to do when the session already runs the mid model. - Guardrail 2 and 5 no longer contradict each other: the one retry of a small or mid agent goes one tier up. - "Lower tier plus a verification by the upper one is cheaper" was an unmeasured claim and clashed with "no agent that only re-checks": the final review checks it instead. - The dispatch line now carries the loop cap, as guardrail 5 requires. - Measure per tier (three tiers, not "small and large") and say where Claude Code reports it. - The worked example no longer delegates design, code or the lint/test run, which section 1 forbids; the long version moves to examples/. - Sections numbered 1-7, same headings in both languages; the promo paragraph moves out of the skill (it stays in the README). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
…/ES) chrome-extension: design, code and the lint/test run stay inline, as section 1 asks (they are a chain and a command, not parallel work); the tests (mid) and four translations (small) are the five delegated agents. Briefs carry the six fields of guardrail 4, the dispatch line carries the loop cap, and the spend line covers the three tiers. decisions: ten short cases (no delegation, one agent, several slices, escalation, a session already on the mid model) and the model names per client. Only the Claude Code row is tested here; the others are marked as checked against vendor docs, untested. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
The repository is its own marketplace with two plugins: agent-dispatch (root SKILL.md) and agent-dispatch-es (es/SKILL.md). Claude Code loads a plugin with SKILL.md at its root, no skills/ folder and no "skills" key as a single skill, so no copies of the skill are needed. No "version" on purpose: Claude Code then uses the commit SHA, so users get every change with `claude plugin update` without manual bumps. Tested: `claude plugin validate .` and `es` pass (warnings only for the missing version); `claude plugin marketplace add <path>`, `install` and `details` load one skill per plugin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
…s (EN/ES) - Install: Claude Code personal skill, project skill and plugin (with the one-step command, updates and how to check it loaded), Cursor as a skill or as an always-applied rule (frontmatter included), and the .agents/skills/ path that other Agent Skills clients read. - Say plainly that a skill is not always on and give the one CLAUDE.md line that makes it fire whenever delegation comes up. - The default-model claim now matches the Claude Code docs (a model set on the call or in the subagent definition wins). - Worked example follows the skill's own rules: 5 delegated agents, not 9; design, code, lint/tests and the final review stay inline. - Removed the "without the skill: 9 agents on the session's model" counterfactual (never measured) and the Invokard card counts (not verifiable from here). - Mechanical examples no longer include running a script, which rule 1 says is never a reason to delegate. - Donation block untouched (checked with diff). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
scripts/check.py (Python + PyYAML) fails when: - SKILL.md or es/SKILL.md has invalid YAML frontmatter, a name outside the Agent Skills rules, or a description over 1024 characters; - an English doc has no Spanish twin, or the twins differ in headings, tables, lists, images or code blocks; for SKILL.md also in inline code and numbers per section, so a rule changed in one language fails; - a relative link, anchor, image or URL into this repository (the curl install lines included) points to nothing; - either SKILL.md passes 1300 words (the old ones had 1400 and 1424); - the marketplace or plugin manifests are invalid or would hide the root SKILL.md. `claude plugin validate` does not catch broken skill frontmatter (tried here), so it runs as a second job, pinned to the tested version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
The demo GIF and both example cards showed 9 agents (design, code and the lint/test run delegated), which the skill's first rule forbids. They now show 5 agents (1 mid, 4 small) with design, code, checks and review inline, the loop cap on the dispatch line, and a spend line that says "as the tool reports it, or not measured" instead of a made-up "9/9 done, review: pass". The README alt text marks the GIF as an illustration, not a recorded run. Same sizes, palette and fonts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
Pre-merge review findings: - A fixed effort "high" on judgment-tier calls could run a delegated final reviewer below the session's effort, which guardrail 1 forbids. Judgment now passes neither model nor effort, so both are inherited. - Omitting model only inherits the session's model when CLAUDE_CODE_SUBAGENT_MODEL is unset; say so and what to pass instead. - Guardrail 5 pointed at "rule 2"; the retry rule is guardrail 2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
…/ES) Pre-merge review findings: - Judgment tier: the session's effort, not "high"; mention CLAUDE_CODE_SUBAGENT_MODEL in the default-model sentence. - /reload-skills also applies to a project .claude/skills created mid-session; plugins installed or updated from the shell need /reload-plugins in an open session. - The Cursor rule command wrote an always-applied rule with no body and exited 0 when the download failed; it now downloads first and creates no file on failure (tested in bash and dash). - Spanish "Qué te da" line: "tope: 1 ronda de corrección", as elsewhere. - Contributing: CI runs on pull requests and pushes to main, and also runs claude plugin validate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
Guardrail 4's return contract asks for a verdict; the three example briefs now do. The Claude Code row of the client table matches the skill: no model and no effort for judgment, unless CLAUDE_CODE_SUBAGENT_MODEL is set. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
Two false negatives found in the pre-merge review: links and images in a heading were never checked, and the EN/ES number parity ignored code blocks, so the dispatch line and its cap could drift between languages. Both now fail; the clean repository still passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
…r (EN/ES) Second-pass review: a subagent definition can also set model or effort, so the judgment tier inherits the session's only through a type whose definition sets neither; with CLAUDE_CODE_SUBAGENT_MODEL set, pass the session's alias. Same caveat in the README tier paragraph and the client table. README token figures re-measured with `claude plugin details` (~2,200 EN, ~3,000 ES on invoke). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
Pooling them let a prose change cancel an opposite change in a code block (e.g. "0 agents" -> "1" plus "cap: 1" -> "0"), which the old check caught. Each source is now compared on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqAvEGjgdsAP9PQfC2SUoc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Revisión de agent-dispatch hecha como la haría un usuario nuevo, con los arreglos y una comprobación automática en CI. Antes de fusionar pasó además una revisión adversarial con varios agentes. Licencia y bloque de donación sin tocar (comprobado con
diffen los dos README).Qué he encontrado, ordenado por gravedad
SKILL.md:3,es/SKILL.md:3CLAUDE.mdque lo consigue.examples/chrome-extension*.md, README,docs/*cap: …/tope: ….Agentaceptamodel(haiku,sonnet…) yefforten cada llamada (2.1.292+); sin eso, el agente no sabe qué parámetro tocar.Agenten Claude Code»./usage.examples/chrome-extension*.mdSKILL.mden inglés.CLAUDE_CODE_SUBAGENT_MODELfijen otro.scripts/check.pyy un workflow.Secretos: he buscado patrones habituales (claves, tokens,
sk-,ghp_,AKIA, claves privadas) en todo el historial y no he encontrado ninguno. El correo de PayPal y las direcciones USDC son datos de donación públicos.Qué he cambiado y por qué
Trece commits pequeños, cada uno revisable por separado. Primera tanda:
skill:SKILL.mdyes/SKILL.md. Corrige los puntos 1, 3–8, 10 y 13–16 manteniendo las 7 reglas y las 5 salvaguardas.examples:El ejemplo de la extensión de Chrome pasa a cumplir las reglas (puntos 2 y 9). Además hay un nuevoexamples/decisions{,.es}.mdcon 10 casos:El fichero termina con la tabla de nombres de modelo por cliente.
plugin:El repositorio pasa a ser su propio marketplace, con dos plugins:agent-dispatch(elSKILL.mdde la raíz) yagent-dispatch-es(es/). No hay copias de la skill porque Claude Code carga como skill elSKILL.mdde la raíz de un plugin. No llevaversiona propósito: así se usa el SHA del commit y cada cambio llega conclaude plugin update, sin tener que subir la versión a mano.readme:Instalación probada (punto 12), afirmaciones precisas (puntos 11, 15 y 17) y el ejemplo nuevo.ci:scripts/check.pyy.github/workflows/checks.yml.docs:GIF y PNG regenerados con el reparto correcto, el tope en la línea del despacho y sin el «9/9 done · review: pass» inventado. El texto alternativo del GIF lo marca como ilustración.Segunda tanda, salida de la revisión previa a la fusión (siguiente apartado): 7 commits (
skill:,readme:,examples:, dosci:,docs:ychore:).Coste del SKILL.md estimado por
claude plugin details, antes y después:La rebaja es moderada porque también se ha añadido precisión: la correspondencia con Claude Code, la regla de la sesión en el modelo medio, la línea «0 agentes» y la herencia del nivel de juicio.
Revisión previa a la fusión
Primera ronda. Un flujo de 31 agentes: 5 revisores, uno por dimensión (significado EN/ES, coherencia de reglas, instalación y plugin, script de CI y afirmaciones), y un escéptico por hallazgo que intentaba refutarlo. Salieron 26 hallazgos: 11 confirmados y 15 descartados. Los descartados eran preexistentes, hipotéticos o de estilo.
Arreglados:
effort: "high"fijo podía dejar a un revisor final delegado por debajo del esfuerzo de la sesión, en contra de la salvaguarda 1. Ahora el juicio no pasa nimodelniefforty hereda los dos. Se avisa de que solo hereda con un tipo de subagente cuya definición no fije ninguno, y de que conCLAUDE_CODE_SUBAGENT_MODELfijado hay que pasar el alias de la sesión. Es un cambio de regla que conviene que revises./reload-skillstambién hace falta cuando la carpeta.claude/skillsdel proyecto se crea a mitad de sesión./reload-plugins. Comprobé que el comando existe en el CLI.curl(probado en bash y dash).check.pycomprueba los enlaces dentro de títulos y las cifras dentro de bloques de código del SKILL.md.Segunda ronda. Dos verificadores sobre esos arreglos encontraron 4 huecos más, ya corregidos:
modeloeffort;check.pydejaba que un cambio de cifra en la prosa se anulara con otro en un bloque de código.Despacho de todo el trabajo, siguiendo la propia skill. Gasto según el recuento de cada herramienta; la sesión principal no está medida aquí.
Tope: 2 rondas. Después de la segunda no se abrió otra; solo se pasaron las comprobaciones.
Cómo lo he verificado
Línea base, antes de cambiar nada
claude plugin validate .(Claude Code 2.1.300) fallaba conNo manifest found in directory.python3 scripts/check.pycontra el estado original daba 3 errores:SKILL.md: 1400 words,es/SKILL.md: 1424 wordsy la falta de marketplace.Estado final (
b96da36)python3 scripts/check.pytermina conAll checks passed.:claude plugin validate .yclaude plugin validate espasan, con avisos solo por la falta deversion.El comprobador detecta los fallos de verdad. Cada copia rota a propósito falla con el error esperado y la copia intacta pasa:
nameen mayúsculas;curlrota;skills/que tapa elSKILL.mdde la raíz;Instalación en Claude Code, en un
CLAUDE_CONFIG_DIRoHOMEaislado:claude plugin marketplace add,installydetailsmuestran una skill por plugin.Octonove/agent-dispatch#claude/intelligent-ritchie-7ujizafunciona.curldel README descargan bien, yclaude plugin validate ~/.claude/skillspasa.CI en verde en
b96da36(ejecución 4): los dos jobs pasan.Qué no he podido verificar aquí
/skills,/agent-dispatchni la activación automática por la descripción: haría falta una sesión que consume API. Esos detalles salen de la documentación oficial.invokard.web.app,img.shields.ioyOctonove/crbro-memoryestán fuera del alcance de esta sesión, y tampoco he podido comprobar la «sección 1G de El Orquestador».Pendiente para Antonio
versionenplugin.json. Ahora no lo lleva y las actualizaciones siguen al SHA del commit. Si lo añades, tendrás que subirlo en cada cambio.agent-dispatch; renómbralo si quieres uno común de Octonove.@anthropic-ai/claude-code@2.1.300(actualízalo de vez en cuando) y avisa de queactions/checkout@v4yactions/setup-python@v5siguen en Node 20.es/SKILL.mdestá a 1277 de 1300 palabras: cualquier frase nueva obligará a recortar otra./plugin marketplace add Octonove/agent-dispatchy/plugin install agent-dispatch@agent-dispatch, y la instalación en Cursor.🤖 Generated with Claude Code