ndomo 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bun-version +1 -0
- package/.dockerignore +79 -0
- package/.editorconfig +18 -0
- package/.env.example +19 -0
- package/.github/CODEOWNERS +8 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +62 -0
- package/.github/ISSUE_TEMPLATE/config.yml +2 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +34 -0
- package/.github/dependabot.yml +36 -0
- package/.github/pull_request_template.md +24 -0
- package/.github/release.yml +30 -0
- package/.github/workflows/gitleaks.yml +28 -0
- package/.github/workflows/release-please.yml +27 -0
- package/.github/workflows/smoke.yml +29 -0
- package/.husky/commit-msg +1 -0
- package/CHANGELOG.md +114 -0
- package/Dockerfile +32 -0
- package/README.es.md +174 -0
- package/README.md +187 -0
- package/agents/chronicler.md +98 -0
- package/agents/ci-smith.md +136 -0
- package/agents/craftsman.md +341 -0
- package/agents/deploy-smith.md +138 -0
- package/agents/foreman.md +377 -0
- package/agents/go-smith.md +164 -0
- package/agents/guild.md +188 -0
- package/agents/inspector.md +83 -0
- package/agents/js-smith.md +127 -0
- package/agents/ops-scout.md +173 -0
- package/agents/painter.md +200 -0
- package/agents/python-smith.md +120 -0
- package/agents/ranger.md +307 -0
- package/agents/release-smith.md +165 -0
- package/agents/rust-smith.md +159 -0
- package/agents/sage.md +178 -0
- package/agents/scout.md +144 -0
- package/agents/scribe.md +156 -0
- package/agents/smith.md +201 -0
- package/agents/vue-smith.md +155 -0
- package/agents/warden.md +216 -0
- package/agents/zig-smith.md +156 -0
- package/bin/ndomo-analyses.ts +4 -0
- package/bin/ndomo-status.ts +4 -0
- package/biome.json +57 -0
- package/bun.lock +514 -0
- package/commitlint.config.js +3 -0
- package/config/ndomo.config.json +258 -0
- package/config/ndomo.schema.json +166 -0
- package/docs/agents.md +375 -0
- package/docs/bugs/plan-create-orphan-fk.md +131 -0
- package/docs/bugs/task_create_batch-order-index-collision.md +158 -0
- package/docs/configuration.md +276 -0
- package/docs/database.md +364 -0
- package/docs/features/feature-flexible-builder-v1.md +724 -0
- package/docs/features/feature-flexible-builder-v2.md +882 -0
- package/docs/features/feature-flexible-builder.md +974 -0
- package/docs/http-server.md +244 -0
- package/docs/installation.md +259 -0
- package/docs/integrations.md +129 -0
- package/docs/operations/anti-pattern-sub-agent-verify-2026-06-21.md +32 -0
- package/docs/operations/audit-v1.md +417 -0
- package/docs/operations/audit-v2.md +197 -0
- package/docs/operations/audit-v3.md +306 -0
- package/docs/operations/db-optimize-foundations.md +123 -0
- package/docs/operations/verify-gate-architecture.md +82 -0
- package/docs/workflows.md +448 -0
- package/opencode.json +5 -0
- package/package.json +65 -0
- package/release-please-config.json +11 -0
- package/scripts/dev-bust-cache.sh +164 -0
- package/scripts/install.sh +688 -0
- package/scripts/smoke-e2e.ts +704 -0
- package/scripts/smoke-hot.ts +417 -0
- package/scripts/smoke-http.sh +228 -0
- package/scripts/smoke-v4.ts +256 -0
- package/scripts/smoke-v5.ts +397 -0
- package/scripts/smoke.sh +9 -0
- package/scripts/uninstall.sh +224 -0
- package/skills/api-security-best-practices/SKILL.md +915 -0
- package/skills/bash-scripting/SKILL.md +201 -0
- package/skills/bun/SKILL.md +313 -0
- package/skills/cavecrew/SKILL.md +82 -0
- package/skills/caveman/SKILL.md +74 -0
- package/skills/caveman-review/README.md +33 -0
- package/skills/caveman-review/SKILL.md +55 -0
- package/skills/find-skills/SKILL.md +142 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +55 -0
- package/skills/golang-patterns/SKILL.md +674 -0
- package/skills/golang-security/SKILL.md +185 -0
- package/skills/golang-security/evals/evals.json +595 -0
- package/skills/golang-security/references/architecture.md +268 -0
- package/skills/golang-security/references/checklist.md +80 -0
- package/skills/golang-security/references/cookies.md +200 -0
- package/skills/golang-security/references/cryptography.md +424 -0
- package/skills/golang-security/references/filesystem.md +285 -0
- package/skills/golang-security/references/injection.md +315 -0
- package/skills/golang-security/references/logging.md +163 -0
- package/skills/golang-security/references/memory-safety.md +241 -0
- package/skills/golang-security/references/network.md +253 -0
- package/skills/golang-security/references/secrets.md +189 -0
- package/skills/golang-security/references/third-party.md +159 -0
- package/skills/golang-security/references/threat-modeling.md +189 -0
- package/skills/golang-testing/SKILL.md +720 -0
- package/skills/grill-me/SKILL.md +7 -0
- package/skills/javascript-testing-patterns/SKILL.md +537 -0
- package/skills/javascript-testing-patterns/references/advanced-testing-patterns.md +513 -0
- package/skills/modern-javascript-patterns/SKILL.md +43 -0
- package/skills/modern-javascript-patterns/references/advanced-patterns.md +487 -0
- package/skills/modern-javascript-patterns/references/details.md +457 -0
- package/skills/python-anti-patterns/SKILL.md +349 -0
- package/skills/python-design-patterns/SKILL.md +85 -0
- package/skills/python-design-patterns/references/details.md +353 -0
- package/skills/python-error-handling/SKILL.md +193 -0
- package/skills/python-error-handling/references/details.md +171 -0
- package/skills/python-testing-patterns/SKILL.md +278 -0
- package/skills/python-testing-patterns/references/advanced-patterns.md +411 -0
- package/skills/python-testing-patterns/references/details.md +349 -0
- package/skills/rust-patterns/SKILL.md +500 -0
- package/skills/rust-testing/SKILL.md +501 -0
- package/skills/security-review/SKILL.md +504 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/vue-best-practices/SKILL.md +154 -0
- package/skills/vue-best-practices/references/animation-class-based-technique.md +254 -0
- package/skills/vue-best-practices/references/animation-state-driven-technique.md +291 -0
- package/skills/vue-best-practices/references/component-async.md +97 -0
- package/skills/vue-best-practices/references/component-data-flow.md +307 -0
- package/skills/vue-best-practices/references/component-fallthrough-attrs.md +174 -0
- package/skills/vue-best-practices/references/component-keep-alive.md +137 -0
- package/skills/vue-best-practices/references/component-slots.md +216 -0
- package/skills/vue-best-practices/references/component-suspense.md +228 -0
- package/skills/vue-best-practices/references/component-teleport.md +108 -0
- package/skills/vue-best-practices/references/component-transition-group.md +128 -0
- package/skills/vue-best-practices/references/component-transition.md +125 -0
- package/skills/vue-best-practices/references/composables.md +290 -0
- package/skills/vue-best-practices/references/directives.md +162 -0
- package/skills/vue-best-practices/references/perf-avoid-component-abstraction-in-lists.md +159 -0
- package/skills/vue-best-practices/references/perf-v-once-v-memo-directives.md +182 -0
- package/skills/vue-best-practices/references/perf-virtualize-large-lists.md +187 -0
- package/skills/vue-best-practices/references/plugins.md +166 -0
- package/skills/vue-best-practices/references/reactivity.md +344 -0
- package/skills/vue-best-practices/references/render-functions.md +201 -0
- package/skills/vue-best-practices/references/sfc.md +310 -0
- package/skills/vue-best-practices/references/state-management.md +135 -0
- package/skills/vue-best-practices/references/updated-hook-performance.md +187 -0
- package/skills/vue-pinia-best-practices/SKILL.md +21 -0
- package/skills/vue-pinia-best-practices/reference/pinia-no-active-pinia-error.md +248 -0
- package/skills/vue-pinia-best-practices/reference/pinia-setup-store-return-all-state.md +227 -0
- package/skills/vue-pinia-best-practices/reference/pinia-store-destructuring-breaks-reactivity.md +193 -0
- package/skills/vue-pinia-best-practices/reference/state-url-for-ephemeral-filters.md +238 -0
- package/skills/vue-pinia-best-practices/reference/state-use-pinia-for-large-apps.md +262 -0
- package/skills/vue-pinia-best-practices/reference/store-method-binding-parentheses.md +191 -0
- package/skills/zig-0.16/SKILL.md +840 -0
- package/skills/zig-0.16/scripts/check-zig-version.sh +21 -0
- package/src/cli/analyses.ts +280 -0
- package/src/cli/index.ts +108 -0
- package/src/cli/serve.ts +192 -0
- package/src/cli/smoke.ts +131 -0
- package/src/cli/status.test.ts +204 -0
- package/src/cli/status.ts +263 -0
- package/src/cli/vacuum.test.ts +82 -0
- package/src/cli/vacuum.ts +96 -0
- package/src/config/schema.test.ts +88 -0
- package/src/config/schema.ts +64 -0
- package/src/db/analyses-migration.test.ts +210 -0
- package/src/db/analyses.test.ts +466 -0
- package/src/db/analyses.ts +375 -0
- package/src/db/auto-checkpoint.ts +131 -0
- package/src/db/client.test.ts +129 -0
- package/src/db/client.ts +55 -0
- package/src/db/fts-escape.ts +20 -0
- package/src/db/incidents.test.ts +201 -0
- package/src/db/incidents.ts +93 -0
- package/src/db/index.ts +86 -0
- package/src/db/migrations-v13.test.ts +141 -0
- package/src/db/migrations-v8.test.ts +301 -0
- package/src/db/migrations.ts +147 -0
- package/src/db/plan-archive.test.ts +180 -0
- package/src/db/plan-archive.ts +274 -0
- package/src/db/plan-create.test.ts +276 -0
- package/src/db/plan-create.ts +78 -0
- package/src/db/plan-files.test.ts +289 -0
- package/src/db/plan-update-status.ts +287 -0
- package/src/db/plans.test.ts +490 -0
- package/src/db/plans.ts +534 -0
- package/src/db/resolve-project-dir.test.ts +143 -0
- package/src/db/resolve-project-dir.ts +75 -0
- package/src/db/rollbacks.test.ts +150 -0
- package/src/db/rollbacks.ts +67 -0
- package/src/db/schema.ts +907 -0
- package/src/db/sessions.test.ts +80 -0
- package/src/db/sessions.ts +135 -0
- package/src/db/shutdown.test.ts +147 -0
- package/src/db/shutdown.ts +45 -0
- package/src/db/tasks.test.ts +921 -0
- package/src/db/tasks.ts +747 -0
- package/src/db/types.ts +619 -0
- package/src/http/__tests__/auth.test.ts +196 -0
- package/src/http/__tests__/routes.test.ts +465 -0
- package/src/http/__tests__/sse.test.ts +317 -0
- package/src/http/auth.ts +72 -0
- package/src/http/middleware/cors.ts +53 -0
- package/src/http/middleware/security-headers.ts +21 -0
- package/src/http/routes/events.ts +112 -0
- package/src/http/routes/health.ts +51 -0
- package/src/http/routes/plans.ts +66 -0
- package/src/http/routes/sessions.ts +50 -0
- package/src/http/routes/tasks.ts +60 -0
- package/src/http/server.ts +95 -0
- package/src/http/sse.ts +116 -0
- package/src/index.ts +37 -0
- package/src/lib.ts +65 -0
- package/src/mem/scoped.ts +65 -0
- package/src/orchestrator/background.test.ts +268 -0
- package/src/orchestrator/background.ts +293 -0
- package/src/orchestrator/memory-hook.ts +182 -0
- package/src/orchestrator/reconciler.ts +123 -0
- package/src/orchestrator/scheduler.test.ts +300 -0
- package/src/orchestrator/scheduler.ts +243 -0
- package/src/plugin.test.ts +2574 -0
- package/src/plugin.ts +1690 -0
- package/src/sdk/client.ts +66 -0
- package/src/worktrees/manager.ts +236 -0
- package/src/worktrees/state.ts +87 -0
- package/tests/integration/ranger-flow.test.ts +257 -0
- package/tools/analysis_archive.ts +28 -0
- package/tools/analysis_create.ts +55 -0
- package/tools/analysis_get.ts +33 -0
- package/tools/analysis_link_plan.ts +44 -0
- package/tools/analysis_list.ts +48 -0
- package/tools/analysis_search.ts +36 -0
- package/tools/analysis_update.ts +44 -0
- package/tools/plan_approve.ts +31 -0
- package/tools/plan_create.ts +58 -0
- package/tools/plan_get.ts +40 -0
- package/tools/plan_list.ts +37 -0
- package/tools/plan_search.ts +34 -0
- package/tools/plan_update_status.ts +71 -0
- package/tools/session_checkpoint.ts +31 -0
- package/tools/session_end.ts +26 -0
- package/tools/session_start.ts +43 -0
- package/tools/task_create_batch.ts +70 -0
- package/tools/task_list.ts +35 -0
- package/tools/task_next_for_agent.ts +30 -0
- package/tools/task_search.ts +34 -0
- package/tools/task_update_status.ts +37 -0
- package/tsconfig.json +31 -0
package/README.es.md
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# ndomo
|
|
2
|
+
|
|
3
|
+
Plugin multi-agente para OpenCode. Taller de artesanos: 19 especialistas bajo un Foreman, un Craftsman y un Warden. Nativo en caveman. opencode-mem integrado. DCP peer opcional.
|
|
4
|
+
|
|
5
|
+
## Qué es ndomo
|
|
6
|
+
|
|
7
|
+
ndomo es un plugin de orquestación multi-agente para [OpenCode](https://github.com/opencode-ai). Enruta tareas de desarrollo a 19 agentes especializados (scout, scribe, painter, smith, sage, guild, stack-smiths, inspector, chronicler, y ops agents) coordinados por 3 primaries: Foreman (planificación), Craftsman (implementación), Warden (operaciones). Todos los agentes usan el protocolo de salida Caveman para comunicación eficiente en tokens. La persistencia de memoria entre sesiones la gestiona opencode-mem. El plugin opcional DCP proporciona poda de contexto adicional para sesiones largas.
|
|
8
|
+
|
|
9
|
+
## Agentes
|
|
10
|
+
|
|
11
|
+
| Agente | Rol | Modelo (preset default) | Tipo |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| **foreman** | Orquestador y scheduler maestro | minimax/MiniMax-M3 | primary |
|
|
14
|
+
| **warden** | Custodio de operaciones — CI/CD, deploy, releases, monitoreo | opencode-go/deepseek-v4-flash | primary |
|
|
15
|
+
| **scout** | Reconocimiento de codebase | opencode-go/minimax-m2.7 | subagent |
|
|
16
|
+
| **scribe** | Recuperación de conocimiento externo | opencode-go/minimax-m2.7 | subagent |
|
|
17
|
+
| **painter** | Diseño UI/UX y composición visual | opencode-go/kimi-k2.6 | subagent |
|
|
18
|
+
| **smith** | Implementación genérica rápida | opencode-go/deepseek-v4-flash | subagent |
|
|
19
|
+
| **go-smith** | Especialista en Go | xiaomi/mimo-v2.5-pro | subagent |
|
|
20
|
+
| **js-smith** | Especialista en JS/TS | xiaomi/mimo-v2.5-pro | subagent |
|
|
21
|
+
| **python-smith** | Especialista en Python | xiaomi/mimo-v2.5-pro | subagent |
|
|
22
|
+
| **vue-smith** | Especialista en Vue 3 / Pinia | xiaomi/mimo-v2.5-pro | subagent |
|
|
23
|
+
| **zig-smith** | Especialista en Zig 0.16 | xiaomi/mimo-v2.5-pro | subagent |
|
|
24
|
+
| **rust-smith** | Especialista en Rust | opencode-go/mimo-v2.5-pro | subagent |
|
|
25
|
+
| **sage** | Asesor de arquitectura y debugging | opencode-go/deepseek-v4-pro | subagent |
|
|
26
|
+
| **guild** | Consenso multi-LLM y debate | opencode-go/deepseek-v4-pro | subagent |
|
|
27
|
+
| **inspector** | Auditor de calidad y seguridad | opencode-go/deepseek-v4-pro | subagent |
|
|
28
|
+
| **chronicler** | Redactor de documentación técnica | opencode-go/deepseek-v4-flash | subagent |
|
|
29
|
+
| **ci-smith** | Especialista en pipelines CI/CD | opencode-go/deepseek-v4-flash | subagent |
|
|
30
|
+
| **deploy-smith** | Especialista en automatización de deploys | opencode-go/deepseek-v4-flash | subagent |
|
|
31
|
+
| **release-smith** | Especialista en gestión de releases | opencode-go/deepseek-v4-flash | subagent |
|
|
32
|
+
| **ops-scout** | Especialista en reconocimiento de infra (solo lectura) | opencode-go/deepseek-v4-flash | subagent |
|
|
33
|
+
|
|
34
|
+
**Grupos:** Orquestador (foreman), Exploradores (scout, scribe), Constructores (painter, smith, go-smith, js-smith, python-smith, vue-smith, zig-smith, rust-smith), Asesores (sage, guild), Calidad (inspector, chronicler), Operaciones (warden, ci-smith, deploy-smith, release-smith, ops-scout).
|
|
35
|
+
|
|
36
|
+
## Inicio Rápido
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Instalación rápida (interactivo, preguntará por provider)
|
|
40
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash
|
|
41
|
+
|
|
42
|
+
# No interactivo con provider preestablecido
|
|
43
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --provider=opencode --no-provider-prompt
|
|
44
|
+
|
|
45
|
+
# Con preset budget + DCP
|
|
46
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --preset=budget --with-dcp
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Por defecto la instalación aplica `presets.default` de `config/ndomo.config.json`. Usa `--preset=budget` para modelos más económicos, `--provider=ID` para sobrescribir el prefijo de provider.
|
|
50
|
+
|
|
51
|
+
O desde el código fuente:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git clone <repo-url> ndomo
|
|
55
|
+
cd ndomo
|
|
56
|
+
bun install
|
|
57
|
+
opencode
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Dentro de OpenCode, verifica que todos los agentes respondan:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
ping all agents
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Instalación
|
|
67
|
+
|
|
68
|
+
**Requisitos:** [bun](https://bun.sh) >= 1.1.0, OpenCode instalado y configurado con al menos un proveedor autenticado.
|
|
69
|
+
|
|
70
|
+
Instalación vía curl (recomendada):
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Instalación interactiva (preguntará por provider)
|
|
74
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash
|
|
75
|
+
|
|
76
|
+
# Con provider preestablecido (no interactivo)
|
|
77
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --provider=opencode --no-provider-prompt
|
|
78
|
+
|
|
79
|
+
# Con preset budget + DCP
|
|
80
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --preset=budget --with-dcp
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
O desde un clon local:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git clone <repo-url> ndomo
|
|
87
|
+
cd ndomo
|
|
88
|
+
./scripts/install.sh # con preset default
|
|
89
|
+
./scripts/install.sh --preset=budget # con modelos budget
|
|
90
|
+
./scripts/install.sh --with-dcp # incluye plugin DCP
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Ver [docs/installation.md](docs/installation.md) para pasos detallados.
|
|
94
|
+
|
|
95
|
+
**Flags:**
|
|
96
|
+
|
|
97
|
+
| Flag | Descripción |
|
|
98
|
+
|---|---|
|
|
99
|
+
| `--provider=ID` | Sobrescribe el prefijo de provider para todos los agentes. El model ID se toma del preset activo; solo se intercambia el segmento `provider/` del campo `model:`. Ejemplo: el preset da `opencode-go/minimax-m2.7`, `--provider=opencode` reescribe a `opencode/minimax-m2.7`. |
|
|
100
|
+
| `--no-provider-prompt` | Omite el prompt interactivo de provider. El preset se aplica igualmente; no se realiza ninguna sobrescritura de prefijo de provider. |
|
|
101
|
+
| `--preset=NAME` | Selecciona un preset de `config/ndomo.config.json::presets[NAME]`. El preset es la fuente de verdad para los modelos de agentes al instalar. (default: `default`, opciones: `default`, `budget`) |
|
|
102
|
+
| `--with-dcp` | Instala y configura el plugin DCP. |
|
|
103
|
+
| `--repo=URL` | Sobrescribe la URL del repositorio (para instalaciones vía pipe desde un fork). |
|
|
104
|
+
| `--branch=NAME` | Sobrescribe la rama del repositorio (para instalaciones vía pipe desde ramas dev). |
|
|
105
|
+
|
|
106
|
+
**Desinstalación:** `./scripts/uninstall.sh [--keep-data]`
|
|
107
|
+
|
|
108
|
+
## Base de Datos de Planes y Tareas
|
|
109
|
+
|
|
110
|
+
ndomo persiste planes, tareas y sesiones en una base de datos SQLite local al proyecto
|
|
111
|
+
(`<project>/.ndomo/state.db`) con búsqueda FTS5, trazabilidad de auditoría y
|
|
112
|
+
archivado automático a markdown al completarse. 14 herramientas expuestas vía OpenCode:
|
|
113
|
+
`plan_create`, `plan_get`, `plan_list`, `plan_search`, `plan_approve`,
|
|
114
|
+
`plan_update_status`, `task_create_batch`, `task_list`, `task_update_status`,
|
|
115
|
+
`task_search`, `task_next_for_agent`, `session_start`, `session_checkpoint`,
|
|
116
|
+
`session_end`.
|
|
117
|
+
|
|
118
|
+
El foreman las usa para rastrear trabajo a través de despachos de agentes. Ver
|
|
119
|
+
[docs/database.md](docs/database.md) para esquema, herramientas, ciclo de vida y
|
|
120
|
+
comportamiento de archivado automático.
|
|
121
|
+
|
|
122
|
+
## Configuración
|
|
123
|
+
|
|
124
|
+
Archivo de configuración: `~/.config/opencode/ndomo.json`
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"preset": "default",
|
|
129
|
+
"caveman": { "intensity": "full", "autoClarity": true },
|
|
130
|
+
"mem": {
|
|
131
|
+
"storagePath": "~/.ndomo/mem",
|
|
132
|
+
"defaultScope": "project",
|
|
133
|
+
"autoCaptureEnabled": true,
|
|
134
|
+
"cavemanCompress": true
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Ver [docs/configuration.md](docs/configuration.md) para referencia completa. Los presets de agente soportan el campo opcional `reasoning_effort` (`low`/`medium`/`high`/`xhigh`) para modelos con capacidad de razonamiento.
|
|
140
|
+
|
|
141
|
+
## Skills
|
|
142
|
+
|
|
143
|
+
ndomo incluye 7 skills en `skills/`:
|
|
144
|
+
|
|
145
|
+
| Skill | Descripción |
|
|
146
|
+
|---|---|
|
|
147
|
+
| `caveman` | Modo de comunicación ultracomprimido (~75% reducción de tokens) |
|
|
148
|
+
| `cavecrew` | Subagentes estilo caveman (investigator, builder, reviewer) |
|
|
149
|
+
| `deepwork` | Flujo estructurado para trabajo pesado con plan files y review gates |
|
|
150
|
+
| `reflect` | Análisis de fricción en el flujo de trabajo y extracción de patrones |
|
|
151
|
+
| `worktrees` | Gestión de git worktrees para carriles aislados de desarrollo |
|
|
152
|
+
| `dcp-integration` | Guía de integración de Dynamic Context Pruning |
|
|
153
|
+
| `mem-recall` | Uso de herramientas opencode-mem y patrones de recuperación |
|
|
154
|
+
|
|
155
|
+
## Integraciones
|
|
156
|
+
|
|
157
|
+
- **opencode-mem** (requerido) — memoria persistente con SQLite + USearch vector DB. Interfaz web en `:4747`. Todos los agentes comprimen recuerdos antes de almacenar usando compresión caveman vía regex (0 tokens de LLM).
|
|
158
|
+
- **DCP** (opcional) — `@tarquinen/opencode-dcp` para poda dinámica de contexto. Licencia AGPL-3.0. Se instala con flag `--with-dcp`.
|
|
159
|
+
|
|
160
|
+
Ver [docs/integrations.md](docs/integrations.md) para detalles.
|
|
161
|
+
|
|
162
|
+
## Ahorro de Tokens
|
|
163
|
+
|
|
164
|
+
El protocolo de salida Caveman reduce el uso de tokens ~60-75% vs prosa estándar eliminando artículos, palabras de relleno, conjunciones y cortesías, preservando todo el contenido técnico. El plugin DCP añade poda adicional eliminando salidas de herramientas de bajo valor del historial de conversación.
|
|
165
|
+
|
|
166
|
+
## Licencia
|
|
167
|
+
|
|
168
|
+
MIT
|
|
169
|
+
|
|
170
|
+
## Enlaces
|
|
171
|
+
|
|
172
|
+
- Repositorio: `<repo-url>`
|
|
173
|
+
- OpenCode: [https://github.com/opencode-ai](https://github.com/opencode-ai)
|
|
174
|
+
- opencode-mem: [https://github.com/opencode-ai/opencode-mem](https://github.com/opencode-ai/opencode-mem)
|
package/README.md
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# ndomo
|
|
2
|
+
|
|
3
|
+
OpenCode multi-agent plugin. Taller de artesanos: 19 specialists under one Foreman, one Craftsman, and one Warden. Caveman-native. opencode-mem integrated. DCP peer optional.
|
|
4
|
+
|
|
5
|
+
## What is ndomo
|
|
6
|
+
|
|
7
|
+
ndomo is a multi-agent orchestration plugin for [OpenCode](https://github.com/opencode-ai). It routes development tasks to 19 specialized agents (scout, scribe, painter, smith, sage, guild, stack-smiths, inspector, chronicler, and ops agents) coordinated by 3 primaries: Foreman (planning), Craftsman (implementation), Warden (operations). All agents use the Caveman output protocol for token-efficient communication. Memory persistence across sessions is handled by opencode-mem. The optional DCP plugin provides additional context pruning for long sessions.
|
|
8
|
+
|
|
9
|
+
## Agents
|
|
10
|
+
|
|
11
|
+
| Agent | Role | Model (default preset) | Type |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| **foreman** | Master orchestrator and scheduler | minimax/MiniMax-M3 | primary |
|
|
14
|
+
| **warden** | Ops custodian — CI/CD, deploy, releases, monitoring | opencode-go/deepseek-v4-flash | primary |
|
|
15
|
+
| **scout** | Codebase reconnaissance | opencode-go/minimax-m2.7 | subagent |
|
|
16
|
+
| **scribe** | External knowledge retrieval | opencode-go/minimax-m2.7 | subagent |
|
|
17
|
+
| **painter** | UI/UX design and visual composition | opencode-go/kimi-k2.6 | subagent |
|
|
18
|
+
| **smith** | Fast generic implementation | opencode-go/deepseek-v4-flash | subagent |
|
|
19
|
+
| **go-smith** | Go implementation specialist | xiaomi/mimo-v2.5-pro | subagent |
|
|
20
|
+
| **js-smith** | JS/TS implementation specialist | xiaomi/mimo-v2.5-pro | subagent |
|
|
21
|
+
| **python-smith** | Python implementation specialist | xiaomi/mimo-v2.5-pro | subagent |
|
|
22
|
+
| **vue-smith** | Vue 3 / Pinia implementation specialist | xiaomi/mimo-v2.5-pro | subagent |
|
|
23
|
+
| **zig-smith** | Zig 0.16 implementation specialist | xiaomi/mimo-v2.5-pro | subagent |
|
|
24
|
+
| **rust-smith** | Rust implementation specialist | opencode-go/mimo-v2.5-pro | subagent |
|
|
25
|
+
| **sage** | Architecture advisor and debugger | opencode-go/deepseek-v4-pro | subagent |
|
|
26
|
+
| **guild** | Multi-LLM consensus and debate | opencode-go/deepseek-v4-pro | subagent |
|
|
27
|
+
| **inspector** | Code quality and security auditor | opencode-go/deepseek-v4-pro | subagent |
|
|
28
|
+
| **chronicler** | Technical documentation writer | opencode-go/deepseek-v4-flash | subagent |
|
|
29
|
+
| **ci-smith** | CI/CD pipeline specialist | opencode-go/deepseek-v4-flash | subagent |
|
|
30
|
+
| **deploy-smith** | Deployment automation specialist | opencode-go/deepseek-v4-flash | subagent |
|
|
31
|
+
| **release-smith** | Release management specialist | opencode-go/deepseek-v4-flash | subagent |
|
|
32
|
+
| **ops-scout** | Infrastructure recon specialist (read-only) | opencode-go/deepseek-v4-flash | subagent |
|
|
33
|
+
|
|
34
|
+
**Groups:** Orchestrator (foreman), Explorers (scout, scribe), Builders (painter, smith, go-smith, js-smith, python-smith, vue-smith, zig-smith, rust-smith), Advisors (sage, guild), Quality (inspector, chronicler), Operations (warden, ci-smith, deploy-smith, release-smith, ops-scout).
|
|
35
|
+
|
|
36
|
+
## Quick Start
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Quick install (interactive, will prompt for provider)
|
|
40
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash
|
|
41
|
+
|
|
42
|
+
# Non-interactive with provider preset
|
|
43
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --provider=opencode --no-provider-prompt
|
|
44
|
+
|
|
45
|
+
# With budget preset + DCP
|
|
46
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --preset=budget --with-dcp
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
By default the install applies `presets.default` from `config/ndomo.config.json`. Use `--preset=budget` for cheaper models, `--provider=ID` to override the provider prefix.
|
|
50
|
+
|
|
51
|
+
Or from source:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git clone <repo-url> ndomo
|
|
55
|
+
cd ndomo
|
|
56
|
+
bun install
|
|
57
|
+
opencode
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Inside OpenCode, verify all agents respond:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
ping all agents
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Installation
|
|
67
|
+
|
|
68
|
+
**Prerequisites:** [bun](https://bun.sh) >= 1.1.0, OpenCode installed and configured with at least one authenticated provider.
|
|
69
|
+
|
|
70
|
+
Install via curl (recommended):
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Interactive install (will prompt for provider)
|
|
74
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash
|
|
75
|
+
|
|
76
|
+
# With provider preset (non-interactive)
|
|
77
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --provider=opencode --no-provider-prompt
|
|
78
|
+
|
|
79
|
+
# With budget preset + DCP
|
|
80
|
+
curl -fsSL https://raw.githubusercontent.com/darrenhinde/OpenAgentsControl/main/install.sh | bash -s -- --preset=budget --with-dcp
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Or from a local clone:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git clone <repo-url> ndomo
|
|
87
|
+
cd ndomo
|
|
88
|
+
./scripts/install.sh # with default preset
|
|
89
|
+
./scripts/install.sh --preset=budget # with budget models
|
|
90
|
+
./scripts/install.sh --with-dcp # include DCP plugin
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
See [docs/installation.md](docs/installation.md) for detailed steps.
|
|
94
|
+
|
|
95
|
+
**Flags:**
|
|
96
|
+
|
|
97
|
+
| Flag | Description |
|
|
98
|
+
|---|---|
|
|
99
|
+
| `--provider=ID` | Override the provider prefix for all agents. The model ID is taken from the active preset; only the `provider/` segment of the `model:` field is swapped. Example: preset gives `opencode-go/minimax-m2.7`, `--provider=opencode` rewrites to `opencode/minimax-m2.7`. |
|
|
100
|
+
| `--no-provider-prompt` | Skip the interactive provider prompt. The preset is still applied; no provider prefix override is performed. |
|
|
101
|
+
| `--preset=NAME` | Select preset from `config/ndomo.config.json::presets[NAME]`. The preset is the source of truth for agent models at install time. (default: `default`, options: `default`, `budget`) |
|
|
102
|
+
| `--with-dcp` | Install and configure the DCP plugin. |
|
|
103
|
+
| `--repo=URL` | Override repository URL (for piped installs from a fork). |
|
|
104
|
+
| `--branch=NAME` | Override repository branch (for piped installs from dev branches). |
|
|
105
|
+
|
|
106
|
+
**Uninstall:** `./scripts/uninstall.sh [--keep-data]`
|
|
107
|
+
|
|
108
|
+
## Plans & Tasks DB
|
|
109
|
+
|
|
110
|
+
ndomo persists plans, tasks, and sessions in a project-local SQLite database
|
|
111
|
+
(`<project>/.ndomo/state.db`) with FTS5 search, audit trail, and auto-archive
|
|
112
|
+
to markdown on completion. 14 tools exposed via OpenCode: `plan_create`,
|
|
113
|
+
`plan_get`, `plan_list`, `plan_search`, `plan_approve`, `plan_update_status`,
|
|
114
|
+
`task_create_batch`, `task_list`, `task_update_status`, `task_search`,
|
|
115
|
+
`task_next_for_agent`, `session_start`, `session_checkpoint`, `session_end`.
|
|
116
|
+
|
|
117
|
+
The foreman uses these to track work across agent dispatches. See
|
|
118
|
+
[docs/database.md](docs/database.md) for schema, tools, lifecycle, and
|
|
119
|
+
auto-archive behavior.
|
|
120
|
+
|
|
121
|
+
## Configuration
|
|
122
|
+
|
|
123
|
+
Config file: `~/.config/opencode/ndomo.json`
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"preset": "default",
|
|
128
|
+
"caveman": { "intensity": "full", "autoClarity": true },
|
|
129
|
+
"mem": {
|
|
130
|
+
"storagePath": "~/.ndomo/mem",
|
|
131
|
+
"defaultScope": "project",
|
|
132
|
+
"autoCaptureEnabled": true,
|
|
133
|
+
"cavemanCompress": true
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
See [docs/configuration.md](docs/configuration.md) for full reference. Agent presets support an optional `reasoning_effort` field (`low`/`medium`/`high`/`xhigh`) for reasoning-capable models.
|
|
139
|
+
|
|
140
|
+
## Skills
|
|
141
|
+
|
|
142
|
+
ndomo bundles 7 skills under `skills/`:
|
|
143
|
+
|
|
144
|
+
| Skill | Description |
|
|
145
|
+
|---|---|
|
|
146
|
+
| `caveman` | Ultra-compressed communication mode (~75% token reduction) |
|
|
147
|
+
| `cavecrew` | Caveman-style subagent presets (investigator, builder, reviewer) |
|
|
148
|
+
| `deepwork` | Structured heavy coding with plan files and review gates |
|
|
149
|
+
| `reflect` | Workflow friction analysis and reusable pattern extraction |
|
|
150
|
+
| `worktrees` | Git worktree management for isolated coding lanes |
|
|
151
|
+
| `dcp-integration` | Dynamic Context Pruning integration guide |
|
|
152
|
+
| `mem-recall` | opencode-mem tool usage and memory retrieval patterns |
|
|
153
|
+
|
|
154
|
+
## Integrations
|
|
155
|
+
|
|
156
|
+
- **opencode-mem** (required) — persistent memory with SQLite + USearch vector DB. Web UI at `:4747`. All agents compress memories before storage using caveman regex compression (0 LLM tokens).
|
|
157
|
+
- **DCP** (optional) — `@tarquinen/opencode-dcp` for dynamic context pruning. AGPL-3.0. Installed with `--with-dcp` flag.
|
|
158
|
+
|
|
159
|
+
See [docs/integrations.md](docs/integrations.md) for details.
|
|
160
|
+
|
|
161
|
+
## Optional HTTP server
|
|
162
|
+
|
|
163
|
+
Expose ndomo's SQLite state and OpenCode SDK event stream over HTTP+SSE via an embedded Elysia server. Phase 1 ships read-only REST endpoints (`/api/plans`, `/api/tasks`, `/api/sessions`) and a live SSE relay (`/api/events`).
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
export NDOMO_HTTP_ENABLED=true
|
|
167
|
+
export OPENCODE_SERVER_PASSWORD='pick-a-strong-passphrase'
|
|
168
|
+
bun run src/cli/serve.ts # binds 4097 by default
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
- **Default:** disabled (`NDOMO_HTTP_ENABLED=false`).
|
|
172
|
+
- **Auth:** HTTP Basic via `OPENCODE_SERVER_PASSWORD` (timing-safe compare). `503 auth_not_configured` if password unset when required.
|
|
173
|
+
- **Endpoints:** `GET /health` (public) + `/api/{plans,tasks,sessions,events}` (auth). See [docs/http-server.md](docs/http-server.md) for full API reference, CLI flags, CORS, security headers, and troubleshooting.
|
|
174
|
+
|
|
175
|
+
## Token Savings
|
|
176
|
+
|
|
177
|
+
The Caveman output protocol reduces token usage by ~60-75% vs standard prose by stripping articles, filler words, conjunctions, and pleasantries while preserving all technical content. The DCP plugin adds further context pruning by removing low-value tool output from the conversation history.
|
|
178
|
+
|
|
179
|
+
## License
|
|
180
|
+
|
|
181
|
+
MIT
|
|
182
|
+
|
|
183
|
+
## Links
|
|
184
|
+
|
|
185
|
+
- Repository: [https://github.com/nicosup98/ndomo-v2](https://github.com/nicosup98/ndomo-v2)
|
|
186
|
+
- OpenCode: [https://github.com/opencode-ai](https://github.com/opencode-ai)
|
|
187
|
+
- opencode-mem: [https://github.com/opencode-ai/opencode-mem](https://github.com/opencode-ai/opencode-mem)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Genera documentación técnica en Markdown analizando código y siguiendo especificaciones del foreman
|
|
3
|
+
mode: subagent
|
|
4
|
+
model: opencode-go/deepseek-v4-flash
|
|
5
|
+
temperature: 0.2
|
|
6
|
+
permission:
|
|
7
|
+
edit: allow
|
|
8
|
+
write: allow
|
|
9
|
+
bash: deny
|
|
10
|
+
webfetch: ask
|
|
11
|
+
question: allow
|
|
12
|
+
task:
|
|
13
|
+
"*": deny
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
Tono: caveman por default, nivel full. Activa siempre.
|
|
17
|
+
Excepción: prosa normal para advertencias de seguridad, acciones irreversibles o ambigüedad multi-paso.
|
|
18
|
+
|
|
19
|
+
Eres un **Ingeniero de Documentación Técnica Senior**. Tu misión es analizar el código fuente, la estructura del proyecto y las directrices del `foreman` para producir documentación en Markdown precisa, estructurada y lista para producción.
|
|
20
|
+
|
|
21
|
+
## Contexto Operativo
|
|
22
|
+
|
|
23
|
+
Operas como nodo especializado dentro del ecosistema multi-agente. Recibes instrucciones de dos fuentes principales:
|
|
24
|
+
|
|
25
|
+
1. **El Foreman (Orquestador):** te proporcionará el alcance, estructura y audiencia objetivo de cada documento.
|
|
26
|
+
2. **El Usuario Humano:** puede pedirte correcciones directas, ajustes de tono o ampliaciones de una sección específica.
|
|
27
|
+
|
|
28
|
+
Tu trabajo es producir Markdown verificable contra el código base, citando `archivo:línea` cuando afirmes un comportamiento, sin inventar endpoints, props o firmas que no puedas demostrar.
|
|
29
|
+
|
|
30
|
+
### Enfoque y Responsabilidades:
|
|
31
|
+
- Leer y parsear código real (Go/Echo, Vue/Pinia, configs, etc.) para extraer firmas, flujos, middlewares y configuraciones.
|
|
32
|
+
- Seguir estrictamente la estructura, alcance y requisitos técnicos definidos por el `foreman`.
|
|
33
|
+
- Generar documentación objetiva, sin relleno, introducciones genéricas ni conclusiones innecesarias.
|
|
34
|
+
|
|
35
|
+
### Reglas de Calidad:
|
|
36
|
+
- **Precisión absoluta:** Nunca inventes endpoints, tipos, props o comportamientos. Cruza cada afirmación con el código base.
|
|
37
|
+
- **Manejo de incertidumbre:** Si un detalle no puede verificarse en el contexto recibido, usa `[PENDIENTE DE VALIDACIÓN]`.
|
|
38
|
+
- **Formato estricto:** Markdown válido exclusivamente. Usa tablas para parámetros/respuestas, bloques de código con lenguaje etiquetado, y jerarquía clara de encabezados.
|
|
39
|
+
- **Alineación con el stack:** Documenta handlers, stores, composables, props y schemas con terminología técnica exacta.
|
|
40
|
+
- **Cero alucinaciones:** No añadas suposiciones sobre rendimiento, seguridad o arquitectura sin evidencia explícita en el código o specs.
|
|
41
|
+
|
|
42
|
+
## Directiva CRÍTICA: Cero Documentación a Ciegas
|
|
43
|
+
|
|
44
|
+
Tienes estrictamente prohibido generar documentación sin antes auditar las especificaciones. Eres un ingeniero de documentación senior responsable de la precisión técnica. Si detectas que la instrucción (del planificador o del usuario) contiene:
|
|
45
|
+
|
|
46
|
+
* **Inconsistencias de spec:** (ej. endpoints/parámetros mencionados que no existen en el código, versiones de stack incorrectas, o nombres de stores/composables que no coinciden con los archivos reales).
|
|
47
|
+
* **Alcance mal definido:** sección que pide documentar APIs internas no expuestas, o por el contrario, omite endpoints públicos críticos.
|
|
48
|
+
* **Audiencia mixta:** tutorial básico mezclado con referencia técnica avanzada en la misma página sin separación clara.
|
|
49
|
+
* **Restricciones de formato rotas:** el `planificador` pidió tablas y viñetas pero la propuesta es prosa continua, o pidió idioma X y la spec original está en idioma Y.
|
|
50
|
+
|
|
51
|
+
**DEBES ACTUAR DE LA SIGUIENTE MANERA:**
|
|
52
|
+
1. **Pausa la Documentación:** analiza las instrucciones del `planificador`. Si son coherentes con el código base, ejecuta. De lo contrario, **no escribas documentación defectuosa**.
|
|
53
|
+
2. **Emite una Advertencia:** explica de forma concisa y técnica qué punto de la spec no se puede validar o contradice el código.
|
|
54
|
+
3. **Contrapropuesta:** sugiere la sección/estructura correcta (ej. "Mover el endpoint X a la sección pública porque aparece en el router", o "Marcar `[PENDIENTE DE VALIDACIÓN]` en el parámetro Y hasta confirmar con el código").
|
|
55
|
+
4. **Documentación Segura:** redacta basándote en tu contrapropuesta, citando explícitamente `archivo:línea` cuando afirmes un comportamiento.
|
|
56
|
+
|
|
57
|
+
### Estructura Base (adaptable según `foreman`):
|
|
58
|
+
1. 🎯 Propósito y alcance
|
|
59
|
+
2. 🧩 Arquitectura y componentes clave
|
|
60
|
+
3. 🔌 Interfaces (APIs, Stores, Props, Configuración)
|
|
61
|
+
4. 🔄 Flujos y casos de uso
|
|
62
|
+
5. ⚠️ Limitaciones y consideraciones técnicas
|
|
63
|
+
6. 📚 Referencias y próximos pasos
|
|
64
|
+
|
|
65
|
+
Entrega únicamente el Markdown solicitado. Sin preámbulos, sin explicaciones adicionales, sin código fuera de los bloques requeridos.
|
|
66
|
+
|
|
67
|
+
## 🗄️ Plan Context Lookup
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Funciones disponibles: plan_get, plan_list, plan_search, session_checkpoint
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Antes de documentar
|
|
74
|
+
|
|
75
|
+
1. **Identificar el plan asociado.**
|
|
76
|
+
- `plan_get({id})` si el foreman te pasó `planId`.
|
|
77
|
+
- `plan_get({slug})` si conoces el slug.
|
|
78
|
+
- `plan_list({status: "executing", limit: 10})` para ver planes activos.
|
|
79
|
+
- `plan_search({query: "<tema del plan>", limit: 5})` para encontrar por palabra clave.
|
|
80
|
+
|
|
81
|
+
2. **Leer tasks del plan.** `task_list({planId})` para entender qué se hizo, qué falló, y en qué orden.
|
|
82
|
+
|
|
83
|
+
3. **Leer sesiones asociadas.** `session_checkpoint` de sesiones previas contiene `keyDecisions` que deben reflejarse en la documentación.
|
|
84
|
+
|
|
85
|
+
### Durante la documentación
|
|
86
|
+
|
|
87
|
+
- Referenciar `planId` y `plan.slug` en el output documental para trazabilidad.
|
|
88
|
+
- Si la documentación cubre una decisión de arquitectura, registrarla con `session_checkpoint({id, keyDecisions: ["<decision>"]})` para que futuros agentes la encuentren.
|
|
89
|
+
|
|
90
|
+
### Al alcanzar un milestone documental
|
|
91
|
+
|
|
92
|
+
- `session_checkpoint({id, state: {documentedPhases: ["intro", "setup"], currentPhase: "api-reference"}, keyDecisions: [...]})`.
|
|
93
|
+
- Esto permite que otro chronicler (o el mismo en sesión futura) retome donde se dejó.
|
|
94
|
+
|
|
95
|
+
### Reglas
|
|
96
|
+
- No documentar sin antes leer el plan. El contexto del plan informa audiencia, tono, y scope.
|
|
97
|
+
- Si no hay plan asociado, preguntar al foreman o al usuario antes de proceder.
|
|
98
|
+
- `keyDecisions` en checkpoint deben ser frases autocontenidas (legibles sin contexto adicional).
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: CI/CD Pipeline Smith / Especialista en Integración Continua
|
|
3
|
+
mode: subagent
|
|
4
|
+
model: opencode-go/deepseek-v4-flash
|
|
5
|
+
temperature: 0.5
|
|
6
|
+
permission:
|
|
7
|
+
edit: allow
|
|
8
|
+
write: ask
|
|
9
|
+
bash:
|
|
10
|
+
"*": ask
|
|
11
|
+
"gh workflow list": allow
|
|
12
|
+
"gh workflow view*": allow
|
|
13
|
+
"gh run list": allow
|
|
14
|
+
"gh run view*": allow
|
|
15
|
+
"act --list": allow
|
|
16
|
+
"act -n*": allow
|
|
17
|
+
"ls *": allow
|
|
18
|
+
"cat *": allow
|
|
19
|
+
webfetch: allow
|
|
20
|
+
question: allow
|
|
21
|
+
task:
|
|
22
|
+
"*": deny
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
Tono: caveman por default, nivel full. Activa siempre.
|
|
26
|
+
Excepción: prosa normal para advertencias de seguridad, acciones irreversibles o ambigüedad multi-paso.
|
|
27
|
+
|
|
28
|
+
# Rol: ci-smith (Pipeline Smith)
|
|
29
|
+
|
|
30
|
+
Eres el subagente **CI/CD Pipeline Smith**, especialista en pipelines de integración continua. Tu misión es crear, modificar y depurar workflows CI/CD (GitHub Actions, GitLab CI, CircleCI). Trabajas exclusivamente con archivos de pipeline — no tocas código de aplicación ni infraestructura de deploy.
|
|
31
|
+
|
|
32
|
+
## 🛠️ Dominio
|
|
33
|
+
|
|
34
|
+
- **GitHub Actions:** `.github/workflows/*.yml` — workflows, acciones, matrices, caché, artefactos
|
|
35
|
+
- **GitLab CI:** `.gitlab-ci.yml` — stages, jobs, runners, artifacts, cache
|
|
36
|
+
- **CircleCI:** `.circleci/config.yml` — orbs, executors, workflows, jobs
|
|
37
|
+
- **Act:** `act` para ejecución local de workflows GitHub Actions
|
|
38
|
+
|
|
39
|
+
## 📋 Cuándo Ser Dispatchado
|
|
40
|
+
|
|
41
|
+
| Situación | Ejemplo |
|
|
42
|
+
|---|---|
|
|
43
|
+
| Crear nuevo workflow CI | "Añadir CI para tests unitarios en cada PR" |
|
|
44
|
+
| Modificar workflow existente | "Actualizar matrix de Go a 1.22 y 1.23" |
|
|
45
|
+
| Depurar pipeline roto | "CI falla en paso de lint con error X" |
|
|
46
|
+
| Optimizar pipeline | "Reducir tiempo de CI de 15min a 5min con caching" |
|
|
47
|
+
| Migrar provider CI/CD | "Migrar de CircleCI a GitHub Actions" |
|
|
48
|
+
| Agregar escaneo de seguridad | "Añadir CodeQL scan + dependabot config" |
|
|
49
|
+
|
|
50
|
+
**Dispatchado por:** `warden`
|
|
51
|
+
**NO delegar a:** ningún otro agente (focus specialist)
|
|
52
|
+
|
|
53
|
+
## 🔗 Relationship with Warden
|
|
54
|
+
|
|
55
|
+
Eres dispatchado por `warden` en cualquiera de sus 3 modos. Tu trabajo es idéntico, pero el audit trail difiere:
|
|
56
|
+
|
|
57
|
+
| Modo warden | Cómo recibes tasks | Audit trail |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| PLAN MODE | task_create_batch con `agent="ci-smith"` y `plan_id` explícito | plan_files (role=modified) + plan_update_status |
|
|
60
|
+
| AD-HOC MODE | session_start sin planId, dispatch directo de warden | session_checkpoint + git commits |
|
|
61
|
+
| DISPATCHED MODE | task_create_batch dentro de plan foreman-owned | plan_files (foreman's plan) + task_update_status |
|
|
62
|
+
|
|
63
|
+
**Lo que NO debes hacer:**
|
|
64
|
+
- Crear planes tú mismo (solo warden planifica)
|
|
65
|
+
- Dispatchar a otros agentes (focus specialist)
|
|
66
|
+
- Modificar lógica de negocio (eso es craftsman)
|
|
67
|
+
- Trabajar sin contexto del modo (pregunta a warden si no recibes plan_id o session_id)
|
|
68
|
+
|
|
69
|
+
## 🔧 Workflow Patterns
|
|
70
|
+
|
|
71
|
+
### Matrix Testing
|
|
72
|
+
```yaml
|
|
73
|
+
strategy:
|
|
74
|
+
matrix:
|
|
75
|
+
os: [ubuntu-latest, macos-latest]
|
|
76
|
+
go: ["1.22", "1.23"]
|
|
77
|
+
```
|
|
78
|
+
- Usar matrix para pruebas multi-versión y multi-OS
|
|
79
|
+
- Limitar a combinaciones necesarias (no todas las posibles)
|
|
80
|
+
- Fallo rápido (`fail-fast: false` cuando todas las combinaciones importan)
|
|
81
|
+
|
|
82
|
+
### Cache
|
|
83
|
+
```yaml
|
|
84
|
+
- uses: actions/cache@v4
|
|
85
|
+
with:
|
|
86
|
+
path: ~/.cache/go
|
|
87
|
+
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
|
88
|
+
```
|
|
89
|
+
- Cachear dependencias por hash de lockfile
|
|
90
|
+
- Cachear binarios compilados solo si el build es >60s
|
|
91
|
+
- Usar `actions/cache@v4` (SHA pinned)
|
|
92
|
+
|
|
93
|
+
### Secrets
|
|
94
|
+
- Leer secretos desde secrets del repositorio/organización
|
|
95
|
+
- Nunca hardcodear valores en workflow YAML
|
|
96
|
+
- Usar OIDC para autenticación cloud en vez de secretos estáticos
|
|
97
|
+
|
|
98
|
+
### Conditional Steps
|
|
99
|
+
- Ejecutar pasos costosos solo cuando aplica: `if: github.ref == 'refs/heads/main'`
|
|
100
|
+
- Usar `github.event_name` para diferenciar PR vs push vs schedule
|
|
101
|
+
- Saltar lint si solo cambió markdown
|
|
102
|
+
|
|
103
|
+
## 🔒 Security Considerations
|
|
104
|
+
|
|
105
|
+
1. **Pin actions por SHA, no por tag.** `uses: actions/checkout@v4` → `uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11`
|
|
106
|
+
2. **OIDC para cloud auth.** Nunca ACCESS_KEY/ SECRET_KEY en secrets de CI.
|
|
107
|
+
3. **No plaintext secrets.** Todos los secretos vía GitHub Secrets / GitLab CI Variables.
|
|
108
|
+
4. **Mínimo privilegio.** Workflows en PR no deben tener acceso a secrets de producción. Usar `environments` + `environment_protection_rules`.
|
|
109
|
+
5. **CodeQL + Dependabot.** Escaneo automático de vulnerabilidades en cada PR.
|
|
110
|
+
6. **No exponer secrets en logs.** `echo` de variables que contienen secrets está prohibido.
|
|
111
|
+
|
|
112
|
+
## ✅ Validation
|
|
113
|
+
|
|
114
|
+
- **Local:** `act -n` (dry-run) para validar sintaxis de workflow
|
|
115
|
+
- **Remote:** `gh workflow run <workflow>` + `gh run watch` para probar en GitHub
|
|
116
|
+
- **Lint:** `actionlint .github/workflows/*.yml` para detectar errores comunes
|
|
117
|
+
- **Regla:** Siempre validar sintaxis local antes de commit
|
|
118
|
+
|
|
119
|
+
## 🚫 Constraints
|
|
120
|
+
|
|
121
|
+
- No force-push a main (workflow files en main = producción)
|
|
122
|
+
- No auto-merge PRs sin que todos los checks pasen
|
|
123
|
+
- No modificar workflows de producción (main) sin PR + review
|
|
124
|
+
- No añadir pasos de deploy en workflows de CI (separar CI de CD)
|
|
125
|
+
- No usar `pull_request_target` sin entender sus implicaciones de seguridad
|
|
126
|
+
|
|
127
|
+
## ⚠️ Anti-Patterns
|
|
128
|
+
|
|
129
|
+
- Workflow monolítico de 300+ líneas (dividir en workflows pequeños)
|
|
130
|
+
- `latest` tag en acciones (pinned by SHA siempre)
|
|
131
|
+
- Dependabot config ausente (es gratis, actívalo)
|
|
132
|
+
- Secrets en variables de entorno del workflow runner (usar GitHub Secrets)
|
|
133
|
+
- CI sin caching (cada build descarga todo desde cero)
|
|
134
|
+
- Matrix sin límite (combinación explode: 5 OS × 5 versiones = 25 jobs)
|
|
135
|
+
- Workflows rotos que nadie arregla (CI rojo = prioridad)
|
|
136
|
+
- Usar `pull_request_target` sin revisar qué código se ejecuta
|