{"id":"bc768283-7b75-4d86-913e-7fdc34a2636a","slug":"aurora-ai","kind":"skill","name":"aurora-ai","summary":"Production-ready multi-agent OpenCode configuration featuring automatic model fallback, persistent structured project memory, and reusable workflows. Built for modern AI tooling and forkability.","owner":"himuraxp","repoUrl":"https://github.com/himuraxp/aurora-ai","license":"MIT","licenseTier":"permissive","trust":"community","stars":2,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-06-05T10:56:37.000Z","addedAt":"2026-10-22T03:01:02.399Z","logoUrl":"https://avatars.githubusercontent.com/u/9629097?u=b7917a00424371732fd177aef3d58f286960159e&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["memory-knowledge"],"tags":[],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T00:39:09.420Z","sample":false,"url":"https://conduits.dev/tools/aurora-ai","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<div align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\".github/assets/aurora-hero-dark.png\">\n    <img src=\".github/assets/aurora-logo-without-name.png\" width=\"300\" alt=\"Aurora logo\">\n  </picture>\n\n  <h1>Aurora</h1>\n\n  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Last Commit](https://img.shields.io/github/last-commit/himuraxp/aurora-ai.svg)](https://github.com/himuraxp/aurora-ai/commits/main) [![OpenCode Compatible](https://img.shields.io/badge/OpenCode-Compatible-brightgreen.svg)](https://opencode.ai)\n\n  > **A production-ready OpenCode setup for multi-agent AI workflows — Angular, Node.js, NestJS, Astro.**\n\n  Forkable. Extensible. Ready to use.\n\n  **English** · [Français](README.fr.md)\n</div>\n\n> If Aurora is useful to you, consider starring the repository ⭐ — it helps other builders find it.\n\n---\n\n## Why Aurora?\n\nAI agents (OpenCode, Cursor, Claude...) don't know which standard to follow unless you tell them — and they can lose project context between sessions. **Aurora** turns OpenCode into an orchestrated, self-documenting engineering team.\n\n**What you get:**\n\n- **19 specialized agents + 4 plugin agents** — engineering roles (reviewer, tester, security, architect, designer...), a Search & Growth team and a delegated product owner\n- **17 universal standards + 44 skills** — adversarial review, verification, commits, plus the 17-skill accessibility suite\n- **Execution graph core (new in v1.4.0)** — stdlib Python package `skills/graph_core/`: transition engine, transactional journal, fenced scheduler — spec-first (RFC), 84 tests, running as a shadow pilot; full docs in [docs/graph-engineering/](docs/graph-engineering/)\n- **Persistent project memory** — 7 `docs/ai/` documents auto-read at session start: agents keep context across sessions\n- **14 models with automatic fallback** — 250k → 1M context, cost-based agent assignment\n- **Consistent across machines** — same setup and behavior everywhere, with ready-to-use examples (Angular, Node.js API, monorepo)\n\n→ [Quick Start](#quick-start) — operational in a few minutes.\n\n## Quick Start\n\n### 1. Install (first time)\n\n```bash\ngit clone https://github.com/himuraxp/aurora-ai.git ~/.config/opencode-config\ncd ~/.config/opencode-config\nnpm run setup\n```\n\n> Bash equivalent: `~/.config/opencode-config/scripts/setup.sh`\n\n`setup.sh` is interactive: checks prerequisites (Node.js 18+, npm), installs or updates `opencode-ai` (npm global) and `rtk` (Homebrew on macOS), offers the MCP servers, copies agents, standards, frameworks and config files, and asks interactively for environment variables (API key, endpoints).\n\n> Secrets live in `~/.config/opencode/.env` (permissions 600, never versioned) and in an idempotent **managed block** in your shell rc — the API key never exists in two copies. Details in [Configuration](#configuration).\n\nIf `.env` already exists with the required variables, the configuration step is skipped. To reconfigure: `npm run setup -- --force`.\n\nWith an API key configured, the setup ends with an optional **model configuration** step: `configure-models.sh` probes which models your keys can actually use and maps them to agent roles — Infomaniak, OpenAI, Anthropic, Google, OpenRouter or a local Ollama. Existing verified setups are preserved as-is; skip the prompt and run `npm run configure-models` anytime.\n\n### 2. Update (subsequent changes)\n\n```bash\ncd ~/.config/opencode-config\ngit pull\nnpm run update\n```\n\n> Bash equivalent: `./scripts/install.sh`\n\n`install.sh` reports each file as `new`, `updated` or `unchanged` and only rewrites modified files. Options:\n\n```bash\nnpm run setup             # full update (config + dependencies + checks)\nnpm run prune             # clean orphan files after renames/removals\nnpm run update -- --no-config   # update without touching opencode.json / plugins\n```\n\n> ⚠️ Do not pipe `npm run update` into `head` (or any early-closing consumer) —\n> SIGPIPE kills the installer mid-copy and leaves a partially-populated live.\n> Redirect to a file instead: `npm run update > update.log`. A re-run is\n> idempotent and repairs a partial live. `update` also verifies the repo is\n> fresh against `origin` before deploying (`--skip-freshness-check` for an\n> explicit offline/intentional derogation — announced, never silent).\n\n### 3. Initialize a project\n\n```bash\ncd my-project\n~/.config/opencode-config/scripts/init-project.sh\n# preview without changing anything: add --dry-run\n```\n\nResult:\n\n```txt\nmy-project/\n├── AGENTS.md\n└── docs/\n    └── ai/\n        ├── PLAN.md       → current technical plan\n        ├── STATUS.md     → progress state\n        ├── DECISIONS.md  → structural decisions\n        ├── CHANGELOG.md  → session history\n        ├── BUFFER.md     → session buffer\n        ├── INDEX.md      → project map\n        └── WARNINGS.md   → alerts and technical debt\n```\n\n### 4. Sync templates in an existing project\n\n```bash\n~/.config/opencode-config/scripts/sync-project.sh\n# preview without changing anything: add --dry-run\n```\n\nNever overwrites existing files: it creates `.new` files (or timestamped files) that you merge manually.\n\n**Operational in minutes.**\n\n## Table of contents\n\n- [Why Aurora?](#why-aurora)\n- [Quick Start](#quick-start)\n- [Agent State Layer](#agent-state-layer)\n- [Configuration](#configuration)\n- [Models and Fallback](#models-and-fallback)\n- [Project Memory](#project-memory)\n- [Releases & versioning](#releases--versioning)\n- [Architecture](#architecture)\n- [How to use it](#how-to-use-it)\n- [How to customize](#how-to-customize)\n- [Documentation](#documentation)\n- [FAQ](#faq)\n- [Repository structure](#repository-structure)\n- [Priority order](#priority-order)\n\n---\n\n## Agent State Layer\n\nAI agents lose context at every new session. This repository solves that with a persistent memory layer:\n\n| Document | Problem solved |\n|----------|---------------|\n| **BUFFER.md** | Session interruptions — recovery snapshot |\n| **INDEX.md** | Wasted reads — project mapped at a glance |\n| **WARNINGS.md** | Regressions — active alerts before any change |\n| **STATUS.md** | Continuity — progress state across sessions |\n| **PLAN.md** | Direction — current technical plan |\n| **DECISIONS.md** | Traceability — justified structural decisions |\n| **CHANGELOG.md** | History — dated session log, consulted on suspected regression |\n\nSession cycle (review and verification run in parallel):\n\n```txt\nEXPLORER → PLAN → IMPLEMENT → [PARALLEL GATE: REVIEW ∥ VERIFY] → COMMIT\n```\n\nWith the **PARALLEL GATE** — adversarial review and build/lint/test verification running concurrently — mandatory before considering a task done.\n\n---\n\n## Configuration\n\n### Environment variables\n\nOpenCode does **not** load `.env` files: the `{env:...}` references in\n`opencode.json` only read the shell environment. Hence two locations:\n\n- **Shell rc (block managed by `setup.sh`)**: the Infomaniak AI API key (**single\n  copy**) and the iOS MCP `IDB_*` values, since the iOS MCP only reads its process\n  environment (no `.env` fallback). The block is idempotent: pre-existing exports\n  of these variables are moved into the block, never duplicated.\n- **`~/.config/opencode/.env`**: variables read directly by the MCP servers\n  and tools (internal fallback in their own code).\n\n| Variable | Location | Usage | Required |\n|----------|----------|-------|----------|\n| `OPENAI_API_KEY_INFOMANIAK` | shell rc (managed block) | Infomaniak AI API key | Yes |\n| `IDB_UDID` | shell rc (managed block) | iOS simulator UDID (ios-simulator MCP) | No |\n| `IDB_PATH` | shell rc (managed block) | idb binaries path (ios-simulator MCP) | No |\n| `INFOMANIAK_API_TOKEN` | `.env` | Infomaniak API token (infomaniak MCP — `.env` fallback) | No |\n| `GITLAB_TOKEN` | shell rc or `.env` | GitLab token (angular-elements MCP — `.env` fallback) | No |\n| `FIGMA_TOKEN` | `.env` | Figma API token (`figma-ds-sync` skill — design system sync) | No |\n\n`setup.sh` asks for these values interactively. For the `.env` variables\n(`INFOMANIAK_API_TOKEN`, `FIGMA_TOKEN`, ...), edit `~/.config/opencode/.env`\ndirectly. For the API key and the `IDB_*` values, use `setup.sh --force`\n(Enter to keep, new value to replace) — or edit the managed block in the\nshell rc.\n\n### MCP Servers\n\nThe configuration includes seven MCP servers in `opencode.json` (six active — plus `aurora-memory`, intentionally closed and routed through an orchestrator-only plugin bridge):\n\n| MCP Server | Role | Installation |\n|------------|------|-------------|\n| `chrome-devtools` | Browsing, screenshots, Lighthouse audits, Chrome debugging (isolated headless browser) | Auto-installed via `npx` on first launch |\n| `browser-debug` | Connects to a browser in debug mode (`http://127.0.0.1:9222`) — used by the `ai-cowork` skill (Aurora ↔ ChatGPT) | Auto-installed via `npx`; requires a browser started in debug mode (see below) |\n| `ios-simulator` | iOS simulator interaction (tap, swipe, screenshots, UI tree) | Optional — requires `idb-companion` + `fb-idb` |\n| `context7` | Up-to-date library and framework documentation | Auto-installed via `npx` |\n| `infomaniak` | Infomaniak API — radio, VOD, newsletter, DNS, events, AI. **Read-only by default** (write gate): mutations go through the orchestrator-only `infomaniak_api_call` bridge | Local (see `mcp/infomaniak/README.md`) |\n| `aurora-memory` | Personal memory service (knowledge graph, facts, goals, events) — **closed as an MCP** (`enabled: false`): the only access path is the orchestrator-only `aurora_memory` bridge plugin | Local (aurora-core) |\n| `angular-elements` | Angular Elements design system — components, API, stories | Local (see `mcp/angular-elements/README.md`) |\n\n#### chrome-devtools-mcp\n\nNo manual installation needed. The `chrome-devtools-mcp` package is downloaded automatically by `npx` on first call.\n\nTwo instances coexist (tools prefixed with the server name):\n- `chrome-devtools_*` — isolated headless (Designer, audits)\n- `browser-debug_*` — connected to `http://127.0.0.1:9222` (`ai-cowork` skill)\n\nFor debug mode (persistent browser session, ChatGPT login preserved):\n\n```bash\n\"/Applications/Brave Browser.app/Contents/MacOS/Brave Browser\" \\\n  --remote-debugging-port=9222 \\\n  --user-data-dir=\"$HOME/.config/opencode/brave-debug-profile\"\n```\n\n> The dedicated `--user-data-dir` is **mandatory** (Chromium ≥136 ignores `--remote-debugging-port` on the default profile).\n\n#### ios-simulator-mcp (macOS only)\n\nThis MCP requires 3 external dependencies:\n\n| Dependency | Installation |\n|------------|-------------|\n| Xcode | App Store (required for `xcrun simctl`) |\n| `idb-companion` | `brew tap facebook/fb && brew install idb-companion` |\n| `fb-idb` | `python3 -m venv ~/.local/idb-venv && ~/.local/idb-venv/bin/pip install fb-idb` |\n\n`setup.sh` offers to install these dependencies automatically. If you decline or are on Linux, the MCP stays configured in `opencode.json` but will fail at runtime — you can disable it by setting `\"enabled\": false`.\n\nRelated environment variables (shell rc, block managed by `setup.sh` — the\nios-simulator MCP does not read `.env`):\n\n| Variable | Usage |\n|----------|-------|\n| `IDB_UDID` | Target iOS simulator UDID (auto-detected by `setup.sh`) |\n| `IDB_PATH` | Path to the `idb` binaries (default: `~/.local/idb-venv/bin:...`) |\n\n### What gets installed\n\n```txt\n~/.config/opencode/\n├── agents/                    # AI personalities\n├── standards/                 # Universal behaviors\n├── frameworks/                # Per-stack technical rules\n├── opencode.json              # Main config (providers, models, permissions, MCP)\n├── oh-my-opencode-slim.json   # Subagent presets\n├── package.json               # Plugin dependencies\n├── plugins/\n│   ├── rtk.ts                 # RTK plugin (token savings)\n│   ├── infomaniak-bridge.ts   # Orchestrator-only write bridge (Infomaniak API)\n│   ├── product-authority.ts   # Product-authority controller (3 tools, fail-closed)\n│   └── aurora-memory.ts       # Personal memory bridge (orchestrator-only)\n├── .env                       # Secrets (never versioned)\n└── .env.example               # Environment variable template\n```\n\n---\n\n## Models and Fallback\n\n> The table below describes the **maintainer's reference setup** (Infomaniak AI). If you use other providers — Claude (Anthropic), GPT (OpenAI), Gemini (Google), OpenRouter or a local Ollama — run [`scripts/configure-models.sh`](scripts/README.md): it discovers which models your keys can actually use (real probes, no catalog guesswork), maps them to the same agent roles, and rewrites the config while preserving every already-verified selection. A transient outage never triggers a durable reconfiguration.\n\n### 14 configured models\n\nThe configuration uses **13 models** across 5 categories:\n\n| Category | Models | Max context | Cost (input/output) | Usage |\n|----------|--------|-------------|---------------------|-------|\n| **Expert** | euria-code (GLM-5.2) | 250k | $0.60 / $3.00 | Complex reasoning, architecture, security, review, code |\n| | euria-code-tiny | 200k | $0.30 / $0.40 | Lightweight version of euria-code, multimodal (image) |\n| **Intermediate** | Mistral-Small-4 (119B) | 256k | $0.20 / $0.75 | Commits, CLI skills, technical SEO, content |\n| | Kimi-K2.6 | 256k | $0.60 / $3.00 | Large-context fallback |\n| | Qwen3.5-397B | 204k | $0.80 / $3.60 | Native multimodal (image+video), available on request |\n| | Qwen3.8-27B | 100k | $0.80 / $3.60 | Intermediate Qwen, ultimate fallback |\n| **Light** | Ministral-3 (14B) | 80k | $0.30 / $0.40 | Light model — plugin agents `explorer`/`librarian` only |\n| | Gemma-4-31B | 100k | $0.20 / $0.40 | General tasks |\n| | Apertus-70B | 100k | $0.70 / $2.50 | General tasks |\n| **Embedding** | Qwen3-Embedding-8B | 32k | $0.01 / $0 | Vectorization (recommended) |\n| | bge_multilingual_gemma2 | 8k | $0.01 / $0 | Multilingual FR/EN |\n| | mini_lm_l12_v2 | 512 | $0.005 / $0 | Short texts |\n| **Transcription** | whisper | 448k | $0.006 / $0 | Audio → text |\n\n### Automatic fallback\n\nWhen a prompt exceeds a model's context limit, OpenCode switches **automatically** to a model with more context. Notable chains:\n\n```\nMinistral-3 (80k)      → Mistral-Small-4 (256k) → Kimi-K2.6 → Qwen3.8-27B (100k)\neuria-code (250k)      → Kimi-K2.6 (256k)       → Qwen3.8-27B (100k)\nGemma-4 (100k)         → Mistral-Small-4 (256k) → Kimi-K2.6 → Qwen3.8-27B (100k)\nQwen3.5-397B (204k)    → Kimi-K2.6 (256k)       → Qwen3.8-27B (100k)\n```\n\n> **Note (2026-10-27 catalog sync)**: the ultimate fallback is now **Qwen3.8-27B** (100k context) — Nemotron-3-Nano (1M) and Qwen3.5-122B were removed from the Infomaniak catalogue. The last fallback hop shrinks context instead of extending it.\n\n### Agent assignment\n\n| Agent | Model | Why |\n|-------|-------|-----|\n| `aurora`, `architect`, `security`, `cybersec`, `reviewer`, `atlas`, `sage`, `mobile`, `tester`, `beacon`, `crawler`, `build`, `plan` | euria-code (GLM-5.2) | Expert reasoning, code, security, native 1M long-context |\n| `aurora-heavy`, `designer`, `vision` | Qwen3.5-397B | Native multimodal (image+video), screenshot and mockup analysis |\n| `echo`, `scribe`, `pulse` | Mistral-Small-4 (119B) | Good cost/performance/creativity balance |\n| `spark` | Kimi-K2.6 | Commits, CLI skills — 256k context avoids the compaction loop |\n| `oracle` (plugin) | euria-code (high variant) | Strategic advisory, adversarial review |\n| `fixer` (plugin) | Qwen3.8-27B | Fast spec execution |\n| `explorer`, `librarian` (plugin) | Ministral-3 (14B) | Fast codebase / external docs search |\n\n---\n\n## Project Memory\n\nAurora automatically detects the `docs/ai/` folder at the project root at the start of every session.\n\n### Automatic read at bootstrap\n\nIf `docs/ai/` exists, Aurora immediately loads:\n\n1. `STATUS.md` — current state, blockers, next step\n2. `PLAN.md` — current technical plan\n3. `WARNINGS.md` — active alerts and risk zones\n4. `INDEX.md` — project map\n\n### Conditional reads\n\n- **BUFFER.md**: loaded only when resuming an interrupted session, when `STATUS.md` reports a blocker, or when the user explicitly asks to resume a task.\n- **DECISIONS.md**: consulted JIT (Just-In-Time) when a structural decision, a contradiction or an architecture overhaul is detected.\n- **CHANGELOG.md**: consulted JIT when a regression is suspected or the user asks for history.\n\n### Why `.new` files are never read\n\nDuring a sync (`sync-project.sh`), existing files are not overwritten. The script generates `.new` files as update proposals, or `.new.YYYYMMDD-HHMMSS` if a proposal already exists.\n**OpenCode never reads `.new` files automatically.** They must be merged manually into the official files.\n\n### Existing Project Adoption Checklist\n\nTo adopt project memory on an existing project that already has `docs/ai/`:\n\n1. Run `init-project.sh` in the existing project.\n2. Check the files created in `docs/ai/`.\n3. Compare any generated `.new` files.\n4. Manually merge the useful sections.\n5. Delete the `.new` files once processed.\n6. Start OpenCode with Aurora.\n7. Verify that Aurora announces the detected project memory.\n\n---\n\n## Releases & versioning\n\nSemantic versioning is **automated** by [release-please](https://github.com/googleapis/release-please):\n\n- Conventional Commits drive the next version: `feat:` → minor, `fix:` → patch, `feat!:` / `BREAKING CHANGE:` → major (`docs:`/`chore:` alone → no release).\n- Every merge to `main` updates (or creates) a **Release PR** (bumps `package.json`, writes the semantic `CHANGELOG.md`). Merging that Release PR tags `vX.Y.Z` and publishes a GitHub Release — the human merge is the only publish trigger.\n- `npm run health-check` verifies the declared version stays coherent with the release-please manifest.\n- Pre-semantic historical entries (date-based journal) are archived in [docs/CHANGELOG-dates.md](docs/CHANGELOG-dates.md).\n\n---\n\n## Architecture\n\n```txt\nGlobal Configuration\n        ↓\n     Standards    (workflow, memory-session-flow, memory-auto-update, memory-checklist, verification, communication, escalation, commits, review-before-done, audit, exploration-limits, error-correction, anti-patterns, artifact-authoring, delegation-failure, agent-output, product-authority)\n        ↓\n          Agents       (aurora, aurora-heavy, reviewer, tester, security, cybersec, architect, spark, vision, atlas, crawler, sage, scribe, pulse, echo, beacon, designer, mobile, product-owner) + plugin (explorer, fixer, librarian, oracle)\n        ↓\n    Frameworks     (angular-20, nodejs, nestjs, astro...)\n        ↓\n Project AGENTS.md (local source of truth)\n        ↓\n   Project Docs    (PLAN, STATUS, DECISIONS, CHANGELOG, BUFFER, INDEX, WARNINGS)\n```\n\n**Standards**: universal behaviors applicable to any project.\n**Agents**: specialized personalities for specific tasks.\n**Frameworks**: technical rules per stack (Angular, Node.js, NestJS, Astro).\n**Project AGENTS.md**: ultimate source of truth, local always takes precedence.\n**Project Docs**: persistent session memory across AI conversations.\n\n---\n\n## How to use it\n\nAfter installation, the Aurora agent (main) automatically loads:\n\n```txt\n1. Global standards (workflow, communication, verification...)\n2. Global agents (aurora, aurora-heavy, reviewer, tester, security, cybersec, architect, spark, vision, atlas, crawler, sage, scribe, pulse, echo, beacon, designer, mobile, product-owner) + plugin agents (explorer, fixer, librarian, oracle)\n3. Targeted framework (Angular 20+, Node.js, etc.)\n4. Company standards (if configured)\n5. Local AGENTS.md + docs/ai/\n```\n\nThe golden rule: **local always takes precedence**. The `AGENTS.md` at the project root is the ultimate source of truth.\n\n---\n\n## How to customize\n\n### Customize the agents\n\nEdit the files in the cloned repo, then run `npm run update` (or `./scripts/install.sh`).\n\nThe available agents live in `agents/`:\n\n| Agent | Role |\n|-------|------|\n| `aurora.md` | Main agent — loading and coordination |\n| `aurora-heavy.md` | Agent for complex tasks (euria-code) |\n| `reviewer.md` | Strict code review |\n| `tester.md` | Quality tests |\n| `security.md` | Defensive cybersecurity — AppSec, threat modeling, secure code review, DevSecOps, hardening |\n| `cybersec.md` | Offensive cybersecurity — pentest, Red Team, exploitation, recon, bypass, privesc |\n| `architect.md` | Technical breakdown |\n| `spark.md` | Lightweight subagent (commit, MR) |\n| `vision.md` | Multimodal subagent (images, screenshots) |\n| `atlas.md` | SEO Strategy — strategy, keyword research, content gaps |\n| `crawler.md` | Technical SEO — technical SEO audit and fixes |\n| `sage.md` | AIO / GEO — optimization for generative search engines |\n| `scribe.md` | SEO Content — editorial production and optimization |\n| `pulse.md` | Growth Marketing — acquisition, conversion, funnel |\n| `echo.md` | Social Distribution — multi-channel distribution |\n| `beacon.md` | Analytics — SEO and marketing measurement |\n| `designer.md` | UX/UI Designer — interface design, art direction, design system, accessibility (2 modes: standalone / Infomaniak DS) |\n| `mobile.md` | Mobile Engineer — iOS, Android, React Native, Flutter |\n| `product-owner.md` | Delegated Product Owner — proposes product decisions, never ratifies (see `standards/product-authority.md`) |\n\n> Agents **provided by the plugin** `oh-my-opencode-slim` (config `config/oh-my-opencode-slim.json`): `explorer` (codebase search), `fixer` (fast spec execution), `librarian` (external docs search), `oracle` (strategic technical advisory, adversarial review).\n\n### Add a framework\n\nCreate a `frameworks/<my-framework>.md` file in the repo:\n\n```txt\nframeworks/\n├── angular-20.md   # Angular 20+ stand-alone\n├── nodejs.md       # Node.js API / Express\n├── nestjs.md       # Modular NestJS architecture\n└── astro.md        # Astro static sites, SEO, i18n\n```\n\nThe file name becomes the framework name. Run `npm run update` (or `./scripts/install.sh`) to deploy it.\n\n### Create a new rule\n\n1. In the `~/.config/opencode-config` repo\n2. Create a file in `standards/` (universal) or `agents/` (specialized role)\n3. Run `npm run update` (or `./scripts/install.sh`)\n4. Reference it in the `AGENTS.md` of the relevant project\n\n### Customize the session workflow\n\nEdit `standards/workflow.md` and `standards/memory-session-flow.md` to adapt the work cycle and session memory handling.\n\n### Adapt a project's stack\n\nThe `AGENTS.md` template is intentionally generic. Add the useful stack conventions to the local `AGENTS.md`, or reference a global framework:\n\n- `frameworks/angular-20.md`\n- `frameworks/nodejs.md`\n- `frameworks/nestjs.md`\n- `frameworks/astro.md`\n\n---\n\n## Documentation\n\n| Guide | Content |\n|-------|---------|\n| [Workflow](docs/workflow.md) | How the work cycle works, step by step |\n| [Customization](docs/customization.md) | How to customize and extend (agents, standards, frameworks) |\n| [Architecture](docs/architecture.md) | How the configuration layers fit together |\n| [Angular 20](docs/angular-20.md) | Detailed Angular 20+ rules |\n| [Code review](docs/code-review.md) | Code review guide |\n| [Testing](docs/testing.md) | Testing guide |\n| [Examples](examples/) | Ready-to-use projects: Angular app, Node API, monorepo |\n\n---\n\n## FAQ\n\n<details>\n<summary><strong>Is it macOS-only?</strong></summary>\n\nThe configuration is developed on **macOS**. The core (OpenCode, agents, standards, frameworks) is cross-platform (Node.js 18+). Two macOS-specific parts: `rtk` installs via Homebrew (manual install on Linux) and the `ios-simulator` MCP requires Xcode — set `\"enabled\": false` for this MCP on Linux.\n\n</details>\n\n<details>\n<summary><strong>Where do my API keys and secrets go?</strong></summary>\n\nIn `~/.config/opencode/.env` (permissions 600, never versioned) for the MCP tools, and in the **managed block** of your shell rc for the Infomaniak AI API key — never in `opencode.json` and never committed. See [Configuration](#configuration).\n\n</details>\n\n<details>\n<summary><strong>How do I verify my installation?</strong></summary>\n\n```bash\nnpm run health-check           # config consistency (JSON, agents, models, test suites)\nnpm run permissions            # agent permissions matrix\nnpm run validate-memory        # docs/ai/ structure of a project\nnpm run mcp-lock               # lock local MCP dependencies (supply-chain hardening)\nnpm run test:product-authority # product-authority behavioral invariants\n```\n\n</details>\n\n<details>\n<summary><strong>Does it work with Cursor or Claude Code?</strong></summary>\n\nThe project memory (`docs/ai/`, `AGENTS.md`) and the conventions (standards, frameworks) are agent-agnostic and readable by any AI tool. The agents and skills themselves are OpenCode-format.\n\n</details>\n\n<details>\n<summary><strong>Git push fails with `RPC failed, HTTP 400` on large files?</strong></summary>\n\nGitHub rejects pushes with payloads over 1 MiB (default `http.postBuffer`). Fix: `git config http.postBuffer 157286400`, then push again. Always verify with `git ls-remote origin main` — a misleading \"Everything up-to-date\" can follow a failed push.\n\n</details>\n\n---\n\n## Repository structure\n\n<details>\n<summary><strong>Repository tree</strong></summary>\n\n```txt\naurora-ai/\n│\n├── README.md\n├── LICENSE\n├── CHANGELOG.md\n│\n├── config/                     OpenCode config (versioned, no secrets)\n│   ├── opencode.json             Providers, models, permissions, MCP servers\n│   ├── oh-my-opencode-slim.json  Subagent presets (euria-code)\n│   ├── package.json              @opencode-ai/plugin dependency\n│   ├── .env.example              Environment variable template\n│   ├── plugins/\n│       ├── rtk.ts                RTK plugin (token savings via rtk rewrite)\n│       ├── infomaniak-bridge.ts  Orchestrator-only write bridge (Infomaniak API)\n│       ├── product-authority.ts  Product-authority controller (3 tools, fail-closed)\n│       └── aurora-memory.ts      Personal memory bridge (orchestrator-only)\n│\n├── standards/               Universal behaviors\n│   ├── workflow.md            Explore→Plan→Implement→[PARALLEL GATE]→Commit cycle\n│   ├── error-correction.md    Stop after 2 failures to avoid the spiral\n│   ├── anti-patterns.md       Stop the 5 typical session patterns\n│   ├── artifact-authoring.md  Create standards/agents/frameworks without duplicates\n│   ├── delegation-failure.md  Mandatory procedure after subagent failure\n│   ├── agent-output.md        Structured JSON output format for subagents\n│   ├── audit.md               Multi-axis read-only audit\n│   ├── review-before-done.md  Adversarial review before declaring done\n│   ├── exploration-limits.md  Targeted exploration and subagents\n│   ├── memory-session-flow.md     Automatic docs/ai/ reading order at session start\n│   ├── memory-checklist.md        Memory checklist at session end\n│   ├── memory-auto-update.md      Memory persistence standard\n│   ├── product-authority.md       Delegated product authority (private registry, fail-closed)\n│   ├── verification.md            Mandatory build/lint/test checks\n│   ├── communication.md           Directness, ownership, pushback\n│   ├── escalation.md              Blocker handling\n│   └── commits.md                 Commit format and rules\n│\n├── agents/                  19 agent definitions (+ 7 council/meeting runtime seats)\n│\n├── frameworks/                Per-stack technical rules\n│   ├── angular-20.md          Angular 20+ stand-alone conventions\n│   ├── nodejs.md              Node.js API conventions\n│   ├── nestjs.md              NestJS conventions\n│   └── astro.md               Astro conventions\n│\n├── templates/                 What every project receives\n│   ├── AGENTS.md              Root template for every project\n│   ├── PLAN.md                Current technical plan\n│   ├── STATUS.md              Progress state\n│   ├── DECISIONS.md           Structural decisions\n│   ├── CHANGELOG.md           Agent journal\n│   └── project-docs/\n│       ├── BUFFER.md          Session buffer\n│       ├── INDEX.md           Project map\n│       └── WARNINGS.md        Alerts and technical debt\n│\n├── examples/                  Ready-to-use examples\n│   ├── angular-app/           Complete Angular 20+ project (AGENTS.md + docs/ai/)\n│   ├── node-api/              Node.js API project (AGENTS.md + README)\n│   └── monorepo/              Multi-package monorepo (AGENTS.md + README)\n│\n├── mcp/                       Local MCP servers\n│   ├── infomaniak/            Infomaniak API (radio, VOD, newsletter, DNS, events, AI)\n│   └── angular-elements/      Angular Elements design system (components, API, stories)\n│\n├── tools/                     Infrastructure CLIs (repo-only, not installed as agents)\n│   └── figma-ds/              Infomaniak Figma design system sync CLI\n│       ├── src/               Strict TypeScript (check / sync / diff / mapping)\n│       ├── tests/             node:test suite (53 tests)\n│       └── *-reference.json   Manual references (Figma families, ik-* components)\n│\n├── skills/                    Reusable skills\n│   ├── accessibility/         Accessibility suite (17 orchestrated sub-skills: aria, contrast, focus, keyboard, forms…)\n│   ├── ai-cowork/             Aurora ↔ ChatGPT co-working (autonomous review loop via browser-debug)\n│   ├── allow-command/         Pre-approve shell commands in opencode.json\n│   ├── antislop/               Anti-slop AI filter (38 rules, 3 tiers, Delivery Gate — vendored from miqdadbadjuber/anti-slop v3.2.21)\n│   ├── antislop-code/          Code comment hygiene (remove AI-slop comments, keep valuable ones, never touch code)\n│   ├── antislop-copywriting/   Copy & text anti-slop (headlines, CTAs, tone, anti-AI-writing patterns)\n│   ├── antislop-ui/            UI/visual anti-slop (color, layout, components, motion)\n│   ├── clonedeps/             Clone dependency sources to inspect library internals\n│   ├── code-review/           Adversarial code review\n│   ├── codemap/               Hierarchical code maps for unknown repos\n│   ├── commit/                Commit messages (Infomaniak conventions)\n│   ├── council/               Technical Council — 3 read-only deliberation seats + Decision Gate\n│   ├── create-mr/             Merge request creation (scripts + tests)\n│   ├── deepwork/              Orchestrated multi-phase workflow with review gates (heavy efforts)\n│   ├── deployment-changelog/  Deployment changelog\n│   ├── design-qa/              Design conformance QA (Design Contract, convergence loop, fail-closed gate)\n│   ├── domain-language/        Project ubiquitous-language glossary (VALIDATED/CANDIDATE/AMBIGUOUS, extraction = proposal, canonical across worktrees)\n│   ├── figma-ds-sync/         Infomaniak Figma design system sync (check/sync/diff/mapping)\n│   ├── gitlab-ci/             GitLab CI/CD interaction (glab)\n│   ├── gitlab-feature-planner/  GitLab issues from an estimation table + MR grouping suggestions\n│   ├── gitlab-issues/         GitLab issue management (glab)\n│   ├── gitlab-summary/        GitLab activity summary\n│   ├── goals/                 Personal goals tracking (aurora-memory, orchestrator-only)\n│   ├── image-transparent-background/  White background removal (ImageMagick)\n│   ├── laravel-cruddy-by-design/  Strict RESTful Laravel controllers/routes (max 7 methods)\n│   ├── loop-engineering/      Grill + Monitor runtime for engineering loops\n│   ├── meeting/               Cross-functional pre-implementation gate (READY/CONDITIONAL/BLOCKED)\n│   ├── mr-review/             MR review with inline comments\n│   ├── mr-review-feedback/    Apply MR review feedback\n│   ├── new-worktree/          Branch + worktree from a single intent (never destructive)\n│   ├── oh-my-opencode-slim/   Configuration and tuning of the oh-my-opencode-slim plugin\n│   ├── pre-mr-review/         Pre-MR quality review\n│   ├── product-authority/     Delegated product authority (private registry, fail-closed authorization)\n│   ├── radio-tag-genres/      Music genre tagging for radio playlists\n│   ├── readme/                 README generation\n│   ├── reflect/               Past session analysis → reusable skills/config\n│   ├── release-smoke-test/    oh-my-opencode-slim release validation\n│   ├── review-gap-analyzer/   Review feedback → AGENTS.md/pre-mr-review rule improvements\n│   ├── simplify/              Code simplification without behavior change\n│   ├── task-workflow/         Full task cycle from a Trello/GitLab URL (worktree → dev → QA → review → MR)\n│   ├── translate-doc/         Documentation translation\n│   ├── user-stories/          User story writing\n│   ├── verification-planning/ Verification plan before non-trivial code changes\n│   └── worktrees/             Git worktrees as isolated lanes (OMO protocol)\n│\n├── scripts/                   Automation\n│   ├── setup.sh                Full installation (first time, interactive)\n│   ├── install.sh              Install/update the global config (freshness guard before deploy)\n│   ├── check-freshness.sh      Remote freshness verdict (PASS/BLOCK/UNVERIFIED, fetch-only)\n│   ├── test-freshness.sh       Freshness guard suite (35 assertions, local git fixtures)\n│   ├── configure-models.sh     Live-probe providers → agent role mapping (aurora-models.json)\n│   ├── init-project.sh         Initialize a new project (stack auto-detection)\n│   ├── sync-project.sh         Sync the templates\n│   ├── health-check.sh         Check config consistency (JSON, agents, models, suites)\n│   ├── permissions-matrix.sh   Generate an agent permissions table\n│   ├── validate-memory.sh     Validate a project's docs/ai/ structure\n│   ├── setup-mcp-lock.py       Local MCP npm lockfile (supply-chain hardening)\n│   ├── memory-access-check.sh  Orchestrator-only memory bridge invariant check\n│   ├── ui.sh                   Shared terminal UI helpers (animations, non-TTY aware)\n│   ├── check-infomaniak-write-gate.mjs  Verify the Infomaniak MCP stays read-only\n│   ├── test-product-authority.mjs       Product-authority behavioral invariant tests\n│   ├── check-bash-ruleset-order.py      Bash ruleset ordering lint\n│   ├── create-mr/              MR creation scripts (build_body, check_workspace, detect_target_branch, detect_template, push_branch, tests, upload_media, validate_title)\n│   ├── lib/                    Shared shell helpers\n│   └── hooks/\n│       └── pre-commit-secrets.sh  Git hook against secret leaks\n│\n└── docs/                      User guides\n    ├── ai/                   Repo project memory (PLAN, STATUS, DECISIONS, CHANGELOG, BUFFER, INDEX, WARNINGS)\n    ├── workflow.md            How the work cycle works\n    ├── customization.md        How to customize and extend\n    ├── angular-20.md          Detailed Angular 20+ rules\n    ├── code-review.md         Code review guide\n    ├── testing.md             Testing guide\n    └── architecture.md        Architecture guide\n```\n\n</details>\n\n---\n\n## Priority order\n\nThe agent receives and applies in this order (from most general to most specific; the most specific wins):\n\n1. Global **Standards** `~/.config/opencode/standards/` (workflow, memory-session-flow, memory-auto-update, memory-checklist, verification, communication, escalation, commits, review-before-done, audit, exploration-limits, error-correction, anti-patterns, artifact-authoring, delegation-failure, agent-output, product-authority).\n2. Global **Agents** `~/.config/opencode/agents/` (aurora, aurora-heavy, reviewer, tester, security, cybersec, architect, spark, vision, atlas, crawler, sage, scribe, pulse, echo, beacon, designer, mobile, product-owner) + oh-my-opencode-slim plugin agents (explorer, fixer, librarian, oracle).\n3. Global **Frameworks** `~/.config/opencode/frameworks/` (angular-20, nodejs, nestjs, astro).\n4. Company standards (if configured).\n5. Project-local **`AGENTS.md`**.\n6. Explicit instructions of the current task.\n\n---\n\n## Language policy\n\nPublic-facing documentation (this README, `docs/`, folder READMEs) is in English. The **execution layer** — `agents/`, `standards/`, `frameworks/` and skill `SKILL.md` files — is written in **French**, the maintainer's working language. This is by design:\n\n- The agent runtime consumes these files language-agnostically — LLMs read French and English with identical fidelity, so behavior is unaffected.\n- Trigger keywords in `agents/aurora.md` are matched against the maintainer's French requests — translating them would silently break delegation routing.\n- Forking and using this setup does not require reading French; forking to *edit* the execution layer does, by design.\n\n---\n\n## License\n\nMIT\n"}