CLAUDE

CLAUDE is a command for Claude Code from mariorojasmz/apolo-cad. It costs 0 tokens per session (6,191 once invoked), scanned A, original, MIT.

A technical reference for a schema-driven command system, where data models define accepted inputs and those inputs drive the user interface and agent tools. It documents command registration, execution, state, validation, and related backend code.

In plain words
What is it for?
Use it when working on command models, executors, the command registry, execution context, state checkpoints, strict input validation, or expression handling.
Why use it?
It gives developers a map of the code and the rules to follow when adding or changing commands, reducing inconsistent dispatch and state-handling changes.

Command for Claude Code

Written for Claude Code: a Claude Code command (commands/*.md). Also seen: mentions CLAUDE.md.

Good fit Use it when working on command models, executors, the command registry, execution context, state checkpoints, strict input validation, or expression handling.

Compare 6 commands from other repositories ↓
Install with agentmods
npx agentmods add commands/mariorojasmz/apolo-cad/claude
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/mariorojasmz/apolo-cad

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for CLAUDE

README.md
[![agentmods](https://agentmods.dev/badge/commands/mariorojasmz/apolo-cad/claude/github.svg)](https://agentmods.dev/commands/mariorojasmz/apolo-cad/claude)
Your own site
<a href="https://agentmods.dev/commands/mariorojasmz/apolo-cad/claude"><img src="https://agentmods.dev/badge/commands/mariorojasmz/apolo-cad/claude/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for CLAUDE

Your own site · 80×15
<a href="https://agentmods.dev/commands/mariorojasmz/apolo-cad/claude"><img src="https://agentmods.dev/badge/commands/mariorojasmz/apolo-cad/claude.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 6,191 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.06191
Opus 5.5 $0.00000 $0.02476
Sonnet 5.5 $0.00000 $0.01238
Haiku 4.5 $0.00000 $0.00619

Measured today against content hash a190ce13e587, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

CLAUDE scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

core/apolo/commands/CLAUDE.md · 238 lines

How it starts

The opening of the file, as written. The whole thing — 238 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Comandos (core/apolo/commands/)

El registro schema-driven: models.py (fachada de los params pydantic = schema de UI, diálogos y tools del agente; viven en models_*.py por familia), escena.py (Feature, DEFINITIONS, _require/_instanced…: la capa de abajo), exec_*.py (executors por familia), registry.py (el shim, el REGISTRY, el despacho y los schemas), spec.py (CommandSpec + run_executor, el despacho), state.py (RegenState, el estado con nombre que execute_command muta y el regenerate guarda como checkpoint; ExecContext, lo que recibe un executor), strict.py (la entrada estricta de params), errors.py (CommandError) y expressions.py (motor de =expr). Lo transversal (locks, log, regenerate, cirugía de modelos) está en el CLAUDE.md raíz; lo común del backend, en core/apolo.

Al agregar o cambiar un comando

  • Todo executor es _exec_x(ctx: ExecContext, cmd_id, p): ctx.scene, ctx.joints, ctx.fasteners… son los dicts VIVOS (se mutan en sitio), ctx.attachments los adjuntos y ctx.resolved_variables() las variables evaluadas. Ningún flag elige la firma (lo exige tests/test_despacho_unico.py): si un comando necesita más contexto, es una propiedad de ExecContext, no un flag ni una rama en el despacho. plan
  • Params estrictos (strict.py): la ENTRADA de un cliente (las cuatro puertas de Document; también el preview con que el chat ensaya sus propuestas) rechaza la clave que el modelo no declara, con su ruta, las válidas y «¿quisiste decir…?»; el REPLAY la ignora (extra="ignore" explícito) y un edit sólo rechaza las que el cliente INTRODUCE (la UI reenvía los params guardados). Los modelos NO fijan extra: cambiaría el JSON Schema publicado. Quitar o renombrar un campo exige upcaster; un campo nuevo entra con un default que reproduce lo anterior (trinquete D12: tests/test_contrato_comandos.py); si lo NUEVO debe nacer con otro valor, el sello de entrada (CommandSpec.al_crear) se lo pone sólo al comando que nace (join_bolted.criterio, create_belt_conveyor.cierres).
  • models.py es FACHADA (partir-nucleo-congelado F2): los params viven por familia —models_base (Vec3, Rot3, _floor_to_int, listas de catálogo), models_basicos (primitivas, patrones, colocación, set_variable), models_maquinas (conveyor, weldment, frame, script, brazo), models_chapa, models_modificar (caras, taladro, circular, espejo, ebanistería), models_croquis (croquis, barrido, loft, superficies) y models_ensamblaje (juntas, mates, restricciones, grupos, insert_project, ground)— y la fachada sólo re-exporta por IDENTIDAD, para siempre (tests/test_rutas_viejas.py, lista cerrada). Un modelo nuevo va a su familia (o a un models_<tema>.py nuevo, como models_rodillos.py) y se re-exporta en la fachada; una familia importa Vec3/Rot3 de .models_base, nunca de .models (ciclo).
  • registry.py se partió igual (mismo plan, F3 y F4): capas escena ← exec_* ← registry. escena (Feature, DEFINITIONS, _require, _instanced, _orient_axis, _resolve_sel), exec_basicos (primitivas, booleana, patrones, espejo, borrar, duplicar, set_variable), exec_colocacion (_world_move/_world_place, transform, center_in, distribute, attach, snap_to, _planar_face_frame), exec_modificar (caras, fillet/chamfer/shell, _drill_tool, drill_hole, add_joinery), exec_croquis (sketch_*, barrido, loft, superficies, thicken, revolve, extrude_poly, import_step), exec_ensamblaje (_register_joint, _joint_drag, juntas, mates, restricciones, ground, grupos, _transform_point/_transform_dir, transform_group), exec_insertar (insert_project y su precheck) y exec_biblioteca (run_script, brazo, conveyor + _publish_axis_anchor, weldment/frame + _emit_weldment_parts, chapa). Un exec_* puede importar de otro exec_* (sin ciclos) pero nunca de registry (params de la fachada .models). registry.py sólo DEFINE REGISTRY, _validate_model, validate_params, execute_command, _schema_entry y command_schemas (lo exige tests/test_rutas_viejas.py): un executor nuevo va a su exec_* y aquí sólo se importa. registry re-exporta cada nombre movido por IDENTIDAD, para siempre (lista cerrada en tests/test_rutas_viejas.py; los blobs viejos de la caché nombran apolo.commands.registry.Feature). execute_command/validate_params se quedan en registry y execute_command lee run_executor (de spec) por el módulo registry: los tests parchean registry_mod.run_executor. Mover un executor byte a byte deja su huella igual: nunca se actualiza VERSIONES por un corte.
  • Los imports perezosos from .registry import … DENTRO de executors ajenos (cilindro.py, exec_faja.py, tablero.py…) no se tocan: son parte de su huella D11.
  • La description del modelo es para el AGENTE (larga a propósito, con nombres de params); la persona lee la PISTA de pistas.py (vista ?vista=persona, vista_persona.py): un comando nuevo sin pista rompe tests/test_pistas.py (ui). Un super-comando reutilizable documenta ahí su MONTAJE (orientación, tensado, soldadura), no sólo qué es.
  • Versión del executor (CommandSpec.version): si cambia la geometría que produce con los MISMOS params, sube SU version (entra a la firma del regenerate sólo si es ≠ 1 → invalida la caché sólo de los proyectos que lo usan); si cambiaste un helper compartido, la de cada comando que lo usa; lo que no puedes acotar (kernel, builders, catálogo, Feature) es bump de GEOM_CACHE_EPOCH (regla completa en la raíz). Un comando que reproduce OTROS executors va con composite=True (hoy insert_project). El trinquete D11 (tests/test_contrato_comandos.py) guarda versión + huella del código de cada executor: si el código cambia y la versión no, falla y obliga a decidir (subirla, o sólo la huella si fue un refactor). La lógica de los dos trinquetes vive en apolo/contrato_comandos.py (viaja en la wheel; el test sólo guarda CAMPOS/VERSIONES). Un comando de EXTENSIÓN («x.algo», kind scene/vars) sigue la misma regla, con esas funciones; una ref de su catálogo suma el epoch_catalogo sólo a la firma de quien la nombra en sus params (spec.REFS_DE_EXTENSION; un compuesto, todas). plan (A4)
  • Errores de OCCT accionables: fillet/chamfer nombran la arista más corta seleccionada; shell pre-valida 2·espesor ≥ dimensión menor antes de OCCT (condición necesaria, sin falsos positivos). No blindar geometría fina (radio vs caras vecinas): el try/except de OCCT es la red. V6.1

Read the full file on GitHub · 238 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +20 lines a190ce13e587
  2. yesterday Changed · +4 lines 5b3b126476bb
  3. 2d ago Changed · +56 lines ac75e407c133
  4. 4d ago Changed · +3 lines 9dbf5715ff82
  5. 5d ago Changed · +27 lines ce2b54fe417d
  6. 7d ago Changed · +15 lines b96a8b24b4d0
  7. 8d ago Changed · +7 lines 447c89d3792f
  8. 16d ago Changed · +5 lines 93b0689f8980
  9. 18d ago Changed · +5 lines 7b1fe34e5c2e
  10. 22d ago First seen · 96 lines · 0 tokens per session scan A 7e53bae85706

Subscribe to this mod's changes

CLAUDE is a command published in the GitHub repository mariorojasmz/apolo-cad (3 stars, last pushed today), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 6,191 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-06.