VP LAB · AI SYSTEMS

El código
después del diseño.

Agentes de IA, automatizaciones y sistemas inteligentes — construidos sobre años aplicando Design Thinking.

OPEN SOURCE · HERRAMIENTA

ARC

Adaptive Rule Context

Un sistema de reglas contextuales para Claude Code. Solo carga el dominio activo — el contexto libre cambia la calidad del output.

GitHub

Brief

Los agentes de Claude Code reciben un sistema de reglas en cada mensaje. Sin un sistema de gestión, todas las reglas se inyectan siempre — independientemente de la tarea en curso.

En proyectos con múltiples áreas de trabajo (infraestructura, n8n, portfolio, servidor), este overhead acumulado consume entre el 40% y el 60% del contexto disponible con reglas que no aplican a la tarea concreta.

ARC organiza las reglas en dominios contextuales. Solo GLOBAL (siempre) y el dominio que coincide con la tarea actual se cargan. El resto permanece en SHORT — una línea por dominio, presente siempre, sin peso real.

El Problema

¿Cuántos mensajes dura tu sesión si tienes 50 reglas activas? Pulsa Iniciar.

Simulación — 50 reglas activas, ventana 10K tokens
Sin ARC
msg 00×

↑ ~2,100 tokens de reglas por mensaje — todas, siempre

Con ARC
msg 00×

↑ ~435 tokens de reglas por mensaje — solo el dominio activo

Inspiración

Anthropic ya había resuelto esto.

El sistema de Skills de Claude Code resuelve exactamente este problema para herramientas externas: cada skill expone una descripción corta → Claude decide si aplica → solo carga el cuerpo completo si coincide. El mismo agente que saturaba el contexto con reglas ya usaba arquitectura lazy-loading para sus propias herramientas.

ARC adapta ese patrón a las reglas personales de proyecto. La arquitectura es idéntica.

Skill de Claude Code
~/.claude/skills/commit/SKILL.md
TRIGGER — always loaded

---

name: commit

description: Create a git commit for the current project. Use when the user wants to save a checkpoint of work done. Automatically detects the active project, stages relevant files, and creates a descriptive commit message.

user-invocable: true

allowed-tools: Bash, Read, TaskUpdate, TaskList

---

LAZY — only on invocation

# Commit Skill

When invoked, create a git commit for the active project following this exact process:

## Step 1 — Detect project

Identify which project we're working on based on conversation context. Default to /root/projects/vasylpavlyuchok if unclear. If $ARGUMENTS is provided, use it as the project path.

## Step 2 — Inspect changes

Run these in parallel:

- git -C <project_path> status --short

- git -C <project_path> diff HEAD --stat

- git -C <project_path> log --oneline -3

## Step 3 — Stage files

Stage all modified and untracked files EXCEPT:

- .env* files

- Files containing secrets or API keys

- node_modules/ · .next/

- Large binary files not related to the project (>5MB)

## Step 4 — Write commit message

Follow this format strictly:

<type>: <short description in English, max 72 chars>

- Bullet point of what was done

- Another bullet point

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Types: feat · fix · style · refactor · config · seo

## Step 5 — Commit

Execute the commit. Show the result to the user.

## Step 6 — Update tasks

After committing successfully, check TaskList for any pending commit-related tasks and mark them as completed.

## Rules

- Never use --no-verify

- Never commit .env files or secrets

- If nothing to commit, say clearly: "Nothing to commit — working tree clean"

- The commit message must be in English

- Always show what was committed after success

Dominio ARC
~/.arc/manifest + docker
~/.arc/manifestTRIGGER — always loaded

DOCKER_STATE=active

DOCKER_ALWAYS_ON=false

DOCKER_RECALL=docker, contenedor, compose, traefik,

build, deploy, imagen, puerto, port

~/.arc/dockerLAZY — only on match

# ARC Domain: DOCKER

# Infraestructura y contenedores

DOCKER_RULE_0_SHORT=Red proxy como único punto de entrada. Nunca exponer puertos directamente.

