diff --git a/.changeset/i18n-localization-foundation.md b/.changeset/i18n-localization-foundation.md
new file mode 100644
index 0000000000..5b2d8a4618
--- /dev/null
+++ b/.changeset/i18n-localization-foundation.md
@@ -0,0 +1,9 @@
+---
+"@runfusion/fusion": minor
+---
+
+Add a localization (i18n) foundation across the UI. Introduces react-i18next-backed translation for both the dashboard and the terminal UI, with English as the source language and Simplified Chinese, Traditional Chinese, French, and Spanish as target locales.
+
+- New `@fusion/i18n` package holding the authored catalogs and shared i18next configuration (namespace split, script-aware zh-CN/zh-TW fallback, plural setup).
+- A `language` preference (`fusion settings`) and a Settings language switcher; the CLI resolves locale from `--lang`, settings, then environment.
+- An `i18next-cli` workflow (`extract`/`sync`/`types`/`status`/`lint`) so adding a future language is a translate-only, near-zero-code operation.
diff --git a/.gitignore b/.gitignore
index 7362b6f83b..149f014bc0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,10 @@ dist/
dist-electron/
*.tsbuildinfo
+# Generated i18n catalogs synced into the dashboard tree from @fusion/i18n
+# (authored source-of-truth lives in packages/i18n/locales/)
+packages/dashboard/app/locales/
+
# Desktop packaging artifacts
*.dmg
*.dmg.blockmap
diff --git a/AGENTS.md b/AGENTS.md
index 401c38436d..e876ae834d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -174,7 +174,7 @@ Scoped exception (FN-5819): shared-branch-group members (`branchContext.assignme
- `./docs/soft-delete-verification-matrix.md` — mandatory soft-delete verification matrix.
- `./docs/cli-reference.md` — CLI and terminal UI reference.
- `./docs/contributing.md` — contributing conventions and release-adjacent context.
-- `./docs/solutions/` — documented solutions to past problems (bugs, patterns, conventions), organized by category with YAML frontmatter (`module`, `tags`, `problem_type`). Relevant when implementing or debugging in documented areas.
+- `./docs/solutions/` — documented solutions to past problems (bugs, architecture patterns, best practices, conventions), organized by category with YAML frontmatter (`category`, `module`, `tags`, `problem_type`, `applies_when`). Relevant when implementing or debugging in documented areas.
- `./CONCEPTS.md` — shared domain vocabulary (entities, named processes, status concepts). Relevant when orienting to the codebase or discussing domain concepts.
### Lazy-Loaded Heavy Views
diff --git a/CONCEPTS.md b/CONCEPTS.md
index 081c76ab4f..8f4df9fce6 100644
--- a/CONCEPTS.md
+++ b/CONCEPTS.md
@@ -2,6 +2,20 @@
Shared domain vocabulary for this project — entities, named processes, and status concepts with project-specific meaning. Seeded with core domain vocabulary, then accretes as ce-compound and ce-compound-refresh process learnings; direct edits are fine. Glossary only, not a spec or catch-all.
+## Settings & Localization
+
+### Surface
+One of Fusion's user-facing frontends — the browser dashboard and the terminal TUI. Surfaces have independent runtimes and rendering stacks but are expected to share user-level state: a setting changed on one surface (theme, language) carries to the other.
+
+### Global Settings
+User-level settings persisted server-side that apply across all Surfaces and all projects, as opposed to per-project settings. Values are validated at the write boundary — an invalid value is dropped rather than persisted — so every reader can trust what it loads.
+
+### Three-Tier Setting
+The named persistence pattern for a user preference on the dashboard: a device-local cache for instant reads, a write-through to Global Settings so other Surfaces see it, and a hydrate-on-mount from the server when no local value exists. A local or in-flight user choice always wins over server hydration, and changes propagate to other open tabs.
+
+### Supported Locale
+A language tag in the closed set Fusion ships translations for. Any external tag (browser, environment, flag) is normalized into this set or rejected — never passed through raw. Chinese tags route by script and region so Traditional-script users are never silently served Simplified, and the two Chinese variants never collapse into a generic base tag.
+
## Missions
### Relationships
diff --git a/README.es.md b/README.es.md
new file mode 100644
index 0000000000..a69739fc7c
--- /dev/null
+++ b/README.es.md
@@ -0,0 +1,469 @@
+
+
+
+
+# Fusion
+
+### De idea inicial a código en producción — automáticamente.
+
+**Orquestador de agentes multinodo** — tareas, agentes, misiones, git, archivos y worktrees, con cualquier modelo, local o en la nube.
+
+[**runfusion.ai →**](https://runfusion.ai) · [Docs](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
+
+[English](./README.md) · [简体中文](./README.zh-CN.md) · [繁體中文](./README.zh-TW.md) · [Français](./README.fr.md) · **Español** · [한국어](./README.ko.md)
+
+*Esta es una traducción automática; el README en inglés es el documento canónico.*
+
+[](./LICENSE)
+[](https://www.npmjs.com/package/@runfusion/fusion)
+[](https://discord.gg/ksrfuy7WYR)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+## Todo tu entorno de desarrollo. En una sola pantalla.
+
+Describe una tarea en lenguaje natural. Un agente de planificación lee tu proyecto, comprende el contexto y escribe un plan completo en `PROMPT.md` — pasos, alcance de archivos, criterios de aceptación. Luego Fusion planifica, revisa, ejecuta y vuelve a revisar, en un worktree de git aislado, con una aprobación humana donde tú la necesites.
+
+Un tablero. Controlado desde cualquier lugar. Laptop, Mac mini, servidor Linux, VM en la nube, teléfono — todo conectado.
+
+> Como Trello, pero tus tareas son especificadas, ejecutadas y entregadas por IA. Construido sobre el gran trabajo de [dustinbyrne/kb](https://github.com/dustinbyrne/kb).
+
+---
+
+## El flujo
+
+```
+ ① Describir ② Planificación ③ El tablero ④ Worktree aislado
+ ───────────── ───────────── ───────────── ─────────────────────
+ "Agregar modo → El agente escribe → Plan → Revisión → → rama fusion/FN-123
+ oscuro al PROMPT.md Ejecución → concurrente, cero
+ panel de (pasos, alcance, Revisión (por conflictos de
+ configuración" aceptación) paso, hasta archivos
+ terminar)
+```
+
+### Ve cada paso antes del merge
+
+
+
+
+
+Cada tarea muestra su plan, sus revisiones, sus diffs y sus cambios de archivos en tiempo real. Entra a una tarea activa y ajusta la dirección, refina las restricciones, pausa o reescribe el prompt.
+
+---
+
+## Qué lo hace diferente
+
+| | |
+|---|---|
+| 🧠 **Planificación con IA** | Describe una tarea en lenguaje natural. Los agentes de planificación la convierten en un plan `PROMPT.md` con pasos, alcance de archivos y criterios de aceptación. |
+| 🔁 **Puertas de flujo** | Plan → Revisión → Ejecución → Revisión en cada paso. Las puertas previas al merge bloquean código deficiente; las posteriores ejecutan verificaciones informativas. |
+| 🌳 **Aislamiento con worktrees** | Cada tarea corre en su propia rama y worktree (`fusion/{task-id}`). Tareas en paralelo. Cero conflictos. Delegación opcional a [worktrunk](https://github.com/max-sixty/worktrunk) mediante [`worktrunk.enabled`](./docs/settings-reference.md#worktree-backend-settings) (ver [abstracción WorktreeBackend](./docs/architecture.md#worktreebackend-abstraction)). |
+| ⚡ **Merge inteligente** | ¿Pasa todas las puertas? Fusion hace squash-merge y avanza. Habilita aprobación manual en cualquier punto. |
+| 🛰️ **Malla multinodo** | Laptop, Mac mini, servidor Linux, VM en la nube, teléfono — todos sincronizados. Escritorio, móvil, web. |
+| 🧩 **Cualquier modelo** | Anthropic, OpenAI, Ollama y más. Local y en la nube coexisten. |
+| 🏢 **Empresas de agentes** | Importa equipos predefinidos — más de 440 agentes en 16 empresas — y ejecútalos de forma autónoma durante semanas. |
+| 📬 **Mensajería entre agentes** | Buzón incorporado entre agentes. Delega, aclara, coordina. |
+| 🗨️ **Salas de chat multiagente** | Conversaciones grupales con alcance de proyecto donde varios miembros de la sala pueden responder: los miembros mencionados son respondedores directos, y miembros ambientales adicionales pueden responder hasta un límite. Actualmente **experimental** — habilita `chatRooms` en **Configuración → Funciones experimentales → Salas de chat**. ([Documentación de salas de chat](./docs/dashboard-guide.md#chat-rooms)) |
+| 🗺️ **Misiones** | Planificación jerárquica (Misión → Hito → Slice → Característica → Tarea) con piloto automático y contratos de validación. |
+| 🔬 **Investigación** | Ejecuciones de investigación delimitadas con búsqueda web, GitHub, documentación local y síntesis con LLM (además de soporte integrado en tiempo de ejecución para WebSearch/WebFetch en flujos de planificación y síntesis cuando está disponible). Convierte los hallazgos en tareas. ([Documentación](./docs/research.md)) |
+| 🧪 **Automejora** | Los agentes reflexionan sobre su propio resultado y actualizan sus prompts a medida que aprenden tu base de código. |
+| 🔓 **Código abierto. MIT.** | Sin dependencia de proveedor. Ejecútalo en tu propio hardware. Se actualiza semanalmente. |
+
+---
+
+## Cómo funciona
+
+```mermaid
+graph TD
+ H((Tú)) -->|idea inicial| T["Planificación planificación automática"]
+ T --> TD["Pendiente programado para ejecución"]
+ TD --> IP["En progreso para cada paso: planificar, revisar, ejecutar, revisar"]
+
+ subgraph IP["En progreso"]
+ direction TD
+ NS([Iniciar paso]) --> P[Planificar]
+ P --> R1{Revisar}
+ R1 -->|revisar| P
+ R1 -->|aprobar| E[Ejecutar]
+ E --> R2{Revisar}
+ R2 -->|revisar| E
+ R2 -->|siguiente paso| NS
+ R2 -->|repensar| P
+ end
+
+ R2 -->|listo| IR["En revisión listo para merge, o completado automáticamente"]
+ IR -->|squash merge directo o PR mergeado| D["Listo"]
+
+ style H fill:#161b22,stroke:#8b949e,color:#e6edf3
+ style T fill:#2d2006,stroke:#d29922,color:#d29922
+ style TD fill:#0d2044,stroke:#58a6ff,color:#58a6ff
+ style IP fill:#1a0d2e,stroke:#bc8cff,color:#bc8cff
+ style P fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style R1 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style E fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style R2 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style NS fill:#1a0d2e,stroke:#bc8cff,color:#bc8cff
+ style IR fill:#0d2d16,stroke:#3fb950,color:#3fb950
+ style D fill:#1a1a1a,stroke:#8b949e,color:#8b949e
+```
+
+Las tareas con dependencias se procesan secuencialmente. Las tareas independientes se ejecutan en paralelo. Opcionalmente puedes requerir aprobación manual antes de que las tareas pasen de Planificación a Pendiente (configuración `requirePlanApproval`).
+
+---
+
+## Multinodo. Un tablero. Todas las plataformas.
+
+
+
+Laptop, Mac mini, servidor Linux, VM en la nube, teléfono — cada nodo es un par. El estado de tus tareas, agentes, registros y diffs permanecen sincronizados en toda la malla. El mismo Fusion se distribuye como:
+
+- 🖥️ **Aplicación de escritorio** — Electron para **macOS** (Intel + Apple Silicon), **Windows** 10/11 y **Linux**
+- 📱 **Aplicación móvil** — Capacitor para **iOS/iPadOS** y **Android** ([MOBILE.md](./MOBILE.md))
+- 🌐 **Panel web** — cualquier navegador moderno, servido desde el daemon `fn dashboard`
+- 🔌 **CLI** — binario `fn` + extensión para flujos de trabajo centrados en la terminal
+
+Inicia el daemon en cualquier nodo, conecta tus otros dispositivos y el tablero te sigue a todas partes.
+
+---
+
+## Ejecuta una empresa de agentes
+
+
+
+
+
+
+
+Importa un equipo. Ejecútalo de forma autónoma durante semanas. **Más de 440 agentes en 16 empresas**, preparados para misiones, buzones y delegación entre agentes.
+
+```bash
+npx companies.sh add paperclipai/companies/gstack
+```
+
+---
+
+## Compatible con las herramientas que ya usas.
+
+Fusion se integra con las herramientas que ya conoces. **Hermes**, **Paperclip** y **OpenClaw** vienen como plugins de primera clase — enruta cualquier espacio de trabajo al entorno de ejecución que mejor se adapte a la tarea. Y cualquier empresa de agentes de Paperclip se importa con un solo comando.
+
+
+
+
+
+### [Hermes](https://hermes-agent.nousresearch.com) `experimental`
+
+Nous Research
+
+El agente autónomo de código abierto de **Nous Research**. Instala el plugin de Hermes y ejecuta agentes a través de Hermes para trabajos de larga duración con contexto creciente — enruta cualquier espacio de trabajo de Fusion hacia él.
+
+### OpenClaw `experimental`
+
+El soporte del entorno de ejecución de OpenClaw está disponible como plugin experimental (`fusion-plugin-openclaw-runtime`) para paridad en el descubrimiento y la configuración del entorno. Configura los agentes con `runtimeConfig.runtimeHint: "openclaw"` después de instalar el plugin.
+
+
+
+
+
+
+
+### [Paperclip](https://paperclip.ing) `experimental`
+
+paperclip.ing
+
+El plano de control humano para la mano de obra de IA. Instala el plugin de Paperclip para ejecutar agentes a través de Paperclip dentro de Fusion.
+
+Fusion también soporta nativamente el estándar de empresa de agentes **[`companies.sh`](https://github.com/paperclipai/companies)**: importa un equipo predefinido — **más de 440 agentes en 16 empresas** — y déjalos coordinarse a través del buzón, las misiones y las puertas de flujo de Fusion durante semanas de trabajo autónomo. El mismo formato de empresa, los mismos agentes, las mismas habilidades que Paperclip.
+
+```bash
+npx companies.sh add paperclipai/companies/gstack
+```
+
+
+
+> **Hermes**, **Paperclip** y **OpenClaw** son plugins de entorno de ejecución **experimentales** — las APIs y los formatos de comunicación pueden cambiar entre versiones menores.
+
+---
+
+## Inicio rápido
+
+**Sin instalación, directo desde npm:**
+
+```bash
+npx runfusion.ai
+```
+
+Esto lanza el panel. Los subcomandos se pasan directamente: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (O de forma explícita: `npx @runfusion/fusion dashboard`.)
+
+**Instalador en una línea** (macOS y Linux — usa Homebrew automáticamente, recurre a npm como alternativa):
+
+```bash
+curl -fsSL https://runfusion.ai/install.sh | sh
+fusion dashboard
+```
+
+**Homebrew** (macOS y Linux):
+
+```bash
+brew tap runfusion/fusion
+brew install fusion
+fusion dashboard # o: fn dashboard
+```
+
+O en una sola línea (añade el tap automáticamente): `brew install runfusion/fusion/fusion`.
+
+**npm global**:
+
+```bash
+npm install -g @runfusion/fusion
+fn dashboard # o: fusion dashboard
+```
+
+**Desde un clon** (para desarrollo):
+
+```bash
+pnpm dev dashboard
+```
+
+Luego haz clic en la URL `Open:` que aparece en la terminal. Incorpora un token de portador
+(`http://localhost:4040/?token=fn_...`) que el navegador guarda en
+`localStorage` en la primera visita y reutiliza automáticamente. En el lado del
+servidor, Fusion ahora persiste el token del panel/daemon en
+`~/.fusion/settings.json` en la primera ejecución autenticada y lo reutiliza en
+inicios posteriores a menos que lo sobreescribas (`--token`, `FUSION_DASHBOARD_TOKEN`,
+`FUSION_DAEMON_TOKEN`) o deshabilites la autenticación con `--no-auth`. Consulta
+[Referencia CLI → fn dashboard → Autenticación](./docs/cli-reference.md#fn-dashboard)
+para conocer la precedencia completa y las opciones de restablecimiento/revocación.
+
+### Configuración inicial
+
+En el primer lanzamiento, Fusion abre el **asistente de incorporación** con tres pasos guiados:
+
+1. **Configuración de IA** — Usa una lista de proveedores simplificada para el inicio rápido (proveedores recomendados más los ya conectados), luego expande la **Configuración avanzada de proveedores** solo si necesitas proveedores adicionales o detalles de configuración. Solo necesitas un proveedor para comenzar. Las entradas de proveedor obsoletas de Google Gemini CLI / Antigravity están intencionalmente ocultas; las rutas de clave API de Google/Gemini, Google Generative AI, Vertex y Cloud Code permanecen disponibles.
+2. **GitHub (Opcional)** — Conecta GitHub para importar issues y gestionar PRs
+3. **Primera tarea** — Crea tu primera tarea o impórtala desde GitHub (si no hay ningún proyecto activo, la incorporación primero te pedirá que registres/selecciones un directorio de proyecto)
+
+El asistente se puede **descartar y no bloquea** — haz clic en **Omitir por ahora** para usar el panel de inmediato. Vuélvelo a activar más tarde desde **Configuración → Autenticación → Reabrir guía de incorporación**.
+
+### Móvil
+
+Para el flujo de trabajo con Capacitor + PWA, consulta [MOBILE.md](./MOBILE.md).
+
+---
+
+## Documentación
+
+| Guía | Qué cubre |
+|---|---|
+| [Primeros pasos](./docs/getting-started.md) | Instalación e incorporación |
+| [Guía del panel](./docs/dashboard-guide.md) | Vistas de tablero/lista, terminal, gestor de git |
+| [Gestión de tareas](./docs/task-management.md) | Ciclo de vida de la tarea y comandos CLI |
+| [Referencia CLI](./docs/cli-reference.md) | Referencia completa de comandos y daemon |
+| [Referencia de configuración](./docs/settings-reference.md) | Opciones de configuración |
+| [Arquitectura](./docs/architecture.md) | Funcionamiento interno del sistema |
+| [Agentes](./docs/agents.md) | Gestión de agentes, creación, latido |
+| [Pasos del flujo](./docs/workflow-steps.md) | Puertas de calidad, plantillas, fases |
+| [Misiones](./docs/missions.md) | Jerarquía de misiones, planificación, piloto automático |
+| [Multiproyecto](./docs/multi-project.md) | Registro central, modos de aislamiento |
+| [Docker](./docs/docker.md) | Despliegue en contenedores |
+
+---
+
+## Características principales
+
+- **Planificación con IA** — El agente de planificación genera un `PROMPT.md` detallado con pasos, alcance de archivos y criterios de aceptación
+- **Ejecución paso a paso** — Ciclo Plan → Revisión → Ejecución → Revisión para cada paso de la tarea
+- **Aislamiento con worktrees de git** — Cada tarea corre en su propio worktree (rama `fusion/{task-id}`)
+- **Pasos del flujo** — Puertas de calidad configurables (previas al merge: bloquean el merge; posteriores al merge: informativas)
+- **Integración con GitHub** — Importar issues, crear PRs, insignias en tiempo real de PR/issue
+- **Panel** — Tablero kanban en tiempo real, gestión de agentes, terminal, gestor de git, planificador de misiones
+- **Misiones** — Planificación jerárquica (Misión → Hito → Slice → Característica → Tarea) con piloto automático, contratos de validación, reintentos de corrección de características y semántica de entrega bloqueada
+- **Multiproyecto** — Gestiona múltiples proyectos desde una sola instalación con aislamiento de proyectos
+- **Mensajería entre agentes** — Sistema de mensajería integrado para la coordinación entre agentes y usuarios
+- **Salas de chat (experimental)** — Chat grupal con alcance de proyecto donde los miembros mencionados se enrutan como respondedores directos y miembros ambientales adicionales pueden responder hasta un límite (habilitar en **Configuración → Funciones experimentales → Salas de chat**; detalles en [Guía del panel → Salas de chat](./docs/dashboard-guide.md#chat-rooms))
+
+### Autenticación de proveedores
+
+Fusion soporta autenticación basada en OAuth para proveedores de IA configurados en **Configuración → Autenticación**. Para la mayoría de los proveedores OAuth, cuando se accede al panel desde un host que no es localhost (nodo remoto, host/IP de LAN o proxy inverso), las URLs de inicio de sesión del proveedor se reescriben para enrutar los callbacks de OAuth a través de un endpoint puente (`/api/auth/oauth-callback`) de modo que las redirecciones lleguen a la sesión de navegador activa.
+
+- **Anthropic (Claude)** — Usa un flujo de código de autorización pegado en Configuración/incorporación: inicia sesión y pega la URL de redirección final (o el código) de vuelta en Fusion para completar el inicio de sesión
+- **OpenAI Codex** — Usa el mismo flujo de código de autorización pegado con validación segura de estado
+- **Factory AI — mediante Droid CLI** *(opcional)* — requiere instalación local de Droid CLI + `droid auth login`; la detección sigue la ruta efectiva del binario en tiempo de ejecución (predeterminado `droid`, o `droidBinaryPath` del plugin cuando está configurado), luego habilita en **Configuración → Autenticación** y reinicia Fusion
+- **llama.cpp — mediante servidor HTTP** *(opcional)* — configura la URL de tu servidor llama.cpp (predeterminado `http://127.0.0.1:8080`) y la clave API opcional, luego habilita en **Configuración → Autenticación**
+- **Otros proveedores** — Autentícate mediante entrada de clave API en Configuración (incluidas la clave API de Google/Gemini, Google Generative AI, Vertex y los alias de Cloud Code)
+
+### Sistema de modelos
+
+Fusion usa una jerarquía de modelos de doble alcance con cinco canales independientes. La configuración global define los valores predeterminados de referencia; la configuración de proyecto proporciona sobreescrituras por proyecto.
+
+| Canal | Propósito | Claves de referencia global | Claves de sobreescritura por proyecto |
+|------|---------|---------------------|----------------------|
+| Executor | Agente de ejecución de tareas | `executionGlobalProvider` + `executionGlobalModelId` | `executionProvider` + `executionModelId` |
+| Planning | Agente de planificación de tareas | `planningGlobalProvider` + `planningGlobalModelId` | `planningProvider` + `planningModelId` |
+| Validator | Revisor de plan/código | `validatorGlobalProvider` + `validatorGlobalModelId` | `validatorProvider` + `validatorModelId` |
+| Title Summarization | Generación automática de títulos | `titleSummarizerGlobalProvider` + `titleSummarizerGlobalModelId` | `titleSummarizerProvider` + `titleSummarizerModelId` |
+| Workflow Step Refinement | Refinamiento de prompts con IA | (usa `defaultProvider`/`defaultModelId`) | (usa `modelProvider`/`modelId` en WorkflowStep) |
+
+**Sobreescrituras por tarea:** Las tareas pueden sobreescribir los canales de executor, validator y planning con campos de modelo por tarea (`modelProvider`/`modelId`, `validatorModelProvider`/`validatorModelId`, `planningModelProvider`/`planningModelId`).
+
+**Precedencia:** Por tarea → Sobreescritura de proyecto → Canal global → `defaultProvider`/`defaultModelId` → Resolución automática.
+
+Para la documentación completa de configuración, consulta la [Referencia de configuración](./docs/settings-reference.md).
+
+### Tareas programadas / automatizaciones
+
+Fusion soporta automatización de tareas programadas a través de los endpoints `/api/automations`. Las automatizaciones pueden ejecutar comandos de shell o flujos de trabajo de múltiples pasos en un horario configurable.
+
+#### Alcance de la programación
+
+Las automatizaciones y rutinas pueden ejecutarse en dos alcances:
+
+- **Global** — Se ejecuta en todos los proyectos. Úsalo para mantenimiento entre proyectos, copias de seguridad o reportes unificados.
+- **Proyecto** — Se ejecuta solo dentro de un proyecto específico. Úsalo para CI, pruebas o tareas de despliegue específicas del proyecto.
+
+Cuando creas una programación sin elegir un alcance, Fusion usa por defecto el **alcance de proyecto** con el ID de proyecto `default` por compatibilidad con versiones anteriores.
+
+Para especificar un alcance de forma explícita:
+- En el modal de **Tareas programadas** del panel, usa el selector **Global / Proyecto**.
+- Mediante la API, pasa `?scope=global` o `?scope=project&projectId=` en los endpoints de automatización/rutina.
+
+**Reglas de resolución de alcance:**
+- `scope=global` siempre se resuelve en el canal de automatización/rutina global, independientemente del proyecto activo.
+- `scope=project` requiere un `projectId`. Si se omite, vuelve a `"default"`.
+- Las operaciones de CRUD, ejecución, activación/desactivación y webhook están estrictamente aisladas por alcance: una programación global no puede ser modificada desde una solicitud de alcance de proyecto, y viceversa.
+
+**Orientación operativa para configuraciones multiproyecto:**
+- Prefiere programaciones **globales** para infraestructura compartida (p. ej., copias de seguridad nocturnas, extracción de información de memoria).
+- Prefiere programaciones de **proyecto** para automatización por repositorio (p. ej., ejecutores de pruebas por proyecto, hooks de despliegue).
+- Los canales global y de proyecto son sondeados de forma independiente por el motor, por lo que las ejecuciones pendientes en un canal no bloquean al otro.
+
+#### Automatizaciones
+
+| Endpoint | Método | Descripción |
+|---------|--------|-------------|
+| `/api/automations` | GET | Listar todas las automatizaciones (filtradas por alcance si se especifica) |
+| `/api/automations` | POST | Crear automatización (el alcance predeterminado es `project`) |
+| `/api/automations/:id` | GET | Obtener automatización por ID |
+| `/api/automations/:id` | PATCH | Actualizar automatización |
+| `/api/automations/:id` | DELETE | Eliminar automatización |
+| `/api/automations/:id/run` | POST | Activar ejecución manual |
+| `/api/automations/:id/toggle` | POST | Activar/desactivar |
+| `/api/automations/:id/steps/reorder` | POST | Reordenar pasos de la automatización |
+
+#### Rutinas
+
+Las rutinas son tareas de agente de IA activadas por programaciones cron, webhooks o ejecución manual. Las rutinas comparten el mismo modelo de alcance global/proyecto que las automatizaciones.
+
+| Endpoint | Método | Descripción |
+|---------|--------|-------------|
+| `/api/routines` | GET | Listar todas las rutinas (filtradas por alcance si se especifica) |
+| `/api/routines` | POST | Crear rutina (el alcance predeterminado es `project`) |
+| `/api/routines/:id` | GET | Obtener rutina por ID |
+| `/api/routines/:id` | PATCH | Actualizar rutina |
+| `/api/routines/:id` | DELETE | Eliminar rutina |
+| `/api/routines/:id/run` | POST | Activar manualmente |
+| `/api/routines/:id/trigger` | POST | Activación manual canónica |
+| `/api/routines/:id/runs` | GET | Obtener historial de ejecuciones |
+| `/api/routines/:id/webhook` | POST | Activación por webhook (verificación de firma compatible) |
+
+---
+
+## Ejemplos rápidos de CLI
+
+```bash
+fn task create "Fix the login bug" # Entrada rápida → planificación
+fn task plan "Build auth system" # Planificación guiada por IA
+fn task import owner/repo --labels bug # Importar issues de GitHub
+fn task show FN-001 # Ver detalles de la tarea
+fn task logs FN-001 --follow # Transmitir registros de ejecución
+fn task steer FN-001 "Use TypeScript" # Guiar al agente durante la ejecución
+
+fn project add my-app /path/to/app # Registrar un proyecto
+fn project list # Listar todos los proyectos
+
+fn settings set maxConcurrent 4 # Configurar ajustes
+fn settings export # Exportar configuración
+
+fn mission create "Auth System" "Build auth" # Crear misión
+fn mission activate-slice # Activar un slice
+
+fn skills search react # Buscar en skills.sh
+fn skills install firebase/agent-skills # Instalar habilidades de agente
+```
+
+---
+
+## Paquetes
+
+| Paquete | Descripción |
+|---------|-------------|
+| `@fusion/core` | Modelo de dominio — tareas, columnas del tablero, almacén SQLite |
+| `@fusion/dashboard` | Interfaz web — servidor Express + tablero kanban con SSE |
+| `@fusion/engine` | Motor de IA — planificación, ejecución, programación, pasos del flujo |
+| `@runfusion/fusion` | CLI + extensión — publicado en npm |
+
+---
+
+## Desarrollo
+
+```bash
+pnpm install # Instalar dependencias
+pnpm local # Iniciar panel/API local en un puerto distinto al 4040
+pnpm local -- --engine # Iniciar panel local con el motor de IA
+pnpm build # Compilar paquetes del espacio de trabajo predeterminado (excluye escritorio/móvil)
+pnpm build:all # Compilar todos los paquetes (incluyendo escritorio/móvil)
+pnpm dev dashboard # Ejecutar panel + motor de IA
+pnpm dev:ui # Solo el panel (sin motor de IA)
+pnpm lint # Verificar estilo de código en todos los paquetes
+pnpm typecheck # Verificar tipos en todos los paquetes
+pnpm test # Ejecutar todas las pruebas
+```
+
+### Compilar un ejecutable independiente
+
+Compila un binario `fn` autocontenido usando [Bun](https://bun.sh/):
+
+```bash
+pnpm build:exe # Compilar para la plataforma actual
+pnpm build:exe:all # Compilación cruzada para todas las plataformas
+```
+
+---
+
+## Licencia
+
+MIT — código abierto, sin dependencia de proveedor. Ver [LICENSE](./LICENSE).
+
+
+
+**[runfusion.ai →](https://runfusion.ai)**
+
+
diff --git a/README.fr.md b/README.fr.md
new file mode 100644
index 0000000000..ed18bbd973
--- /dev/null
+++ b/README.fr.md
@@ -0,0 +1,469 @@
+
+
+
+
+# Fusion
+
+### De l'idée brute au code de production — automatiquement.
+
+**Orchestrateur d'agents multi-nœuds** — tâches, agents, missions, git, fichiers et worktrees, avec n'importe quel modèle, local ou cloud.
+
+[**runfusion.ai →**](https://runfusion.ai) · [Docs](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
+
+[English](./README.md) · [简体中文](./README.zh-CN.md) · [繁體中文](./README.zh-TW.md) · **Français** · [Español](./README.es.md) · [한국어](./README.ko.md)
+
+*Traduction automatique — le README anglais fait foi.*
+
+[](./LICENSE)
+[](https://www.npmjs.com/package/@runfusion/fusion)
+[](https://discord.gg/ksrfuy7WYR)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+## Tout votre environnement de développement. Sur un seul écran.
+
+Décrivez une tâche en langage naturel. Un agent de planification lit votre projet, comprend le contexte et rédige un plan `PROMPT.md` complet — étapes, périmètre des fichiers, critères d'acceptation. Fusion planifie ensuite, révise, exécute et révise à nouveau, dans un worktree git isolé, avec une validation humaine où vous le souhaitez.
+
+Un tableau. Contrôlé de n'importe où. Laptop, Mac mini, serveur Linux, VM cloud, téléphone — tous connectés.
+
+> Comme Trello, mais vos tâches sont spécifiées, exécutées et livrées par l'IA. Construit sur l'excellent travail de [dustinbyrne/kb](https://github.com/dustinbyrne/kb).
+
+---
+
+## Le flux
+
+```
+ ① Décrire ② Planification ③ Le tableau ④ Worktree isolé
+ ───────────── ───────────── ───────────── ─────────────────────
+ "Ajouter un → L'agent rédige → Plan → Révision → → branche fusion/FN-123
+ bouton mode PROMPT.md Exécution → Révision concurrent, zéro
+ sombre dans le (étapes, périmètre, (par étape, jusqu'à conflit de fichiers
+ panneau réglages" acceptation) la fin)
+```
+
+### Voir chaque étape avant la fusion
+
+
+
+
+
+Chaque tâche affiche son plan, ses révisions, ses diffs et ses modifications de fichiers en temps réel. Intervenez sur une tâche active pour réorienter, affiner les contraintes, mettre en pause ou reformuler.
+
+---
+
+## Ce qui la différencie
+
+| | |
+|---|---|
+| 🧠 **Planification IA** | Décrivez une tâche en langage naturel. Les agents de planification la transforment en plan `PROMPT.md` avec étapes, périmètre des fichiers et critères d'acceptation. |
+| 🔁 **Portes de workflow** | Plan → Révision → Exécution → Révision à chaque étape. Les portes pré-fusion bloquent le mauvais code ; les portes post-fusion effectuent des vérifications informatives. |
+| 🌳 **Isolation par worktree** | Chaque tâche s'exécute dans sa propre branche et son propre worktree (`fusion/{task-id}`). Tâches parallèles. Zéro conflit. Délégation [worktrunk](https://github.com/max-sixty/worktrunk) optionnelle via [`worktrunk.enabled`](./docs/settings-reference.md#worktree-backend-settings) (voir [abstraction WorktreeBackend](./docs/architecture.md#worktreebackend-abstraction)). |
+| ⚡ **Fusion intelligente** | Toutes les portes franchies ? Fusion effectue un squash-merge et passe à la suite. Activez la validation manuelle où vous le souhaitez. |
+| 🛰️ **Maillage multi-nœuds** | Laptop, Mac mini, serveur Linux, VM cloud, téléphone — tout synchronisé. Bureau, mobile, web. |
+| 🧩 **N'importe quel modèle** | Anthropic, OpenAI, Ollama et plus encore. Local et cloud coexistent. |
+| 🏢 **Entreprises d'agents** | Importez des équipes prédéfinies — plus de 440 agents répartis dans 16 entreprises — et faites-les fonctionner de façon autonome pendant des semaines. |
+| 📬 **Messagerie inter-agents** | Boîte aux lettres intégrée entre agents. Déléguer, clarifier, coordonner. |
+| 🗨️ **Salles de discussion multi-agents** | Conversations de groupe à portée de projet où plusieurs membres peuvent répondre : les membres mentionnés sont des répondants directs, et des membres ambiants supplémentaires peuvent répondre jusqu'à un certain plafond. Actuellement **expérimental** — activez `chatRooms` dans **Paramètres → Fonctionnalités expérimentales → Salles de discussion**. ([Documentation des salles de discussion](./docs/dashboard-guide.md#chat-rooms)) |
+| 🗺️ **Missions** | Planification hiérarchique (Mission → Jalon → Tranche → Fonctionnalité → Tâche) avec pilotage automatique et contrats de validation. |
+| 🔬 **Recherche** | Exécutions de recherche délimitées avec recherche web, GitHub, docs locaux et synthèse LLM (plus prise en charge intégrée de WebSearch/WebFetch dans les flux de planification et de synthèse lorsque disponible). Transformez les résultats en tâches. ([Docs](./docs/research.md)) |
+| 🧪 **Auto-amélioration** | Les agents réfléchissent à leurs propres résultats et mettent à jour leurs prompts au fur et à mesure qu'ils apprennent votre base de code. |
+| 🔓 **Open source. MIT.** | Pas d'enfermement propriétaire. Faites-le tourner sur votre propre matériel. Livraisons hebdomadaires. |
+
+---
+
+## Comment ça fonctionne
+
+```mermaid
+graph TD
+ H((Vous)) -->|idée brute| T["Planification planification automatique"]
+ T --> TD["À faire programmé pour l'exécution"]
+ TD --> IP["En cours pour chaque étape : plan, révision, exécution, révision"]
+
+ subgraph IP["En cours"]
+ direction TD
+ NS([Commencer l'étape]) --> P[Plan]
+ P --> R1{Révision}
+ R1 -->|réviser| P
+ R1 -->|approuver| E[Exécuter]
+ E --> R2{Révision}
+ R2 -->|réviser| E
+ R2 -->|étape suivante| NS
+ R2 -->|repenser| P
+ end
+
+ R2 -->|terminé| IR["En révision prêt à fusionner, ou auto-complétion"]
+ IR -->|squash merge direct ou PR fusionnée| D["Terminé"]
+
+ style H fill:#161b22,stroke:#8b949e,color:#e6edf3
+ style T fill:#2d2006,stroke:#d29922,color:#d29922
+ style TD fill:#0d2044,stroke:#58a6ff,color:#58a6ff
+ style IP fill:#1a0d2e,stroke:#bc8cff,color:#bc8cff
+ style P fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style R1 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style E fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style R2 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style NS fill:#1a0d2e,stroke:#bc8cff,color:#bc8cff
+ style IR fill:#0d2d16,stroke:#3fb950,color:#3fb950
+ style D fill:#1a1a1a,stroke:#8b949e,color:#8b949e
+```
+
+Les tâches avec dépendances sont traitées séquentiellement. Les tâches indépendantes s'exécutent en parallèle. Vous pouvez exiger une validation manuelle avant que les tâches passent de Planification à À faire (paramètre `requirePlanApproval`).
+
+---
+
+## Multi-nœuds. Un tableau. Toutes les plateformes.
+
+
+
+Laptop, Mac mini, serveur Linux, VM cloud, téléphone — chaque nœud est un pair. L'état de vos tâches, vos agents, vos journaux et vos diffs restent synchronisés sur tout le maillage. Le même Fusion est livré sous forme de :
+
+- 🖥️ **Application de bureau** — Electron pour **macOS** (Intel + Apple Silicon), **Windows** 10/11 et **Linux**
+- 📱 **Application mobile** — Capacitor pour **iOS/iPadOS** et **Android** ([MOBILE.md](./MOBILE.md))
+- 🌐 **Tableau de bord web** — tout navigateur moderne, servi par le démon `fn dashboard`
+- 🔌 **CLI** — binaire `fn` + extension pour les workflows orientés terminal
+
+Démarrez le démon sur n'importe quel nœud, connectez vos autres appareils, et le tableau vous suit partout.
+
+---
+
+## Faire tourner une entreprise d'agents
+
+
+
+
+
+
+
+Importez une équipe. Faites-la tourner de façon autonome pendant des semaines. **Plus de 440 agents répartis dans 16 entreprises**, câblés pour les missions, les boîtes aux lettres et la délégation inter-agents.
+
+```bash
+npx companies.sh add paperclipai/companies/gstack
+```
+
+---
+
+## Compatible avec les outils que vous utilisez déjà.
+
+Fusion s'intègre avec les outils que vous aimez. **Hermes**, **Paperclip** et **OpenClaw** sont tous livrés comme plugins de première classe — routez n'importe quel espace de travail vers le runtime qui convient à la tâche. Et n'importe quelle entreprise d'agents Paperclip s'importe en une seule commande.
+
+
+
+
+
+### [Hermes](https://hermes-agent.nousresearch.com) `experimental`
+
+Nous Research
+
+L'agent autonome open source de **Nous Research**. Installez le plugin Hermes et exécutez des agents via Hermes pour les travaux de longue durée à contexte croissant — routez n'importe quel espace de travail Fusion vers lui.
+
+### OpenClaw `experimental`
+
+La prise en charge du runtime OpenClaw est disponible sous forme de plugin expérimental (`fusion-plugin-openclaw-runtime`) pour la parité de découverte/configuration du runtime. Configurez les agents avec `runtimeConfig.runtimeHint: "openclaw"` après installation du plugin.
+
+
+
+
+
+
+
+### [Paperclip](https://paperclip.ing) `experimental`
+
+paperclip.ing
+
+Le plan de contrôle humain pour le travail IA. Installez le plugin Paperclip pour exécuter des agents via Paperclip dans Fusion.
+
+Fusion prend également en charge nativement le standard d'entreprises d'agents **[`companies.sh`](https://github.com/paperclipai/companies)** : importez une équipe prédéfinie — **plus de 440 agents répartis dans 16 entreprises** — et laissez-les se coordonner via la boîte aux lettres, les missions et les portes de workflow de Fusion pendant des semaines de travail autonome. Même format d'entreprise, mêmes agents, mêmes compétences que Paperclip.
+
+```bash
+npx companies.sh add paperclipai/companies/gstack
+```
+
+
+
+> **Hermes**, **Paperclip** et **OpenClaw** sont des plugins de runtime **expérimentaux** — les API et les formats de communication peuvent évoluer entre les versions mineures.
+
+---
+
+## Démarrage rapide
+
+**Sans installation, directement depuis npm :**
+
+```bash
+npx runfusion.ai
+```
+
+Cela lance le tableau de bord. Les sous-commandes passent directement : `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (Ou de façon verbeuse : `npx @runfusion/fusion dashboard`.)
+
+**Installateur en une ligne** (macOS et Linux — choisit automatiquement Homebrew, bascule sur npm en secours) :
+
+```bash
+curl -fsSL https://runfusion.ai/install.sh | sh
+fusion dashboard
+```
+
+**Homebrew** (macOS et Linux) :
+
+```bash
+brew tap runfusion/fusion
+brew install fusion
+fusion dashboard # ou : fn dashboard
+```
+
+Ou en une ligne (tap automatique) : `brew install runfusion/fusion/fusion`.
+
+**npm global** :
+
+```bash
+npm install -g @runfusion/fusion
+fn dashboard # ou : fusion dashboard
+```
+
+**Depuis un clone** (pour le développement) :
+
+```bash
+pnpm dev dashboard
+```
+
+Cliquez ensuite sur l'URL `Open:` affichée dans le terminal. Elle intègre un jeton bearer
+(`http://localhost:4040/?token=fn_...`) que le navigateur capture dans
+`localStorage` à la première visite et réutilise automatiquement par la suite. Côté
+serveur, Fusion persiste désormais le jeton du tableau de bord/démon dans
+`~/.fusion/settings.json` à la première exécution authentifiée et le réutilise
+lors des démarrages ultérieurs, sauf si vous le remplacez (`--token`,
+`FUSION_DASHBOARD_TOKEN`, `FUSION_DAEMON_TOKEN`) ou désactivez l'authentification
+avec `--no-auth`. Voir
+[Référence CLI → fn dashboard → Authentification](./docs/cli-reference.md#fn-dashboard)
+pour la précédence complète et les options de réinitialisation/révocation.
+
+### Configuration au premier lancement
+
+Au premier lancement, Fusion ouvre l'**assistant d'intégration** en trois étapes guidées :
+
+1. **Configuration IA** — Utilisez la liste simplifiée de fournisseurs de démarrage rapide (fournisseurs recommandés et fournisseurs déjà connectés), puis développez les **Paramètres avancés du fournisseur** uniquement si vous avez besoin de fournisseurs supplémentaires ou de détails de configuration. Un seul fournisseur suffit pour commencer. Les entrées de fournisseurs dépréciés Google Gemini CLI / Antigravity sont intentionnellement masquées ; les chemins clé API Google/Gemini, Google Generative AI, Vertex et Cloud Code restent pris en charge.
+2. **GitHub (optionnel)** — Connectez GitHub pour l'import de tickets et la gestion des PR
+3. **Première tâche** — Créez votre première tâche ou importez depuis GitHub (si aucun projet n'est actif, l'assistant vous invite d'abord à enregistrer/sélectionner un répertoire de projet)
+
+L'assistant est **dismissable et non bloquant** — cliquez sur **Ignorer pour l'instant** pour utiliser le tableau de bord immédiatement. Relancez-le plus tard depuis **Paramètres → Authentification → Rouvrir le guide d'intégration**.
+
+### Mobile
+
+Pour le workflow Capacitor + PWA, voir [MOBILE.md](./MOBILE.md).
+
+---
+
+## Documentation
+
+| Guide | Ce qu'il couvre |
+|---|---|
+| [Premiers pas](./docs/getting-started.md) | Installation et intégration |
+| [Guide du tableau de bord](./docs/dashboard-guide.md) | Vues tableau/liste, terminal, gestionnaire git |
+| [Gestion des tâches](./docs/task-management.md) | Cycle de vie des tâches et commandes CLI |
+| [Référence CLI](./docs/cli-reference.md) | Référence complète des commandes et du démon |
+| [Référence des paramètres](./docs/settings-reference.md) | Options de configuration |
+| [Architecture](./docs/architecture.md) | Internals du système |
+| [Agents](./docs/agents.md) | Gestion des agents, instanciation, heartbeat |
+| [Étapes de workflow](./docs/workflow-steps.md) | Portes de qualité, modèles, phases |
+| [Missions](./docs/missions.md) | Hiérarchie de missions, planification, pilotage automatique |
+| [Multi-projet](./docs/multi-project.md) | Registre central, modes d'isolation |
+| [Docker](./docs/docker.md) | Déploiement en conteneur |
+
+---
+
+## Fonctionnalités principales
+
+- **Planification IA** — L'agent de planification génère un `PROMPT.md` détaillé avec étapes, périmètre des fichiers et critères d'acceptation
+- **Exécution pas à pas** — Cycle Plan → Révision → Exécution → Révision pour chaque étape de tâche
+- **Isolation par worktree git** — Chaque tâche s'exécute dans son propre worktree (branche `fusion/{task-id}`)
+- **Étapes de workflow** — Portes de qualité configurables (pré-fusion : bloque la fusion ; post-fusion : informatif)
+- **Intégration GitHub** — Import de tickets, création de PR, badges PR/ticket en temps réel
+- **Tableau de bord** — Tableau kanban en temps réel, gestion des agents, terminal, gestionnaire git, planificateur de missions
+- **Missions** — Planification hiérarchique (Mission → Jalon → Tranche → Fonctionnalité → Tâche) avec pilotage automatique, contrats de validation, nouvelles tentatives sur correctifs/fonctionnalités et sémantique de transfert en cas de blocage
+- **Multi-projet** — Gérez plusieurs projets depuis une installation unique avec isolation des projets
+- **Messagerie inter-agents** — Messagerie intégrée pour la coordination entre agents et utilisateurs
+- **Salles de discussion (Expérimental)** — Discussion de groupe à portée de projet où les membres mentionnés sont routés comme répondants directs et des membres ambiants supplémentaires peuvent répondre jusqu'à un certain plafond (activer via **Paramètres → Fonctionnalités expérimentales → Salles de discussion** ; détails dans [Guide du tableau de bord → Salles de discussion](./docs/dashboard-guide.md#chat-rooms))
+
+### Authentification des fournisseurs
+
+Fusion prend en charge l'authentification OAuth pour les fournisseurs IA configurée via **Paramètres → Authentification**. Pour la plupart des fournisseurs OAuth, lorsque le tableau de bord est accédé via un hôte non-localhost (nœud distant, hôte/IP LAN ou proxy inverse), les URL de connexion du fournisseur sont réécrites pour router les callbacks OAuth via un endpoint bridge (`/api/auth/oauth-callback`) afin que les redirections atteignent la session navigateur active.
+
+- **Anthropic (Claude)** — Utilise un flux de code d'autorisation collé dans Paramètres/l'assistant : connectez-vous, puis collez l'URL de redirection finale (ou le code) dans Fusion pour terminer la connexion
+- **OpenAI Codex** — Utilise le même flux de code d'autorisation collé avec validation d'état sécurisée
+- **Factory AI — via Droid CLI** *(optionnel)* — nécessite une installation locale de Droid CLI + `droid auth login` ; la détection suit le chemin du binaire runtime effectif (par défaut `droid`, ou `droidBinaryPath` du plugin si configuré), puis activez dans **Paramètres → Authentification** et redémarrez Fusion
+- **llama.cpp — via serveur HTTP** *(optionnel)* — configurez l'URL de votre serveur llama.cpp (par défaut `http://127.0.0.1:8080`) et la clé API optionnelle, puis activez dans **Paramètres → Authentification**
+- **Autres fournisseurs** — Authentifiez via la saisie de clé API dans Paramètres (y compris clé API Google/Gemini, Google Generative AI, Vertex et alias Cloud Code)
+
+### Système de modèles
+
+Fusion utilise une hiérarchie de modèles à double portée avec cinq voies indépendantes. Les paramètres globaux définissent les valeurs par défaut de base ; les paramètres de projet fournissent des remplacements par projet.
+
+| Voie | Objectif | Clés globales de base | Clés de remplacement par projet |
+|------|---------|---------------------|----------------------|
+| Exécuteur | Agent d'exécution des tâches | `executionGlobalProvider` + `executionGlobalModelId` | `executionProvider` + `executionModelId` |
+| Planification | Agent de planification des tâches | `planningGlobalProvider` + `planningGlobalModelId` | `planningProvider` + `planningModelId` |
+| Validateur | Réviseur de plan/code | `validatorGlobalProvider` + `validatorGlobalModelId` | `validatorProvider` + `validatorModelId` |
+| Résumé de titre | Génération automatique de titre | `titleSummarizerGlobalProvider` + `titleSummarizerGlobalModelId` | `titleSummarizerProvider` + `titleSummarizerModelId` |
+| Raffinement des étapes de workflow | Raffinement de prompt IA | (utilise `defaultProvider`/`defaultModelId`) | (utilise `modelProvider`/`modelId` sur WorkflowStep) |
+
+**Remplacements par tâche :** Les tâches peuvent remplacer les voies exécuteur, validateur et planification avec des champs de modèle par tâche (`modelProvider`/`modelId`, `validatorModelProvider`/`validatorModelId`, `planningModelProvider`/`planningModelId`).
+
+**Précédence :** Par tâche → Remplacement projet → Voie globale → `defaultProvider`/`defaultModelId` → Résolution automatique.
+
+Pour la documentation complète des paramètres, voir la [Référence des paramètres](./docs/settings-reference.md).
+
+### Tâches planifiées / automatisations
+
+Fusion prend en charge l'automatisation de tâches planifiées via les endpoints `/api/automations`. Les automatisations peuvent exécuter des commandes shell ou des workflows multi-étapes selon un calendrier configurable.
+
+#### Portée de la planification
+
+Les automatisations et les routines peuvent s'exécuter dans deux portées :
+
+- **Globale** — S'exécute sur tous les projets. À utiliser pour la maintenance inter-projets, les sauvegardes ou les rapports unifiés.
+- **Projet** — S'exécute uniquement dans un projet spécifique. À utiliser pour la CI, les tests ou les déploiements spécifiques au projet.
+
+Lorsque vous créez une planification sans choisir de portée, Fusion utilise par défaut la **portée projet** avec l'ID de projet `default` pour la compatibilité ascendante.
+
+Pour cibler explicitement une portée :
+- Dans le modal **Tâches planifiées** du tableau de bord, utilisez le bouton **Global / Projet**.
+- Via l'API, passez `?scope=global` ou `?scope=project&projectId=` sur les endpoints d'automatisation/routine.
+
+**Règles de résolution de portée :**
+- `scope=global` se résout toujours vers la voie d'automatisation/routine globale, indépendamment du projet actif.
+- `scope=project` nécessite un `projectId`. S'il est omis, il bascule sur `"default"`.
+- Les opérations CRUD, exécution, bascule et webhook sont strictement isolées par portée : une planification globale ne peut pas être modifiée depuis une requête à portée projet, et vice versa.
+
+**Conseils opérationnels pour les configurations multi-projets :**
+- Préférez les planifications **globales** pour l'infrastructure partagée (ex. : sauvegardes nocturnes, extraction de résumés mémorisés).
+- Préférez les planifications **projet** pour l'automatisation par dépôt (ex. : lanceurs de tests par projet, hooks de déploiement).
+- Les voies globale et projet sont interrogées indépendamment par le moteur, donc les exécutions dues dans une voie ne bloquent pas l'autre.
+
+#### Automatisations
+
+| Endpoint | Méthode | Description |
+|---------|--------|-------------|
+| `/api/automations` | GET | Lister toutes les automatisations (filtrées par portée si spécifiée) |
+| `/api/automations` | POST | Créer une automatisation (portée par défaut : `project`) |
+| `/api/automations/:id` | GET | Obtenir une automatisation par ID |
+| `/api/automations/:id` | PATCH | Mettre à jour une automatisation |
+| `/api/automations/:id` | DELETE | Supprimer une automatisation |
+| `/api/automations/:id/run` | POST | Déclencher une exécution manuelle |
+| `/api/automations/:id/toggle` | POST | Activer/désactiver |
+| `/api/automations/:id/steps/reorder` | POST | Réordonner les étapes d'automatisation |
+
+#### Routines
+
+Les routines sont des tâches d'agents IA déclenchées par des planifications cron, des webhooks ou une exécution manuelle. Les routines partagent le même modèle de portée global/projet que les automatisations.
+
+| Endpoint | Méthode | Description |
+|---------|--------|-------------|
+| `/api/routines` | GET | Lister toutes les routines (filtrées par portée si spécifiée) |
+| `/api/routines` | POST | Créer une routine (portée par défaut : `project`) |
+| `/api/routines/:id` | GET | Obtenir une routine par ID |
+| `/api/routines/:id` | PATCH | Mettre à jour une routine |
+| `/api/routines/:id` | DELETE | Supprimer une routine |
+| `/api/routines/:id/run` | POST | Déclenchement manuel |
+| `/api/routines/:id/trigger` | POST | Déclenchement manuel canonique |
+| `/api/routines/:id/runs` | GET | Obtenir l'historique d'exécution |
+| `/api/routines/:id/webhook` | POST | Déclenchement par webhook (vérification de signature prise en charge) |
+
+---
+
+## Exemples CLI rapides
+
+```bash
+fn task create "Fix the login bug" # Entrée rapide → planification
+fn task plan "Build auth system" # Planification guidée par IA
+fn task import owner/repo --labels bug # Importer des tickets GitHub
+fn task show FN-001 # Voir les détails d'une tâche
+fn task logs FN-001 --follow # Suivre les journaux d'exécution
+fn task steer FN-001 "Use TypeScript" # Guider l'agent en cours d'exécution
+
+fn project add my-app /path/to/app # Enregistrer un projet
+fn project list # Lister tous les projets
+
+fn settings set maxConcurrent 4 # Configurer les paramètres
+fn settings export # Exporter la configuration
+
+fn mission create "Auth System" "Build auth" # Créer une mission
+fn mission activate-slice # Activer une tranche
+
+fn skills search react # Rechercher dans skills.sh
+fn skills install firebase/agent-skills # Installer des compétences d'agent
+```
+
+---
+
+## Paquets
+
+| Paquet | Description |
+|---------|-------------|
+| `@fusion/core` | Modèle de domaine — tâches, colonnes du tableau, store SQLite |
+| `@fusion/dashboard` | Interface web — serveur Express + tableau kanban avec SSE |
+| `@fusion/engine` | Moteur IA — planification, exécution, ordonnancement, étapes de workflow |
+| `@runfusion/fusion` | CLI + extension — publié sur npm |
+
+---
+
+## Développement
+
+```bash
+pnpm install # Installer les dépendances
+pnpm local # Démarrer le tableau de bord/API local sur un port différent de 4040
+pnpm local -- --engine # Démarrer le tableau de bord local avec le moteur IA
+pnpm build # Construire les paquets du workspace par défaut (exclut bureau/mobile)
+pnpm build:all # Construire tous les paquets (y compris bureau/mobile)
+pnpm dev dashboard # Exécuter le tableau de bord + le moteur IA
+pnpm dev:ui # Tableau de bord seul (sans moteur IA)
+pnpm lint # Linter tous les paquets
+pnpm typecheck # Vérifier les types de tous les paquets
+pnpm test # Exécuter tous les tests
+```
+
+### Construire un exécutable autonome
+
+Construisez un binaire `fn` autonome et auto-contenu avec [Bun](https://bun.sh/) :
+
+```bash
+pnpm build:exe # Construire pour la plateforme actuelle
+pnpm build:exe:all # Compilation croisée pour toutes les plateformes
+```
+
+---
+
+## Licence
+
+MIT — open source, sans enfermement propriétaire. Voir [LICENSE](./LICENSE).
+
+
+
+**[runfusion.ai →](https://runfusion.ai)**
+
+
diff --git a/README.ko.md b/README.ko.md
new file mode 100644
index 0000000000..beead4c0bc
--- /dev/null
+++ b/README.ko.md
@@ -0,0 +1,468 @@
+
+
+---
+
+## 전체 개발 환경을 하나의 화면에서.
+
+평문으로 태스크를 설명하면, 계획 에이전트가 프로젝트를 읽고 컨텍스트를 파악한 뒤 단계, 파일 범위, 완료 기준이 담긴 `PROMPT.md` 계획서를 작성합니다. 이후 Fusion은 격리된 git 워크트리에서 계획, 검토, 실행, 재검토를 순서대로 수행하며, 원하는 곳마다 사람의 승인 단계를 추가할 수 있습니다.
+
+보드 하나로. 어디서든 제어. 노트북, Mac mini, Linux 서버, 클라우드 VM, 휴대폰 — 모두 연결됩니다.
+
+> Trello와 유사하지만, 태스크의 명세 작성, 실행, 납품을 AI가 수행합니다. [dustinbyrne/kb](https://github.com/dustinbyrne/kb)의 훌륭한 작업을 기반으로 구축되었습니다.
+
+---
+
+## 흐름
+
+```
+ ① 설명 ② 계획 ③ 보드 ④ 격리된 워크트리
+ ───────────── ───────────── ───────────── ─────────────────────
+ "설정 패널에 → 에이전트가 → 계획 → 검토 → → fusion/FN-123 브랜치
+ 다크 모드 토글 PROMPT.md 작성 실행 → 검토 동시 실행,
+ 추가" (단계, 범위, (각 단계마다, 파일 충돌 없음
+ 완료 기준) 완료까지)
+```
+
+### 머지 전에 모든 단계를 확인하세요
+
+
+
+
+
+모든 태스크는 계획, 검토, 차이점, 파일 변경 내역을 실시간으로 보여줍니다. 진행 중인 태스크에 들어가 방향을 조정하거나, 제약을 강화하거나, 일시 정지하거나, 재프롬프트할 수 있습니다.
+
+---
+
+## 차별점
+
+| | |
+|---|---|
+| 🧠 **AI 계획** | 평문으로 태스크를 설명하면, 계획 에이전트가 단계, 파일 범위, 완료 기준이 포함된 `PROMPT.md` 계획서로 변환합니다. |
+| 🔁 **워크플로우 게이트** | 모든 단계마다 계획 → 검토 → 실행 → 검토 주기를 거칩니다. 사전 머지 게이트는 불량 코드를 차단하고, 사후 머지 게이트는 정보성 검사를 실행합니다. |
+| 🌳 **워크트리 격리** | 각 태스크는 자체 브랜치와 워크트리(`fusion/{task-id}`)에서 실행됩니다. 병렬 태스크. 충돌 없음. [`worktrunk.enabled`](./docs/settings-reference.md#worktree-backend-settings)를 통한 선택적 [worktrunk](https://github.com/max-sixty/worktrunk) 위임 지원([WorktreeBackend 추상화](./docs/architecture.md#worktreebackend-abstraction) 참조). |
+| ⚡ **스마트 머지** | 모든 게이트 통과 시 Fusion이 스쿼시 머지하고 다음으로 넘어갑니다. 어디서든 수동 승인을 선택할 수 있습니다. |
+| 🛰️ **멀티 노드 메시** | 노트북, Mac mini, Linux 서버, 클라우드 VM, 휴대폰 — 모두 동기화됩니다. 데스크톱, 모바일, 웹. |
+| 🧩 **모든 모델** | Anthropic, OpenAI, Ollama 등 다양한 모델을 지원합니다. 로컬과 클라우드가 공존합니다. |
+| 🏢 **에이전트 컴퍼니** | 사전 구축된 팀 — 16개 컴퍼니에 걸쳐 440개 이상의 에이전트 — 을 임포트하여 몇 주 동안 자율적으로 실행합니다. |
+| 📬 **에이전트 간 메시징** | 에이전트 간 내장 메일박스. 위임, 확인, 조율이 가능합니다. |
+| 🗨️ **멀티 에이전트 채팅 룸** | 여러 룸 구성원이 답할 수 있는 프로젝트 범위 그룹 대화: 언급된 구성원은 직접 응답자로, 추가 주변 구성원은 최대 한도까지 응답할 수 있습니다. 현재 **실험적** — **설정 → 실험적 기능 → 채팅 룸**에서 `chatRooms`를 활성화하세요. ([채팅 룸 문서](./docs/dashboard-guide.md#chat-rooms)) |
+| 🗺️ **미션** | 계층적 계획(미션 → 마일스톤 → 슬라이스 → 기능 → 태스크), 자동 조종, 검증 계약 포함. |
+| 🔬 **리서치** | 웹 검색, GitHub, 로컬 문서, LLM 합성을 활용한 경계 있는 리서치 실행(계획 및 합성 흐름에서 런타임 내장 WebSearch/WebFetch 지원 포함). 결과를 태스크로 전환합니다. ([문서](./docs/research.md)) |
+| 🧪 **자기 개선** | 에이전트가 자신의 출력물을 돌아보고 코드베이스를 학습하면서 프롬프트를 업데이트합니다. |
+| 🔓 **오픈 소스. MIT.** | 벤더 종속 없음. 자체 하드웨어에서 실행. 매주 배포. |
+
+---
+
+## 작동 방식
+
+```mermaid
+graph TD
+ H((사용자)) -->|거친 아이디어| T["계획 중 자동 계획"]
+ T --> TD["할 일 실행 예약됨"]
+ TD --> IP["진행 중 각 단계마다: 계획, 검토, 실행, 검토"]
+
+ subgraph IP["진행 중"]
+ direction TD
+ NS([단계 시작]) --> P[계획]
+ P --> R1{검토}
+ R1 -->|수정| P
+ R1 -->|승인| E[실행]
+ E --> R2{검토}
+ R2 -->|수정| E
+ R2 -->|다음 단계| NS
+ R2 -->|재검토| P
+ end
+
+ R2 -->|완료| IR["검토 중 머지 준비, 또는 자동 완료"]
+ IR -->|직접 스쿼시 머지 또는 PR 머지| D["완료"]
+
+ style H fill:#161b22,stroke:#8b949e,color:#e6edf3
+ style T fill:#2d2006,stroke:#d29922,color:#d29922
+ style TD fill:#0d2044,stroke:#58a6ff,color:#58a6ff
+ style IP fill:#1a0d2e,stroke:#bc8cff,color:#bc8cff
+ style P fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style R1 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style E fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style R2 fill:#1a0d2e,stroke:#bc8cff,color:#e6edf3
+ style NS fill:#1a0d2e,stroke:#bc8cff,color:#bc8cff
+ style IR fill:#0d2d16,stroke:#3fb950,color:#3fb950
+ style D fill:#1a1a1a,stroke:#8b949e,color:#8b949e
+```
+
+의존성이 있는 태스크는 순차적으로 처리됩니다. 독립적인 태스크는 병렬로 실행됩니다. 태스크가 계획 단계에서 할 일로 이동하기 전에 수동 승인을 요구하도록 설정할 수 있습니다(`requirePlanApproval` 설정).
+
+---
+
+## 멀티 노드. 하나의 보드. 모든 플랫폼.
+
+
+
+노트북, Mac mini, Linux 서버, 클라우드 VM, 휴대폰 — 모든 노드가 동등한 피어입니다. 태스크 상태, 에이전트, 로그, 차이점이 메시 전반에 걸쳐 동기화된 상태로 유지됩니다. 동일한 Fusion이 다음과 같이 제공됩니다:
+
+- 🖥️ **데스크톱 앱** — **macOS**(Intel + Apple Silicon), **Windows** 10/11, **Linux**용 Electron
+- 📱 **모바일 앱** — **iOS/iPadOS** 및 **Android**용 Capacitor ([MOBILE.md](./MOBILE.md))
+- 🌐 **웹 대시보드** — `fn dashboard` 데몬에서 제공되는 모든 최신 브라우저
+- 🔌 **CLI** — 터미널 중심 워크플로우를 위한 `fn` 바이너리 + 확장
+
+임의의 노드에서 데몬을 시작하고 다른 기기를 연결하면, 보드가 어디서든 따라다닙니다.
+
+---
+
+## 에이전트 컴퍼니 운영
+
+
+
+
+
+
+
+팀을 임포트하세요. 몇 주 동안 자율적으로 운영하세요. 미션, 메일박스, 에이전트 간 위임을 위해 연결된 **16개 컴퍼니에 걸쳐 440개 이상의 에이전트**.
+
+```bash
+npx companies.sh add paperclipai/companies/gstack
+```
+
+---
+
+## 이미 사용 중인 도구와 호환됩니다.
+
+Fusion은 여러분이 좋아하는 도구와 통합됩니다. **Hermes**, **Paperclip**, **OpenClaw**는 모두 일급 플러그인으로 제공되어 — 작업에 맞는 런타임으로 워크스페이스를 라우팅할 수 있습니다. 그리고 모든 Paperclip 에이전트 컴퍼니는 단일 명령으로 임포트됩니다.
+
+
+
+
+
+### [Hermes](https://hermes-agent.nousresearch.com) `experimental`
+
+Nous Research
+
+**Nous Research**의 오픈 소스 자율 에이전트. Hermes 플러그인을 설치하고 장시간 실행되는 컨텍스트가 증가하는 작업에 Hermes를 통해 에이전트를 실행하세요 — 임의의 Fusion 워크스페이스를 라우팅할 수 있습니다.
+
+### OpenClaw `experimental`
+
+OpenClaw 런타임 지원은 런타임 탐색/설정 동등성을 위한 실험적 플러그인(`fusion-plugin-openclaw-runtime`)으로 제공됩니다. 플러그인을 설치한 후 `runtimeConfig.runtimeHint: "openclaw"`로 에이전트를 설정하세요.
+
+
+
+
+
+
+
+### [Paperclip](https://paperclip.ing) `experimental`
+
+paperclip.ing
+
+AI 노동을 위한 사람 제어 플레인. Paperclip 플러그인을 설치하여 Fusion 내에서 Paperclip을 통해 에이전트를 실행하세요.
+
+Fusion은 **[`companies.sh`](https://github.com/paperclipai/companies)** 에이전트 컴퍼니 표준을 네이티브로 지원합니다: 사전 구축된 팀 — **16개 컴퍼니에 걸쳐 440개 이상의 에이전트** — 을 임포트하고, 수 주 동안의 자율 작업을 위해 Fusion의 메일박스, 미션, 워크플로우 게이트를 통해 조율하게 하세요. Paperclip과 동일한 컴퍼니 형식, 동일한 에이전트, 동일한 스킬.
+
+```bash
+npx companies.sh add paperclipai/companies/gstack
+```
+
+
+
+> **Hermes**, **Paperclip**, **OpenClaw**는 **실험적** 런타임 플러그인입니다 — API와 와이어 형식은 마이너 릴리스 사이에 변경될 수 있습니다.
+
+---
+
+## 빠른 시작
+
+**설치 없이 npm에서 바로:**
+
+```bash
+npx runfusion.ai
+```
+
+이 명령은 대시보드를 실행합니다. 하위 명령은 다음과 같이 전달됩니다: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help` 등. (또는 명시적으로: `npx @runfusion/fusion dashboard`.)
+
+**원라인 설치 프로그램** (macOS & Linux — Homebrew를 자동 선택하고, 없으면 npm으로 대체):
+
+```bash
+curl -fsSL https://runfusion.ai/install.sh | sh
+fusion dashboard
+```
+
+**Homebrew** (macOS & Linux):
+
+```bash
+brew tap runfusion/fusion
+brew install fusion
+fusion dashboard # 또는: fn dashboard
+```
+
+또는 원라인(자동 탭 추가): `brew install runfusion/fusion/fusion`.
+
+**npm 전역 설치**:
+
+```bash
+npm install -g @runfusion/fusion
+fn dashboard # 또는: fusion dashboard
+```
+
+**클론으로 시작** (개발용):
+
+```bash
+pnpm dev dashboard
+```
+
+터미널에 출력되는 `Open:` URL을 클릭하세요. URL에는 베어러 토큰
+(`http://localhost:4040/?token=fn_...`)이 포함되어 있으며, 브라우저가 첫 방문 시
+`localStorage`에 캡처하여 이후 자동으로 재사용합니다. 서버 측에서 Fusion은
+첫 번째 인증된 실행 시 `~/.fusion/settings.json`에 대시보드/데몬 토큰을
+저장하고, 이후 시작 시 재사용합니다(`--token`, `FUSION_DASHBOARD_TOKEN`,
+`FUSION_DAEMON_TOKEN`으로 재정의하거나 `--no-auth`로 인증을 비활성화하지 않는 한).
+전체 우선순위 및 재설정/취소 옵션은
+[CLI 참조 → fn dashboard → Authentication](./docs/cli-reference.md#fn-dashboard)을
+참조하세요.
+
+### 최초 실행 설정
+
+Fusion을 처음 시작하면 세 단계로 안내하는 **온보딩 마법사**가 열립니다:
+
+1. **AI 설정** — 간소화된 빠른 시작 공급자 목록(권장 공급자 및 이미 연결된 공급자)을 사용하고, 추가 공급자나 설정 세부 사항이 필요한 경우에만 **고급 공급자 설정**을 펼칩니다. 시작하려면 공급자 하나만 있으면 됩니다. 더 이상 사용되지 않는 Google Gemini CLI / Antigravity 공급자 항목은 의도적으로 숨겨져 있으며, Google/Gemini API 키, Google Generative AI, Vertex, Cloud Code 경로는 계속 지원됩니다.
+2. **GitHub (선택 사항)** — 이슈 임포트 및 PR 관리를 위해 GitHub 연결
+3. **첫 번째 태스크** — 첫 번째 태스크를 생성하거나 GitHub에서 임포트(활성 프로젝트가 없는 경우, 온보딩이 먼저 프로젝트 디렉터리 등록/선택을 안내합니다)
+
+마법사는 **해제 가능하며 비차단적** — **지금 건너뛰기**를 클릭하면 즉시 대시보드를 사용할 수 있습니다. 나중에 **설정 → 인증 → 온보딩 가이드 다시 열기**에서 재실행할 수 있습니다.
+
+### 모바일
+
+Capacitor + PWA 워크플로우는 [MOBILE.md](./MOBILE.md)를 참조하세요.
+
+---
+
+## 문서
+
+| 가이드 | 내용 |
+|---|---|
+| [시작하기](./docs/getting-started.md) | 설치 및 온보딩 |
+| [대시보드 가이드](./docs/dashboard-guide.md) | 보드/목록 뷰, 터미널, git 관리자 |
+| [태스크 관리](./docs/task-management.md) | 태스크 수명 주기 및 CLI 명령 |
+| [CLI 참조](./docs/cli-reference.md) | 전체 명령 및 데몬 참조 |
+| [설정 참조](./docs/settings-reference.md) | 구성 옵션 |
+| [아키텍처](./docs/architecture.md) | 시스템 내부 구조 |
+| [에이전트](./docs/agents.md) | 에이전트 관리, 스폰, 하트비트 |
+| [워크플로우 단계](./docs/workflow-steps.md) | 품질 게이트, 템플릿, 단계 |
+| [미션](./docs/missions.md) | 미션 계층 구조, 계획, 자동 조종 |
+| [멀티 프로젝트](./docs/multi-project.md) | 중앙 레지스트리, 격리 모드 |
+| [Docker](./docs/docker.md) | 컨테이너 배포 |
+
+---
+
+## 핵심 기능
+
+- **AI 계획** — 계획 에이전트가 단계, 파일 범위, 완료 기준이 담긴 상세한 `PROMPT.md`를 생성합니다
+- **단계별 실행** — 각 태스크 단계마다 계획 → 검토 → 실행 → 검토 주기를 진행합니다
+- **Git 워크트리 격리** — 각 태스크는 자체 워크트리(`fusion/{task-id}` 브랜치)에서 실행됩니다
+- **워크플로우 단계** — 구성 가능한 품질 게이트(사전 머지: 머지 차단; 사후 머지: 정보 제공)
+- **GitHub 연동** — 이슈 임포트, PR 생성, 실시간 PR/이슈 배지
+- **대시보드** — 실시간 칸반 보드, 에이전트 관리, 터미널, git 관리자, 미션 플래너
+- **미션** — 계층적 계획(미션 → 마일스톤 → 슬라이스 → 기능 → 태스크), 자동 조종, 검증 계약, 수정-기능 재시도, 차단 핸드오프 시맨틱 포함
+- **멀티 프로젝트** — 단일 설치에서 여러 프로젝트를 프로젝트 격리로 관리
+- **에이전트 간 메시징** — 에이전트와 사용자 간 조율을 위한 내장 메시징
+- **채팅 룸 (실험적)** — 언급된 구성원이 직접 응답자로 라우팅되고 추가 주변 구성원이 최대 한도까지 답할 수 있는 프로젝트 범위 그룹 채팅(**설정 → 실험적 기능 → 채팅 룸**에서 활성화; [대시보드 가이드 → 채팅 룸](./docs/dashboard-guide.md#chat-rooms)에서 자세히 확인)
+
+### 공급자 인증
+
+Fusion은 **설정 → 인증**을 통해 구성된 AI 공급자의 OAuth 기반 인증을 지원합니다. 대부분의 OAuth 공급자의 경우, 대시보드가 비 localhost 호스트(원격 노드, LAN 호스트/IP, 또는 리버스 프록시)를 통해 접근될 때, 공급자 로그인 URL이 OAuth 콜백을 브리지 엔드포인트(`/api/auth/oauth-callback`)를 통해 라우팅하도록 재작성되어 리다이렉트가 활성 브라우저 세션에 도달합니다.
+
+- **Anthropic (Claude)** — 설정/온보딩에서 붙여넣기 인가 코드 흐름을 사용합니다: 로그인한 후 최종 리다이렉트 URL(또는 코드)을 Fusion에 붙여넣어 로그인을 완료합니다
+- **OpenAI Codex** — 안전한 상태 검증이 포함된 동일한 붙여넣기 인가 코드 흐름을 사용합니다
+- **Factory AI — Droid CLI 경유** *(선택 사항)* — 로컬 Droid CLI 설치 + `droid auth login` 필요; 탐지는 유효한 런타임 바이너리 경로를 따릅니다(기본값 `droid`, 또는 플러그인 설정 시 `droidBinaryPath`), 이후 **설정 → 인증**에서 활성화하고 Fusion을 재시작하세요
+- **llama.cpp — HTTP 서버 경유** *(선택 사항)* — llama.cpp 서버 URL(기본값 `http://127.0.0.1:8080`)과 선택적 API 키를 설정한 후 **설정 → 인증**에서 활성화하세요
+- **기타 공급자** — 설정에서 API 키 입력으로 인증합니다(Google/Gemini API 키, Google Generative AI, Vertex, Cloud Code 별칭 포함)
+
+### 모델 시스템
+
+Fusion은 다섯 개의 독립적인 레인을 가진 이중 범위 모델 계층 구조를 사용합니다. 전역 설정은 기준 기본값을 정의하고, 프로젝트 설정은 프로젝트별 재정의를 제공합니다.
+
+| 레인 | 목적 | 전역 기준 키 | 프로젝트 재정의 키 |
+|------|---------|---------------------|----------------------|
+| Executor | 태스크 실행 에이전트 | `executionGlobalProvider` + `executionGlobalModelId` | `executionProvider` + `executionModelId` |
+| Planning | 태스크 계획 에이전트 | `planningGlobalProvider` + `planningGlobalModelId` | `planningProvider` + `planningModelId` |
+| Validator | 계획/코드 검토자 | `validatorGlobalProvider` + `validatorGlobalModelId` | `validatorProvider` + `validatorModelId` |
+| Title Summarization | 자동 제목 생성 | `titleSummarizerGlobalProvider` + `titleSummarizerGlobalModelId` | `titleSummarizerProvider` + `titleSummarizerModelId` |
+| Workflow Step Refinement | AI 프롬프트 개선 | (`defaultProvider`/`defaultModelId` 사용) | (WorkflowStep의 `modelProvider`/`modelId` 사용) |
+
+**태스크별 재정의:** 태스크는 태스크별 모델 필드(`modelProvider`/`modelId`, `validatorModelProvider`/`validatorModelId`, `planningModelProvider`/`planningModelId`)로 executor, validator, planning 레인을 재정의할 수 있습니다.
+
+**우선순위:** 태스크별 → 프로젝트 재정의 → 전역 레인 → `defaultProvider`/`defaultModelId` → 자동 해결.
+
+전체 설정 문서는 [설정 참조](./docs/settings-reference.md)를 참조하세요.
+
+### 예약된 태스크 / 자동화
+
+Fusion은 `/api/automations` 엔드포인트를 통해 예약된 태스크 자동화를 지원합니다. 자동화는 구성 가능한 일정에 따라 셸 명령 또는 다단계 워크플로우를 실행할 수 있습니다.
+
+#### 스케줄링 범위
+
+자동화와 루틴은 두 가지 범위에서 실행될 수 있습니다:
+
+- **전역** — 모든 프로젝트에 걸쳐 실행됩니다. 프로젝트 간 유지 관리, 백업, 또는 통합 보고에 사용하세요.
+- **프로젝트** — 특정 프로젝트 내에서만 실행됩니다. 프로젝트별 CI, 테스트, 또는 배포 태스크에 사용하세요.
+
+범위를 선택하지 않고 일정을 생성하면, Fusion은 하위 호환성을 위해 `default` 프로젝트 ID로 **프로젝트 범위**를 기본값으로 사용합니다.
+
+범위를 명시적으로 지정하려면:
+- 대시보드 **예약된 태스크** 모달에서 **전역 / 프로젝트** 토글을 사용하세요.
+- API를 통해서는 자동화/루틴 엔드포인트에 `?scope=global` 또는 `?scope=project&projectId=`를 전달하세요.
+
+**범위 해결 규칙:**
+- `scope=global`은 항상 활성 프로젝트와 독립적으로 전역 자동화/루틴 레인으로 해결됩니다.
+- `scope=project`는 `projectId`를 필요로 합니다. 생략하면 `"default"`로 대체됩니다.
+- CRUD, 실행, 토글, 웹훅 작업은 엄격하게 범위 격리됩니다: 전역 일정은 프로젝트 범위 요청에서 변경될 수 없고, 그 반대도 마찬가지입니다.
+
+**멀티 프로젝트 설정을 위한 운영 지침:**
+- 공유 인프라(예: 야간 백업, 메모리 인사이트 추출)에는 **전역** 일정을 선호하세요.
+- 저장소별 자동화(예: 프로젝트별 테스트 실행기, 배포 훅)에는 **프로젝트** 일정을 선호하세요.
+- 전역 및 프로젝트 레인은 엔진에 의해 독립적으로 폴링되므로, 한 레인의 예정된 실행이 다른 레인을 차단하지 않습니다.
+
+#### 자동화
+
+| 엔드포인트 | 메서드 | 설명 |
+|---------|--------|-------------|
+| `/api/automations` | GET | 모든 자동화 목록 조회 (범위가 지정된 경우 필터링됨) |
+| `/api/automations` | POST | 자동화 생성 (범위 기본값: `project`) |
+| `/api/automations/:id` | GET | ID로 자동화 조회 |
+| `/api/automations/:id` | PATCH | 자동화 업데이트 |
+| `/api/automations/:id` | DELETE | 자동화 삭제 |
+| `/api/automations/:id/run` | POST | 수동 실행 트리거 |
+| `/api/automations/:id/toggle` | POST | 활성화/비활성화 토글 |
+| `/api/automations/:id/steps/reorder` | POST | 자동화 단계 순서 변경 |
+
+#### 루틴
+
+루틴은 크론 일정, 웹훅, 또는 수동 실행으로 트리거되는 AI 에이전트 태스크입니다. 루틴은 자동화와 동일한 전역/프로젝트 범위 모델을 공유합니다.
+
+| 엔드포인트 | 메서드 | 설명 |
+|---------|--------|-------------|
+| `/api/routines` | GET | 모든 루틴 목록 조회 (범위가 지정된 경우 필터링됨) |
+| `/api/routines` | POST | 루틴 생성 (범위 기본값: `project`) |
+| `/api/routines/:id` | GET | ID로 루틴 조회 |
+| `/api/routines/:id` | PATCH | 루틴 업데이트 |
+| `/api/routines/:id` | DELETE | 루틴 삭제 |
+| `/api/routines/:id/run` | POST | 수동 트리거 |
+| `/api/routines/:id/trigger` | POST | 정식 수동 트리거 |
+| `/api/routines/:id/runs` | GET | 실행 기록 조회 |
+| `/api/routines/:id/webhook` | POST | 웹훅 트리거 (서명 검증 지원) |
+
+---
+
+## CLI 빠른 예제
+
+```bash
+fn task create "Fix the login bug" # 빠른 입력 → 계획 단계
+fn task plan "Build auth system" # AI 안내 계획 수립
+fn task import owner/repo --labels bug # GitHub 이슈 임포트
+fn task show FN-001 # 태스크 세부 정보 보기
+fn task logs FN-001 --follow # 실행 로그 스트리밍
+fn task steer FN-001 "Use TypeScript" # 실행 중 에이전트 방향 안내
+
+fn project add my-app /path/to/app # 프로젝트 등록
+fn project list # 모든 프로젝트 목록
+
+fn settings set maxConcurrent 4 # 설정 구성
+fn settings export # 설정 내보내기
+
+fn mission create "Auth System" "Build auth" # 미션 생성
+fn mission activate-slice # 슬라이스 활성화
+
+fn skills search react # skills.sh 검색
+fn skills install firebase/agent-skills # 에이전트 스킬 설치
+```
+
+---
+
+## 패키지
+
+| 패키지 | 설명 |
+|---------|-------------|
+| `@fusion/core` | 도메인 모델 — 태스크, 보드 컬럼, SQLite 저장소 |
+| `@fusion/dashboard` | 웹 UI — Express 서버 + SSE가 포함된 칸반 보드 |
+| `@fusion/engine` | AI 엔진 — 계획, 실행, 스케줄링, 워크플로우 단계 |
+| `@runfusion/fusion` | CLI + 확장 — npm에 게시됨 |
+
+---
+
+## 개발
+
+```bash
+pnpm install # 의존성 설치
+pnpm local # 비 4040 포트에서 로컬 대시보드/API 시작
+pnpm local -- --engine # AI 엔진과 함께 로컬 대시보드 시작
+pnpm build # 기본 워크스페이스 패키지 빌드 (데스크톱/모바일 제외)
+pnpm build:all # 모든 패키지 빌드 (데스크톱/모바일 포함)
+pnpm dev dashboard # 대시보드 + AI 엔진 실행
+pnpm dev:ui # 대시보드만 실행 (AI 엔진 없음)
+pnpm lint # 모든 패키지 린트
+pnpm typecheck # 모든 패키지 타입 검사
+pnpm test # 모든 테스트 실행
+```
+
+### 독립 실행 파일 빌드
+
+[Bun](https://bun.sh/)을 사용하여 단일 자급자족 `fn` 바이너리를 빌드합니다:
+
+```bash
+pnpm build:exe # 현재 플랫폼용 빌드
+pnpm build:exe:all # 모든 플랫폼용 크로스 컴파일
+```
+
+---
+
+## 라이선스
+
+MIT — 오픈 소스, 벤더 종속 없음. [LICENSE](./LICENSE) 참조.
+
+
) : (
@@ -167,11 +168,11 @@ function LiveAgentCard({ agent, projectId, onSelect, onOpenTaskLogs }: LiveAgent
type="button"
className="live-agent-card-logs-btn"
onClick={handleViewLogs}
- title="View live run logs"
- aria-label={`View live logs for ${agent.taskId}`}
+ title={t("agents.viewLiveLogs", "View live run logs")}
+ aria-label={t("agents.viewLogsFor", "View live logs for {{taskId}}", { taskId: agent.taskId })}
>
- Live logs
+ {t("agents.liveLogs", "Live logs")}
)}
{isConnected && }
@@ -196,6 +197,7 @@ interface ActiveAgentsPanelProps {
}
export function ActiveAgentsPanel({ agents, projectId, onAgentSelect, onOpenTaskLogs, className = "" }: ActiveAgentsPanelProps) {
+ const { t } = useTranslation("app");
// Dedupe by id defensively. The store should return unique agents but a race
// between the initial fetch and an SSE refresh can briefly surface the same
// agent twice — without this guard React floods the console with duplicate
@@ -208,7 +210,7 @@ export function ActiveAgentsPanel({ agents, projectId, onAgentSelect, onOpenTask
- Agent logs will appear here from the current task or most recent run
+ {t("agents.logsWillAppear", "Agent logs will appear here from the current task or most recent run")}
@@ -1375,23 +1392,23 @@ function LogsTab({
return (
{t("agents.noLogEntriesYet", "No log entries yet")}
- {isStreaming ? "Waiting for activity..." : "Logs will appear here when the agent is active"}
+ {isStreaming ? t("agents.waitingForActivity", "Waiting for activity...") : t("agents.logsWillAppearActive", "Logs will appear here when the agent is active")}
{activeSubtab === "inbox" ? "No received messages for this agent" : "No sent messages for this agent"}
+
{activeSubtab === "inbox" ? t("agents.noInboxMessages", "No received messages for this agent") : t("agents.noOutboxMessages", "No sent messages for this agent")}
) : (
messages.map(renderMessage)
@@ -1656,7 +1683,7 @@ interface AgentTokenUsageSummary {
allTime: AgentTokenUsageWindowSummary;
}
-function RunsTab({
+function RunsTab({
addToast,
agentId,
projectId,
@@ -1666,7 +1693,7 @@ function RunsTab({
preferActiveRun,
runNowRefreshToken,
isEphemeral,
-}: {
+}: {
addToast: (msg: string, type?: "success" | "error") => void;
agentId: string;
projectId?: string;
@@ -1677,6 +1704,7 @@ function RunsTab({
runNowRefreshToken: number;
isEphemeral: boolean;
}) {
+ const { t } = useTranslation("app");
const [runs, setRuns] = useState([]);
const { confirm } = useConfirm();
const [isLoadingRuns, setIsLoadingRuns] = useState(true);
@@ -1810,7 +1838,7 @@ function RunsTab({
setRunLogs(logs);
setDetailRun(detail);
} catch (err) {
- addToast(`Failed to load run details: ${getErrorMessage(err)}`, "error");
+ addToast(t("agents.runDetailsFailed", "Failed to load run details: {{error}}", { error: getErrorMessage(err) }), "error");
setRunLogs([]);
setDetailRun(null);
} finally {
@@ -1840,8 +1868,8 @@ function RunsTab({
const handleStopRun = async () => {
const shouldStop = await confirm({
- title: "Stop Active Run",
- message: "Stop the active run? The agent's work will be interrupted.",
+ title: t("agents.stopRunTitle", "Stop Active Run"),
+ message: t("agents.stopRunConfirm", "Stop the active run? The agent's work will be interrupted."),
danger: true,
});
if (!shouldStop) {
@@ -1850,11 +1878,11 @@ function RunsTab({
try {
await stopAgentRun(agentId, projectId);
- addToast("Run stopped", "success");
+ addToast(t("agents.runStopped", "Run stopped"), "success");
setIsLoadingRuns(true);
void loadRuns();
} catch (err) {
- addToast(`Failed to stop run: ${getErrorMessage(err)}`, "error");
+ addToast(t("agents.stopRunFailed", "Failed to stop run: {{error}}", { error: getErrorMessage(err) }), "error");
}
};
@@ -1863,7 +1891,7 @@ function RunsTab({
{t("agents.noLogsForRun", "No logs available for this run")}
) : (
)}
@@ -2124,9 +2152,9 @@ function RunsTab({
{promptSizes.length > 0 && latestPrompt && (
-
Prompt Size
+
{t("agents.promptSize", "Prompt Size")}
-
- Instructions File Path
+ {t("agents.instructionsPathLabel", "Instructions File Path")}
{
setInstructionsPath(e.target.value);
setJustSaved(false);
}}
/>
- Path to a .md file (relative to project root). Contents are read and appended at execution time.
+ {t("agents.instructionsPathHint", "Path to a .md file (relative to project root). Contents are read and appended at execution time.")}
- Edit the instructions file directly. Changes are saved separately from the path configuration.
+ {t("agents.instructionsFileEditorDesc", "Edit the instructions file directly. Changes are saved separately from the path configuration.")}
@@ -3192,7 +3231,7 @@ function InstructionsTab({
id="instructions-file-content"
className="input config-textarea-mono"
rows={20}
- placeholder="File content will appear here when loaded..."
+ placeholder={t("agents.fileContentPlaceholder", "File content will appear here when loaded...")}
value={fileContent}
readOnly={isLoadingFile}
onChange={(e) => {
@@ -3201,7 +3240,7 @@ function InstructionsTab({
setJustSavedFile(false);
}}
/>
- Edit the markdown file content directly. Save separately using the button below.
+ {t("agents.fileContentHint", "Edit the markdown file content directly. Save separately using the button below.")}
- The per-tick procedure this agent runs every wake. Defaults to a per-agent
- markdown file (for example .fusion/agents/ceo-agent2736/HEARTBEAT.md)
- that you can edit. Legacy id-only default paths remain valid. Resets on every tick —
- no need to restart the agent after editing.
+ {t("agents.heartbeatProcedureDesc", "The per-tick procedure this agent runs every wake. Defaults to a per-agent markdown file (for example")} .fusion/agents/ceo-agent2736/HEARTBEAT.md{t("agents.heartbeatProcedureDescSuffix", ") that you can edit. Legacy id-only default paths remain valid. Resets on every tick — no need to restart the agent after editing.")}
- Current path: {currentPath || "(none — using built-in default)"}
+ {t("agents.currentPath", "Current path:")} {currentPath || t("agents.noneUsingBuiltIn", "(none — using built-in default)")}
{hasFilePath && (
@@ -3456,12 +3493,12 @@ function HeartbeatProcedureSection({
{isLoadingFile ? (
<>
- Loading file…
+ {t("agents.loadingFile", "Loading file…")}
>
) : (
<>
- View Heartbeat Markdown
+ {t("agents.viewHeartbeatMarkdown", "View Heartbeat Markdown")}
>
)}
@@ -3473,28 +3510,26 @@ function HeartbeatProcedureSection({
className="btn"
disabled={isUpgrading || onDefault}
onClick={() => void handleUpgrade()}
- aria-label="Upgrade agent to default heartbeat procedure file"
+ aria-label={t("agents.upgradeToDefaultAriaLabel", "Upgrade agent to default heartbeat procedure file")}
>
{isUpgrading ? (
<>
- Upgrading…
+ {t("agents.upgrading", "Upgrading…")}
>
) : onDefault ? (
<>
- Already on default
+ {t("agents.alreadyOnDefault", "Already on default")}
>
) : (
- "Upgrade to Default Heartbeat Procedure"
+ t("agents.upgradeToDefault", "Upgrade to Default Heartbeat Procedure")
)}
- Sets heartbeatProcedurePath to{" "}
+ {t("agents.upgradeHint", "Sets")} heartbeatProcedurePath {t("agents.upgradeHintTo", "to")}{" "}
{canonicalDefaultPath}
- {" "}and seeds the file from the built-in template if it doesn't exist.
- Each agent gets its own per-agent file, so edits stay scoped to this agent.
- Operator edits to the file are preserved.
+ {" "}{t("agents.upgradeHintSuffix", "and seeds the file from the built-in template if it doesn't exist. Each agent gets its own per-agent file, so edits stay scoped to this agent. Operator edits to the file are preserved.")}
- Reports To
+ {t("agents.reportsToLabel", "Reports To")}
-
Skills
+
{t("agents.skillsTitle", "Skills")}
- Assign skills to this agent for specialized behavior.
+ {t("agents.skillsDescription", "Assign skills to this agent for specialized behavior.")}
@@ -4569,15 +4605,15 @@ function ConfigTab({
-
Model
+
{t("agents.modelTitle", "Model")}
- Choose either a built-in model or a plugin runtime for this agent. These options are mutually exclusive.
+ {t("agents.modelDescription", "Choose either a built-in model or a plugin runtime for this agent. These options are mutually exclusive.")}
- Per-agent settings override project defaults. Each category controls a separate approval gate.
+ {t("agents.permissionsDescription", "Per-agent settings override project defaults. Each category controls a separate approval gate.")}
{permissionPolicyValue === undefined ? (
- Inheriting project default — no per-agent override set
+ {t("agents.inheritingProjectDefault", "Inheriting project default — no per-agent override set")}
- Customize for this agent
+ {t("agents.customizeForAgent", "Customize for this agent")}
) : null}
@@ -4692,17 +4728,17 @@ function ConfigTab({
- Configure how this agent's heartbeat is monitored. Leave a field empty to use system defaults.
+ {t("agents.heartbeatSettingsDesc", "Configure how this agent's heartbeat is monitored. Leave a field empty to use system defaults.")}
- Coordination-only agent
- Disables auto-claim and removes the candidate section from heartbeat prompts. Recommended for routing/CEO-style agents.
+ {t("agents.coordinationOnlyAgent", "Coordination-only agent")}
+ {t("agents.coordinationOnlyHint", "Disables auto-claim and removes the candidate section from heartbeat prompts. Recommended for routing/CEO-style agents.")}
@@ -4726,9 +4762,9 @@ function ConfigTab({
void scheduleAutoSave();
}}
/>
- Auto-Claim Relevant Tasks
+ {t("agents.autoClaimRelevantTasks", "Auto-Claim Relevant Tasks")}
- When enabled (default), no-task heartbeats scan open unowned work and auto-claim tasks aligned with this agent's role and soul.
+ {t("agents.autoClaimHint", "When enabled (default), no-task heartbeats scan open unowned work and auto-claim tasks aligned with this agent's role and soul.")}
@@ -4742,9 +4778,9 @@ function ConfigTab({
void scheduleAutoSave();
}}
/>
- Heartbeat Enabled
+ {t("agents.heartbeatEnabled", "Heartbeat Enabled")}
- When enabled, this agent receives scheduled heartbeat runs based on its interval.
+ {t("agents.heartbeatEnabledHint", "When enabled, this agent receives scheduled heartbeat runs based on its interval.")}
@@ -4758,9 +4794,9 @@ function ConfigTab({
void scheduleAutoSave();
}}
/>
- Run Missed Heartbeat On Startup
+ {t("agents.runMissedHeartbeat", "Run Missed Heartbeat On Startup")}
- When enabled, if the server was down across this agent's scheduled heartbeat tick, fire a single catch-up heartbeat at startup. Default: off.
+ {t("agents.runMissedHeartbeatHint", "When enabled, if the server was down across this agent's scheduled heartbeat tick, fire a single catch-up heartbeat at startup. Default: off.")}
@@ -4774,9 +4810,9 @@ function ConfigTab({
void scheduleAutoSave();
}}
/>
- Allow Parallel Execution
+ {t("agents.allowParallelExecution", "Allow Parallel Execution")}
- When disabled, the heartbeat and task execution paths serialize for this agent (heartbeat will not start while the agent's task is executing, and vice versa). Permanent agents only.
+ {t("agents.allowParallelExecutionHint", "When disabled, the heartbeat and task execution paths serialize for this agent (heartbeat will not start while the agent's task is executing, and vice versa). Permanent agents only.")}
@@ -4790,13 +4826,13 @@ function ConfigTab({
void scheduleAutoSave();
}}
/>
- Skip heartbeat when idle
+ {t("agents.skipHeartbeatWhenIdle", "Skip heartbeat when idle")}
- When enabled, scheduled (timer) heartbeats are skipped while this agent has no assigned task. The agent still wakes immediately when a task is assigned or you trigger a run manually. Default: off.
+ {t("agents.skipHeartbeatWhenIdleHint", "When enabled, scheduled (timer) heartbeats are skipped while this agent has no assigned task. The agent still wakes immediately when a task is assigned or you trigger a run manually. Default: off.")}
- Heartbeat Scope Discipline
+ {t("agents.heartbeatScopeDiscipline", "Heartbeat Scope Discipline")}
- Strict — coordination-focused; higher per-tick tokens. Lite — pre-2026-05-11 behavior. Off — minimal procedure.
+ {t("agents.scopeDisciplineHint", "Strict — coordination-focused; higher per-tick tokens. Lite — pre-2026-05-11 behavior. Off — minimal procedure.")}
- Heartbeat Interval (s)
+ {t("agents.heartbeatIntervalLabel", "Heartbeat Interval (s)")}
{errors.heartbeatIntervalMs}
) : (
- How often heartbeats are checked. Leave empty for system default ({DEFAULT_HEARTBEAT_INTERVAL_MS / 1000}s / {DEFAULT_HEARTBEAT_INTERVAL_LABEL}).
+ {t("agents.heartbeatIntervalHint", "How often heartbeats are checked. Leave empty for system default ({{seconds}}s / {{label}}).", { seconds: DEFAULT_HEARTBEAT_INTERVAL_MS / 1000, label: DEFAULT_HEARTBEAT_INTERVAL_LABEL })}
)}
- Heartbeat Timeout (s)
+ {t("agents.heartbeatTimeoutLabel", "Heartbeat Timeout (s)")}
{errors.heartbeatTimeoutMs}
) : (
- Time without heartbeat before agent is considered unresponsive. Leave empty for system default (60s)
+ {t("agents.heartbeatTimeoutHint", "Time without heartbeat before agent is considered unresponsive. Leave empty for system default (60s)")}
)}
- Max Concurrent Runs
+ {t("agents.maxConcurrentRunsLabel", "Max Concurrent Runs")}
{errors.maxConcurrentRuns}
) : (
- Maximum simultaneous heartbeat runs for this agent. Leave empty for system default (1).
+ {t("agents.maxConcurrentRunsHint", "Maximum simultaneous heartbeat runs for this agent. Leave empty for system default (1).")}
)}
- Message Response Mode
+ {t("agents.messageResponseModeLabel", "Message Response Mode")}
{errors.messageResponseMode ? (
{errors.messageResponseMode}
) : (
- How this agent responds to incoming messages. 'Immediate' wakes the agent as soon as a message arrives. 'On Heartbeat' defers processing to the next scheduled heartbeat.
+ {t("agents.messageResponseModeHint", "How this agent responds to incoming messages. 'Immediate' wakes the agent as soon as a message arrives. 'On Heartbeat' defers processing to the next scheduled heartbeat.")}
)}
- Configure token budget limits for this agent. Leave all fields empty to disable budget tracking.
+ {t("agents.budgetSettingsDesc", "Configure token budget limits for this agent. Leave all fields empty to disable budget tracking.")}
- Token Budget
+ {t("agents.tokenBudgetLabel", "Token Budget")}
handleBudgetFieldChange("tokenBudget", e.target.value)}
/>
{errors.tokenBudget ? (
{errors.tokenBudget}
) : (
- Total token cap (input + output) for this agent. Leave empty for no limit.
+ {t("agents.tokenBudgetHint", "Total token cap (input + output) for this agent. Leave empty for no limit.")}
)}
- Usage Threshold (%)
+ {t("agents.usageThresholdLabel", "Usage Threshold (%)")}
{errors.usageThreshold}
) : (
- Warning threshold as a percentage. Agent warns when usage reaches this level. Default: 80%.
+ {t("agents.usageThresholdHint", "Warning threshold as a percentage. Agent warns when usage reaches this level. Default: 80%.")}
)}
- Budget Period
+ {t("agents.budgetPeriodLabel", "Budget Period")}
{errors.budgetPeriod ? (
{errors.budgetPeriod}
) : (
- How often the budget counter resets. Leave empty for lifetime budget.
+ {t("agents.budgetPeriodHint", "How often the budget counter resets. Leave empty for lifetime budget.")}
)}
- Reset Day
+ {t("agents.resetDayLabel", "Reset Day")}
handleBudgetFieldChange("resetDay", e.target.value)}
/>
@@ -4989,10 +5025,10 @@ function ConfigTab({
) : (
{budgetValues.budgetPeriod === "weekly"
- ? "Day of week (0=Sunday to 6=Saturday) for reset."
+ ? t("agents.resetDayWeekly", "Day of week (0=Sunday to 6=Saturday) for reset.")
: budgetValues.budgetPeriod === "monthly"
- ? "Day of month (1-31) for reset."
- : "Day for reset (weekly: 0-6, monthly: 1-31). Leave empty for automatic."}
+ ? t("agents.resetDayMonthly", "Day of month (1-31) for reset.")
+ : t("agents.resetDayHint", "Day for reset (weekly: 0-6, monthly: 1-31). Leave empty for automatic.")}
)}
@@ -5000,7 +5036,7 @@ function ConfigTab({
{/* Budget Usage Progress Bar */}
{budgetStatus?.budgetLimit != null && (
- Current Usage
+ {t("agents.currentUsage", "Current Usage")}
- Configure the agent's instruction bundle. Leave empty to use inline instructions only.
+ {t("agents.bundleDescription", "Configure the agent's instruction bundle. Leave empty to use inline instructions only.")}
- Bundle Mode
+ {t("agents.bundleModeLabel", "Bundle Mode")}
- {bundleMode === "managed" && "Files will be stored in a system-managed directory within .fusion/agents/"}
- {bundleMode === "external" && "Specify an external directory path for the instruction files"}
- {!bundleMode && "Select a mode to enable instruction bundling"}
+ {bundleMode === "managed" && t("agents.bundleManagedHint", "Files will be stored in a system-managed directory within .fusion/agents/")}
+ {bundleMode === "external" && t("agents.bundleExternalHint", "Specify an external directory path for the instruction files")}
+ {!bundleMode && t("agents.bundleSelectMode", "Select a mode to enable instruction bundling")}
- External Path
+ {t("agents.bundleExternalPathLabel", "External Path")}
setBundleExternalPath(e.target.value)}
/>
- Absolute or relative path to the external directory
+ {t("agents.bundleExternalPathHint", "Absolute or relative path to the external directory")}
)}
- Files (comma-separated)
+ {t("agents.bundleFilesLabel", "Files (comma-separated)")}
f.trim()).filter(Boolean)
)}
/>
- List of file names in the bundle directory
+ {t("agents.bundleFilesHint", "List of file names in the bundle directory")}
- Advanced configuration options for this agent. Leave a field empty to use system defaults.
+ {t("agents.advancedSettingsDesc", "Advanced configuration options for this agent. Leave a field empty to use system defaults.")}