Tabla de contenidos
- Qué es Forge en una frase
- Arquitectura de alto nivel
- CLI -- los 56 subcomandos
- Chat panel -- 3 modos UI
- NAC-3 framework
- Inventario de verbos internos NAC-3
- Voz -- 10 idiomas, 3 providers
- Reader -- 10 formatos de documento
- Spec ingest + extract + plan + scaffold
- Vault BYOK y catálogo de 27 slots
- Ship + deploy + publish
- Brain tier routing (eco / frontier)
- Proveedores LLM soportados
- Workflow + doctrines + SQ
- i18n 10 idiomas
- QA harness (brain matrix + scenario DSL)
- MCP bridge
- Licencias + planes
- Las 17 pruebas a las que sometimos a Forge
序Qué es Forge en una frase
Yujin Forge es un IDE en forma de chat panel + CLI que toma una especificación (texto, voz, PDF, DOCX, XLSX) y produce código real -- backend, frontend y mobile-- con NAC-3 baked in, lectura de docs multi-formato, 10 idiomas, y una doctrina de calidad estricta (SQ) que el modelo aplica turno a turno. Forge no es un "generador de código" -- es un compañero de desarrollo que respeta tu workflow y se integra a tu repo existente o arranca uno nuevo.
層Arquitectura de alto nivel
Forge tiene 4 superficies que comparten un mismo backend:
| Superficie | Comandos / endpoints | Propósito |
|---|---|---|
CLI (yf) | 56 subcomandos | Operaciones one-shot: new, ship, validate, license, deploy, doctor, etc. |
| Chat panel | yf chat + browser UI en 127.0.0.1:4847 | Conversación con Claude / Opus / Sonnet / Haiku / Gemini / DeepSeek / OpenAI / Mistral / Grok / Cohere, con SSE streaming y 3 modos UI (floating / mini / pizarra completa). |
| Voz | STT (Whisper, Google) + TTS (ElevenLabs, Google, Yujin Cloud) | Conversación bidireccional en 10 idiomas con chunked pipelined playback. |
| Reader | Tab del panel + verbo yujin.reader.* | Abrir y navegar PDF / DOCX / XLSX / EPUB / HTML / MD / RTF / CSV / TXT / source por voz. |
El backend (Node 22 + TypeScript estricto) corre como proceso local
(no hay servidor remoto) y expone un POST /api/chat que acepta
streaming SSE o respuesta JSON. Cada llamada al modelo pasa por un
cost router que decide tier eco vs frontier según gate de
razonamiento + clasificador Gemini + estado del workflow.
命CLI -- los 56 subcomandos
Los principales de yf --help (56 en total). Marcadas como core
las que se usan en cada sesión:
| Comando | Función | Estado |
|---|---|---|
yf new <slug> | Scaffold de app React Forge desde template. | core |
yf chat | Lanza el panel browser con el chat + voz. | core |
yf migrate <repo> | Audita o aplica una migración NAC-3 a un proyecto existente (React o HTML). Modos: --audit, --apply, --ai-silent, --ai-assisted. | core |
yf test | Corre el corpus de tests del proyecto activo. | core |
yf ship | Gate de deploy: validate + license + tests + build, emite dist/. | core |
yf license | Activar, inspeccionar o revocar licencia (Polar.sh). | core |
yf doctor | Chequeo de entorno + vault + voz + reader. | core |
yf validate [path] | Verifica estática del proyecto como Forge app válida. | core |
yf pilot install <dir> | Embebe el cockpit Pilot (chat+voz) en una app NAC-3 decorada. | — |
yf gen-tests <dir> | Genera corpus e2e Playwright + Vitest desde el manifest NAC-3. | core |
yf gen-flow-tests <traces> | Genera tests de replay Cypress desde traces de Pilot. | — |
yf figma <file_key> | Scaffold de app NAC-3 desde Figma. | — |
yf vault | Manage credentials encriptadas (AES-256-GCM): 27 slots. | core |
yf scenarios:emit | Emite Playwright (web) + Maestro (RN) desde *.yujin.yaml. | — |
yf review-screens | Galería local de screenshots para review OK / pedir cambio. | — |
yf review-status | CI gate: exit 0 iff todos los screenshots están OK. | — |
yf publish | Autonomous publish a npm + Docker (4 registries: Hub, GCR, ECR, ACR). | core |
yf projects | Registry local de proyectos Yujin con cross-device sync via GitHub. | — |
yf lessons | Server-side learnings (F103 admin-promoted rules). | — |
yf doctrines | Inspecciona / actualiza doctrinas server-side (workflow, yf-commands, gates, nac3-attrs, pizarron, r8-modal, g-doc). | — |
yf tunnel | Cloudflare Tunnel para exponer el panel local (modo paid). | — |
yf deploy | Cloud deploy autónomo. AWS built-in; otros clouds Forge los construye con vos en el chat. | — |
yf app slack|discord|twilio|stripe|sendgrid|mailgun|linear|notion|figma | Wrappers de credenciales de apps con vault. | — |
yf voice | Voz + wake-word config. | — |
yf keys | BYOK keys (brain + voice providers). | core |
yf brain | Configura tier eco vs frontier per-provider. | core |
yf limits | Runtime limits (max tool rounds, timeouts). | — |
yf qa | QA harnesses: brain matrix + scenarios + verbs coverage + brain-matrix-compare. | — |
yf doctrine | Browse doctrinas (docs/doctrine/*.md) que el brain fetchea via yujin.doctrine.discover. | — |
yf manifest | Queries del manifest NAC-3 interno (verbos + namespaces). | — |
yf repo | Inicializa + maneja el repositorio del proyecto activo. | — |
話Chat panel -- 3 modos UI
El panel browser tiene tres formas de mostrarse, configurables con /modo
o por click en el switch del topbar:
- Globito flotante: una burbuja minimalista en la esquina, solo chat, sin pizarra. Para conversaciones rápidas mientras programás en otra ventana.
- Mini panel: chat + history + voz, sin pizarra. Footprint reducido.
- Pizarra completa: chat + pizarrón con renders inline (tablas, charts, BPMN, code blocks, diffs, archivos abiertos como editor tabs). El modo "trabajar en serio".
Encima de eso, dos modos de comunicación (SQ 0.8):
- Didáctico: autonomy max, jerga cero. Forge te lleva el flujo y pregunta solo lo no-obvio.
- Técnico: expone diffs, tool calls, latencias, tier badges.
Switch runtime via /modo en el chat o yf chat --mode. Persistencia per-proyecto.
Eventos SSE emitidos durante un turno
turn_start: brain_tier + provider + model + workflow_phase + reason.tool_use: invocación de un verbo NAC-3 (cuando provider=anthropic-api).tool_result: resultado de la invocación.assistant_text: deltas de texto del modelo.approval_required: cuando un verbo destructivo o approval-required pide modal.shell_output: cuandoyujin.shell.execemite chunks (progressive).turn_complete: cierre, tokens in/out, modelo final, tool_rounds[].
標NAC-3 framework
NAC-3 (Native Agent Contract v3) es el contrato abierto que Yujin estandariza para que agentes IA puedan interactuar con UIs sin caer en clicks DOM ciegos. Cada elemento interactivo lleva tres atributos:
data-nac-id: identificador único cross-target (ej:"login.submit"). En RN se mapea atestID.data-nac-role: rol semántico (action, field, region, option, tab, navigation).data-nac-action: verbo activable (opcional).
Forge expone capacidades NAC-3 baked in:
- Tokens centralizados: color, font, space, radius, shadow.
- Attrs cross-target:
nacId('x.y')producedata-nac-id(web) +testID(RN) atómicamente. - Catálogo sumi-e: 170 sprites canonicos.
- Kanji watermarks: branding asiático en cards y hubs.
- i18n 10 idiomas obligatorio:
es / en / pt / fr / ja / zh / hi / ar / de / it. RTL automático para árabe. - Stateless per-request: cookie o query string, race-safe entre devices.
- Paridad estricta web ⇄ RN: forzada por arquitectura.
動Inventario de verbos internos NAC-3
Forge expone su catálogo de acciones a Claude via una sola tool:
nac3_invoke({verb_id, params}). El manifest interno se entrega como
"stub mode" en el system prompt (verb + policy + label + args_hint).
Para verbos complejos, Claude llama yujin.nac3.discover-schemas para
obtener el schema completo.
Catálogo por namespace
| Namespace | Verbos | Propósito |
|---|---|---|
fs | list-files, find, read-file, write-project-file, mkdir, move, stat | Filesystem (write con approval). |
git | commit, push, pull, log, diff, show, status, branch-list | Operaciones git (write con approval R8). |
github | create-repo, clone-repo, branch-status | Operaciones GitHub via gh CLI. |
pizarron | create-tab, open-file, read-tab | Pizarra: create-tab (ad-hoc), open-file (lectura+edit), read-tab (TTS). |
panel | open-settings, switch-mode, send-message | Control del panel UI. |
reader | open, list-docs, read-section, next-block, search, bookmark-set, bookmark-jump, recap | Lectura de docs en 10 formatos. |
manual | open | Abre el manual HTML del usuario en el idioma activo. |
workflow | state, set, run-step | State machine de 18 pasos + 6 fases. |
doctrine | discover | Fetch on-demand de doctrinas (workflow, gates, yf-commands, nac3-attrs, pizarron, r8-modal, g-doc). |
lifecycle | run-app, stop-app, restart-app | Control del dev-server del adopter app. |
keys | status, set | BYOK keys (booleans only, nunca echo del valor). |
audit | consumers | SQ 7: scan de consumers que leen una estructura compartida. |
consult | nac-spec | RAG sobre docs/SPEC.md. |
manifest | read | Lee el manifest del adopter project. |
project | init, set-root | Inicializa o cambia el root del proyecto activo. |
shell | exec | Comandos arbitrarios. R6: preferir verbo nativo sobre shell. Approval-required. |
json | query, parse, stringify | Manipulación de JSON. |
text | diff | Diff textual. |
url | parse | URL parsing. |
env | list | Listado de env vars relevantes. |
npm | outdated | Chequeo de dependencias outdated. |
mcp | list-bridges, show-tools, discover-tools, toggle, invoke-tool, set-creds | MCP bridge (F101): controla apps MCP externas desde Forge. |
design | list-templates, get-template, list-sumie, get-icon, tokens, override | Yujin Design System: templates + sumi-e icons + token overrides. |
agent | delegate | Delegación a sub-agent (legacy Director path). |
Total: 119 verbos en el manifest interno NAC-3. Todos auditeables, todos con policy (R/A/D/c) explícito. Los destructivos pasan por modal R8.
声Voz -- 10 idiomas, 3 providers
HITO 1 ship: voz bidireccional con chunked pipelined playback (~600 ms a primer audio en secciones largas).
- STT (Whisper API + Google Cloud STT). Auto-detección de idioma.
- TTS (ElevenLabs + Google + Yujin Cloud). Fallback en cascada.
- Voiceprint: enrolment + 5-layer trust model. Liveness challenge en operaciones irreversibles.
- Reader navigation por voz: "siguiente bloque", "leéme esto", "buscá X" en los 10 idiomas.
- Wake-word: configurable (pending GA).
読Reader -- 10 formatos de documento
Cualquier archivo soportado se puede arrastrar al chat o abrir via yujin.reader.open.
Formatos:
txt | plano | md | markdown | source | código (con highlighting) |
html | tag-stripped | rtf | RichText | csv | tabular |
epub | libros | pdf | pdfjs-dist | docx | mammoth |
xlsx | sheetjs | Reader internal docs: 10 idiomas (manuales HTML user-facing). | |||
El reader mantiene cursor + bookmarks + recap buffer persistentes per-doc. Recap a demanda llama Claude para resumir las últimas N secciones.
仕Spec ingest + extract + plan + scaffold
Drop un PDF/DOCX/HTML/MD/etc al chat y Forge ejecuta el pipeline:
- Spec ingest: parser del formato (mismo del reader) extrae texto + estructura.
- Spec extract: Claude lee y produce
{entities, endpoints, components, requirements}. - Spec plan: Claude propone el plan de archivos a generar + fases ordenadas + estimates.
- Scaffold approval: chat te muestra el plan. Vos aprobás o pedís cambios.
- Scaffold writes: Forge escribe los archivos. Log de rollback siempre persistido.
- Rollback: un click revierte el scaffold completo.
蔵Vault BYOK y catálogo de 27 slots
AES-256-GCM at rest con machine fingerprint binding. Atomic writes (0o600). One-shot reveal. Modal vault en el chat panel para configuración guiada.
Categorías de slots (27 total):
- repo: github_token (PAT con scopes
repo + workflow + admin:org). - registry: npm_token, docker_token (4 registries).
- ai: anthropic, openai, google_voice, elevenlabs, gemini, deepseek, mistral, xai, cohere.
- cloud: aws, gcp, azure, polar.
- app: slack, discord, twilio, stripe, sendgrid, mailgun, linear, notion, figma.
- custom: user-defined.
Operaciones:
yf vault list / set / delete / setupyf vault test <slot>-- probes el servicio (GitHub/user, npmwhoami, Anthropic ping, etc).yf vault catalog-- discovery + URLs de obtención de cada credencial.yf vault import-legacy-- scanner de.env / config.json / secrets.json+ migración atómica.
Zero-leak invariant: 20+ patrones de redactor (GitHub, npm, PyPI,
Anthropic, OpenAI, AWS, Stripe, SendGrid, Slack, Discord, Twilio, Linear,
Notion, Figma, GCP private_key, JWT, URL embedded creds). Aplicado a chat,
disk, argv, publish output. GIT_ASKPASS env injection: tokens nunca en
argv ni en URLs.
出Ship + deploy + publish
yf ship: gate completo (validate + license + tests + build) y emitedist/.yf publish npm: usa npm_token del vault via env injection. Cero writes a.npmrc.yf publish docker: 4 registries con auto-detection por nombre de imagen (Hub / GCR / ECR / ACR).yf deploy aws: ECS Fargate rolling update reference, con plan/apply split.yf deploy <other>: GCP / Azure / Fly / Render / Vercel / Netlify / Railway / Heroku / DigitalOcean -- Forge construye el plugin junto al usuario en chat.- GitHub Actions fallback: dispatcher + workflow yaml + status poller.
智Brain tier routing
Cada turno pasa por una cadena de decisión:
- Reasoning gate (pre-LLM): heurística sobre el mensaje del usuario. Eco por default; frontier si attachments, código largo, múltiples partes, etc.
- Turn classifier (Gemini Flash mini-prompt): clasifica el intent en uno de 18 buckets + confianza.
- Workflow phase awareness: si el proyecto está en fase de SQ-defense o phase-ack, escala a frontier.
- Cost router: combina los 3 anteriores + budget restante + brain tier persistido + frontier inertia + provider preferido.
- Provider call: ejecuta contra el provider elegido. Si
--provider claude-code-cli: short-circuit al subprocessclaude -pcon subscription billing.
Cada decisión se loguea en brain_routing.jsonl y se expone en
turn_start via SSE para que el panel pinte el tier badge.
脳Proveedores LLM soportados
| Provider | Modelos | Auth |
|---|---|---|
| Anthropic | Opus 4.7, Sonnet 4.6, Haiku 4.5 | BYOK ANTHROPIC_API_KEY |
| OpenAI | GPT-5 family | BYOK |
| Google Gemini | 2.5 Pro / Flash / Flash Lite | BYOK |
| DeepSeek | chat / coder | BYOK |
| xAI Grok | Grok-3 | BYOK |
| Mistral | large / codestral | BYOK |
| Cohere | command-r-plus | BYOK |
| Yujin Managed | routing dinámico via Cloudflare worker | license activa |
| Claude Code CLI | Tu plan Claude Max via subprocess claude -p | Subscription Max (no API) |
流Workflow + doctrines + SQ
Forge guía al usuario por 6 fases / 18 pasos. Estado persistente en
yujin.forge.json::workflow_state. Verbos:
yujin.workflow.state: query.yujin.workflow.set: persistir respuestas de pasos interactivos (triage / discover / clarify).yujin.workflow.run-step: ejecutar pasos autónomos (legacy_audit, coverage, manual_generate, handoff, metrics).
Doctrines server-side (F103): el modelo puede pedir
yujin.doctrine.discover({slugs:[...]}) on-demand para acceder a:
workflow: phase names + step numbers + complexity tier mapping.yf-commands: catálogo de comandos CLI.gates: G1..G8 (refuse-to-advance) + GS1..GS4 (soft alerts).nac3-attrs: reference + naming conventions.pizarron: doctrina completa de pizarra.r8-modal: doctrina destructive-always-confirm.g-doc: generación de adopter app code.
SQ (Standards of Quality):
- SQ 1: User time is sacred. Atrapa bugs triviales antes que el usuario.
- SQ 2: Zero tech debt desde commit 0.
- SQ 3: ASCII-pure en código de producto.
- SQ 4: Docs in sync con cada commit.
- SQ 5: Match the scope. Bug ask = solo ese bug.
- SQ 6: Reply in user language. Default ES con acentos correctos.
- SQ 7: Producer/consumer symmetry. Audit consumers antes de cambiar shared structure.
- SQ 8: Autonomy / test things yourself. Usá tus tools antes de preguntar al usuario.
語i18n 10 idiomas
Catálogos completos en src/i18n/catalogs/{es,en,pt,fr,ja,zh,hi,ar,de,it}.json.
Catalog-lint pre-commit refuses ningún commit con strings hardcoded o keys
faltantes en cualquier idioma. RTL automático para árabe. Stateless
per-request (cookie / query) -- race-safe entre devices.
試QA harness
Forge ships un harness de QA que el equipo usó para validar la matriz de comportamiento:
- Brain matrix: 168 escenarios con invariants.
yf qa brain-matrix. - Brain matrix compare: A/B entre versiones del prompt o del modelo.
- Scenario DSL cross-runner (
*.yujin.yaml): emite Playwright (web) + Maestro (RN). - Visual regression: pixelmatch 0.5% threshold + 644 baselines blessed.
- Verbs coverage: 100% manifest coverage (119 verbos NAC-3 con al menos un scenario que los invoca).
- Cross-browser: Chromium en cada push, Firefox + WebKit nightly.
橋MCP bridge (F101)
Forge puede controlar apps MCP externas (Claude Desktop, IDEs, custom):
yujin.mcp.list-bridges: lista MCP servers configurados.yujin.mcp.show-tools: muestra tools de un bridge.yujin.mcp.discover-tools: descubre tools nuevas.yujin.mcp.toggle: enable / disable un bridge.yujin.mcp.invoke-tool: ejecuta una tool MCP externa con approval.yujin.mcp.set-creds: configura credenciales del bridge en el vault.
許Licencias + planes
- Polar.sh es el backend de licencias.
- Local cache:
LicenseCache+readLicense/writeLicense+buildCheckoutUrl. - 14-day trial seed:
yf license activate --trial. - Planes: paid / trial / disability / free-public.
- BYOK: vos traés tus API keys de Anthropic/OpenAI/Google. Forge solo cobra por el wrapper + voz + UX. La licencia NO es un BYOK; es tu acceso al producto.
験Las 17 pruebas a las que sometimos a Forge
El 2026-06-06 corrimos una matriz de comportamiento sobre 17 tipos de pedidos: greenfield, bug fix, evolutivo, mobile, refactor, gen tests, code review, doc generation, ambiguo, inseguro, out-of-scope, inconsistente, DB migration, performance, deploy/release. Cada uno con un workspace base preparado (con docs / sin docs / con bug introducido / etc) y un pedido verbatim. Documentado el comportamiento esperado, el comportamiento real de Forge (vía SSE + filesystem diff + token counts) y el gap.
Ver las 17 pruebas con sus reports →
Documento mantenido manualmente. Fuente verificable: github.com/yujinapp/yujin-forge. Última corrida: 2026-06-06.