DOCKER_RULE_0=Todo servicio nuevo debe conectarse a la red externa del proxy inverso. Nunca mapear puertos 80/443 directamente — todo el tráfico HTTP/HTTPS entra por el proxy. Verificar con 'docker network inspect' que el contenedor aparece en la red antes de hacer pruebas. Si el contenedor no aparece en la red, el proxy no lo detecta y el dominio queda sin respuesta.

DOCKER_RULE_1_SHORT=Rebuild obligatorio tras cambios en código. Hot-reload solo en entorno dev.

DOCKER_RULE_1=Después de modificar código fuente, ejecutar 'docker compose build' antes de 'up -d'. El hot-reload funciona únicamente en el contenedor de desarrollo (docker-compose.dev.yml) — en producción cada cambio requiere rebuild completo. Evitar 'up --force-recreate' sin build previo: el contenedor se recrea pero ejecuta la imagen anterior sin los cambios.

DOCKER_RULE_2_SHORT=Stop no down. Down destruye el contenedor y lo elimina del panel de administración.

DOCKER_RULE_2=Para pausar un servicio usar 'docker compose stop' o 'docker stop nombre'. NUNCA 'docker compose down' — este comando destruye el contenedor y lo hace invisible desde el panel de administración. Si se ejecuta accidentalmente, recuperar con 'docker compose up -d' sin build (si no hubo cambios de código el contenedor vuelve al estado anterior).

DOCKER_RULE_3_SHORT=SSL: usar certresolver=myresolver. El nombre letsencrypt no existe en este servidor.

DOCKER_RULE_3=En las labels de Traefik usar siempre 'certresolver=myresolver'. El nombre 'letsencrypt' no existe en la configuración de Traefik de este servidor y produce error silencioso: el contenedor arranca, el dominio responde en HTTP, pero el SSL nunca se provisiona. Verificar en los logs de Traefik que aparece 'Obtained certificate' tras el primer deploy en un dominio nuevo.

description: / N8N_RECALL=TRIGGER

Lo único que Claude lee siempre. ~20 tokens. Decide si el skill o dominio aplica.

body / N8N_RULE_X=LAZY

El contenido completo. Solo se carga cuando el skill es invocado o el dominio coincide.

Star Commands

Prefija tu prompt con *nombre para forzar un set de reglas específico, independientemente del keyword matching.

*devprefijo de prompt

Carga reglas de desarrollo — code quality, estructura, testing.

*dev arregla el bug en el formulario de login

*reviewprefijo de prompt

Carga checklist de code review — seguridad, lógica, edge cases.

*review arregla el bug en el formulario de login

Estructura

Cada dominio es un archivo de texto plano en ~/.arc/. El formato es intencionado: Claude Code puede leer cualquier archivo del sistema de forma nativa, sin parsers ni middleware. Un manifest central controla qué dominios están activos y qué keywords los activan — una sola lectura para ver el estado completo del sistema. Si algo falla o quieres modificar una regla, abres el archivo y lo cambias directamente.

~/.arc/
manifestControls domains, states, recall keywords
globalAlways loaded — core rules for every session
contextContext brackets [FRESH] / [LOADED] / [DEEP]
dockerTriggered by: docker, compose, container, port
n8nTriggered by: n8n, workflow, automation, webhook
vasylpavlyuchokTriggered by: portfolio, next.js, /ai, hero
servidorTriggered by: vps, ip, servidor, telegram
~/.arc/n8nFormato de un dominio

# Versión SHORT — siempre presente, ≤15 palabras

N8N_RULE_1_SHORT=n8n producción → usar MCP n8n-agent

# Versión FULL — cargada solo al activar el dominio

N8N_RULE_1=Usar MCP n8n-agent para n8n producción (agentbooster.ai). Siempre validar antes de activar: n8n_validate_workflow. Max 1 test call por API externa.

# manifest — controla qué activa este dominio

N8N_RECALL=n8n,workflow,automatización,webhook,nodo

Debuggable por diseño

ARC no es una caja negra. El matching es determinista — antes de empezar una sesión puedes ver exactamente qué dominios cargarían para cualquier prompt. Nada oculto.

arc test
← elige un prompt para ver el matching en tiempo real

# el matching es determinista — los resultados son reproducibles

Demostración

ARC no es magia — el matching es determinista y transparente. Selecciona un escenario para ver exactamente qué dominios se escanean, cuál coincide y qué texto recibe Claude antes de responder. Lo que ves aquí es lo que se inyecta.

Demostración en vivo

Selecciona una tarea para ver cómo ARC decide qué reglas cargar.

← Selecciona una tarea para comenzar

Context Brackets

Claude no sabe cuánto contexto le queda disponible. Sin esa información, trabaja igual al principio que al final — y al final lo hace peor sin saberlo. ARC resuelve esto inyectando un bracket al inicio de cada mensaje: una línea que indica el estado real del contexto. Claude lee ese bracket y ajusta: en [FRESH] opera lean, en [MODERATE] refuerza decisiones clave, en [DEPLETED] hace checkpoint, y en [CRITICAL] avisa de abrir sesión nueva.

[FRESH]60–100%
GLOBAL
78% libre

Sesión nueva. Solo GLOBAL cargado. El agente trabaja con mínimo overhead.

→ Lean. Sin historial. Máxima atención al task.

[MODERATE]40–60%
GLOBAL
Domain
History
43% libre

Sesión activa. Claude refuerza decisiones clave antes de tareas grandes.

→ Resumir estado antes de empezar tarea nueva.

[DEPLETED]25–40%
GLOBAL
Domain
History
25% libre

Contexto bajo. Claude hace checkpoint y prepara handoff antes de continuar.

→ Checkpoint todo. Preparar notas de continuidad.

[CRITICAL]<25%
GLOBAL
Domain
History
21% libre

Contexto crítico. Claude advierte al usuario y recomienda abrir sesión nueva.

→ Avisar. Nueva sesión antes de continuar.

Se mejora solo

ARC incluye un analizador semanal. Cada lunes revisa las últimas sesiones y detecta patrones: comandos que se repiten, correcciones que haces con frecuencia, áreas donde el agente pide contexto que ya debería tener. El resultado es una propuesta concreta de reglas nuevas o automatizaciones que no sabías que necesitabas.

01Sesiones de la semana

El analizador lee los últimos 7 días de actividad.

02Detección de patrones

Identifica comportamientos repetidos, gaps de contexto y oportunidades de automatización.

03Propuesta al usuario

Sugiere reglas nuevas o modificaciones. Tú decides qué entra en ARC.

Cron: Lunes 9:00 AM · Modo automatización: quincenal

Resultado

~85%

menos overhead en reglas

Las sesiones duran más sin forzar auto-compactación. Pero el número no es lo importante — lo importante es qué hace Claude con ese contexto libre: respuestas más precisas, menos desviaciones, menos veces "se olvidó" de algo que ya sabía. La diferencia entre trabajar con contexto saturado y contexto limpio no se mide en tokens: se nota en la calidad del output.

arc stats --weekdatos de sesión real

$ arc stats --week

 

Período: últimos 7 días

Activaciones: 47

Líneas recortadas: 1,823 → 312 (83% reducción)

Tokens ahorrados: ~3,800

 

Top comandos: git diff (18) · docker logs (12) · npm install (9)

Crea tu dominio

Dos pasos. Un archivo de texto plano y una entrada en el manifest. No hay más.

01Crea el archivo de dominio
~/.arc/myproject

# SHORT — siempre visible, ≤15 palabras

MYPROJECT_RULE_1_SHORT=Leer CLAUDE.md antes de modificar nada.

# FULL — cargado solo al activar el dominio

MYPROJECT_RULE_1=Leer siempre el CLAUDE.md del proyecto antes de cambios. Contiene decisiones de arquitectura no obvias en el código.

02Regístralo en el manifest
~/.arc/manifest

MYPROJECT_STATE=active

MYPROJECT_ALWAYS_ON=false

MYPROJECT_RECALL=myproject, feature-x, deploy staging

# opcional — activa automáticamente por path de archivo

MYPROJECT_PATH=/absolute/path/to/myproject

Instálalo en tu proyecto

Pásale el link de GitHub a tu Claude Code. Él te guía paso a paso.

Ver en GitHub →