Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .claude/rules/agents-authoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ extends:
| `agent-teams.md` | Orchestrateurs supportant Agent Teams |
| `memory-protocol.md` | Agents avec mémoire persistante |
| `simplify-principles.md` | Agents avec mode simplification |
| `obsidian-doc-protocol.md` | Agents qui touchent `docs/spec*`, `docs/todo.md`, `docs/_memory/**` (Shuri 01, Task Runner 04, Bruce 25, 2b3 08, Lovecraft 47, Godspeed 00, …) — format Obsidian + CLIs `notesmd-cli` / `defuddle` / `pandoc` |
| `obsidian-doc-protocol.md` | Agents qui touchent `docs/spec*`, `docs/todo.md`, `docs/_memory/**` (Shuri 01, Task Runner 04, Bruce 25, 2b3 08, Lovecraft 47, Godspeed 00, …) — format Obsidian + CLIs `notesmd-cli` / `curl.md` / `defuddle` / `pandoc` |
| `curl-md-protocol.md` | Agents qui consultent / extraient une URL (Strange 16, Shuri 01, Mathieu 61, Tony 50, Stark 58, Agathe 60, Jean-Claude 63, SEO-auditor 32, …) — `curl.md` est le premier réflexe ; remplace `WebFetch` et `defuddle parse <url>` |
| `faru-protocol.md` | Agents qui gèrent specs/tasks en mode faru (Shuri 01, Task Runner 04, 2b3 08) — détection `DOC_MODE`, branches `docs/backlog/` vs `docs/todo.md` |

## Phase (champ obligatoire)
Expand Down Expand Up @@ -154,8 +155,9 @@ Ne jamais hardcoder de version de modèle — utiliser uniquement les alias `opu
- `update-protocol.md` — mises à jour incrémentales (jamais de réécriture complète)
- `context-protocol.md` — passage de contexte inter-agents (économise 3-10K tokens)
- `agent-teams.md` — coordination parallèle
- `cli-tools-protocol.md` — priorité CLI > MCP (mentionne notesmd-cli, defuddle, pandoc)
- `obsidian-doc-protocol.md` — **format canonique** spec/todo/mémoire (Obsidian) + CLIs requises (notesmd-cli, defuddle, pandoc)
- `cli-tools-protocol.md` — priorité CLI > MCP (mentionne notesmd-cli, curl.md, defuddle, pandoc)
- `curl-md-protocol.md` — **URL → Markdown** : `curl.md` premier réflexe (depuis 2026-05-07), remplace `WebFetch` et `defuddle parse <url>`
- `obsidian-doc-protocol.md` — **format canonique** spec/todo/mémoire (Obsidian) + CLIs (notesmd-cli, curl.md, defuddle, pandoc)

## Format todo.md (Obsidian Kanban plugin)

Expand Down Expand Up @@ -191,6 +193,6 @@ Efforts : XS (<30min), S (1-2h), M (2-4h), L (4-8h), XL (1-2j), XXL (3-5j).
- Lecture/écriture du board → `notesmd-cli` (Yakitrak — pas besoin d'Obsidian app)
- `notesmd-cli print name="docs/todo"` · `notesmd-cli search-content query="P0"`
- Manipulation atomique : `notesmd-cli frontmatter set …` · `notesmd-cli move from=… to=…`
- Recherche web → spec/note → `defuddle parse <url> --markdown | notesmd-cli create name=… content=-`
- Recherche web → spec/note → `curl.md <url> | notesmd-cli create name=… content=-` (fallback : `defuddle parse <url> --markdown` si curl.md HS)
- Conversion `.docx`/`.pdf`/`.rst` → Markdown → `pandoc` (jamais de parser ad-hoc)
- Spec agrégée → `docs/spec.base` (Obsidian Base, skill `kepano-obsidian-bases`)
10 changes: 8 additions & 2 deletions .claude/rules/install-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ paths:
./install.sh --with-devops-clis # + bundle devops (terraform · ansible · pulumi · act)
./install.sh --with-mobile-clis # + bundle mobile (xcrun · bundler · fastlane · expo · eas-cli)
./install.sh --with-obscura # + Obscura headless browser Rust (required, depuis 2026-05-07) — scraping JS-rendered, JS eval, multi-URL parallèle, serveur CDP · coexiste avec shot-scraper
./install.sh --with-curl-md # + curl.md CLI (required, depuis 2026-05-07, activé par défaut) — URL → Markdown pour agents (wevm, MIT) · remplace WebFetch + defuddle parse <url> · service public gratuit, pas d'API key
./install.sh --dry-run # Simuler sans modifier
./install.sh --wizard # Forcer le wizard interactif même sur reinstall
```
Expand All @@ -57,9 +58,14 @@ Install : `brew tap yakitrak/yakitrak && brew install yakitrak/yakitrak/notesmd-
Vérifier : `notesmd-cli --version`. Setup vault : `notesmd-cli add-vault path="$(pwd)"`.
Usage : `notesmd-cli daily|create|print|search|search-content|frontmatter|move|list|list-vaults|set-default-vault …`. Voir protocole `framework/agents/_shared/obsidian-doc-protocol.md`.

Defuddle (kepano) — Extracteur HTML → Markdown propre. Adopté en base ulk depuis 2026-04-29 (priority `required` dans `framework/tools/cli-registry.json`). Source : https://github.com/kepano/defuddle (MIT). Note : le package `defuddle-cli` historique est fusionné dans `defuddle`.
Defuddle (kepano) — Extracteur HTML → Markdown propre. **Fallback** depuis 2026-05-07 (priority `recommended`, anciennement `required` 2026-04-29). Source : https://github.com/kepano/defuddle (MIT). Note : le package `defuddle-cli` historique est fusionné dans `defuddle`.
Install : `npm install -g defuddle` (ou `npx defuddle …` pour usage ponctuel). Vérifier : `defuddle --version`.
Usage : `defuddle parse <url|file.html> [--markdown|--json] [--property X]`. Skill associée : `~/.claude/skills/kepano-defuddle/`.
Usage : `defuddle parse <url|file.html> [--markdown|--json] [--property X]`. **Rôle révisé** depuis 2026-05-07 : **fallback** lorsque `curl.md` est down ou pour les **fichiers HTML locaux** uniquement. Le premier réflexe URL→Markdown est désormais `curl.md`. Skill associée : `~/.claude/skills/kepano-defuddle/`.

curl.md (wevm) — URL → Markdown optimisé pour agents. **Adopté en base ulk depuis 2026-05-07** (priority `required` dans `framework/tools/cli-registry.json`, activé par défaut). Source : https://github.com/wevm/curl.md (MIT). Service public gratuit (rate limit généreux, pas d'API key obligatoire — login optionnel pour des quotas plus élevés).
Install : `curl -fsSL https://curl.md/install.sh | bash` (ou `npm install -g curl.md` · `bun add -g curl.md`). Vérifier : `curl.md --version`. **Sans install** : `curl https://curl.md/<URL>` (1-shot, idéal en CI / hooks).
Usage : `curl.md <url>` (CLI, stdout Markdown) · `curl https://curl.md/<url>` (sans CLI) · préfixage navigateur `https://curl.md/<URL>`.
**Premier réflexe** dès qu'un agent consulte/cite/extrait/indexe une URL — **remplace `WebFetch` et `defuddle parse <url>` partout**. Coexiste avec `shot-scraper` (visuel) et `obscura` (scraping JS-rendered/CDP). Fallback ordonné : `curl.md` → `defuddle` (HTML local ou curl.md down) → `WebFetch` (dernier recours, qualité moindre). ⚠️ Ne **jamais** y passer une URL avec un secret en query string ni une page d'admin/intranet : utiliser `defuddle` local. Plugin Claude officiel : https://curl.md/docs/plugins/claude (non bundlé — la CLI suffit). Protocole : `framework/agents/_shared/curl-md-protocol.md`.

Pandoc — Convertisseur universel de documents. Promu en base ulk depuis 2026-04-29 (priority `required` dans `framework/tools/cli-registry.json`). Source : https://pandoc.org (GPL-2.0+).
Install : `brew install pandoc` · `apt install pandoc` · `winget install pandoc`. Vérifier : `pandoc --version`.
Expand Down
5 changes: 3 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,12 @@ Options et community skills : @.claude/rules/install-reference.md

**Priority rule**: CLI available → use it (0 tokens). No CLI + MCP configured → use MCP. Neither → inform user.

Key CLIs: `gh` (GitHub), `vercel` (deploy), `neonctl` (DB), `gws` (Google), `resend` (email), `rtk` (token compression), `notesmd-cli` (vault Obsidian), `defuddle` (web → Markdown), `pandoc` (conversions de format), `shot-scraper` (captures web visuelles), `obscura` (headless browser Rust — scraping/JS eval/CDP).
Key CLIs: `gh` (GitHub), `vercel` (deploy), `neonctl` (DB), `gws` (Google), `resend` (email), `rtk` (token compression), `notesmd-cli` (vault Obsidian), `curl.md` (URL → Markdown, premier réflexe consultation web), `defuddle` (HTML local / fallback URL), `pandoc` (conversions de format), `shot-scraper` (captures web visuelles), `obscura` (headless browser Rust — scraping/JS eval/CDP).
curl.md : **obligatoire** depuis 2026-05-07 (priority `required`). Source : https://github.com/wevm/curl.md (MIT, wevm). Service public gratuit (rate limit généreux, pas d'API key obligatoire). Install : `curl -fsSL https://curl.md/install.sh | bash` (ou `npm install -g curl.md` · `bun add -g curl.md`). Usage : `curl.md <url>` (CLI) · `curl https://curl.md/<url>` (1-shot sans install) · préfixe `https://curl.md/<URL>` dans le navigateur. **Premier réflexe** dès qu'un agent consulte/cite/extrait/indexe une URL — **remplace `WebFetch` et `defuddle parse <url>` partout**. Coexiste avec shot-scraper (visuel : screenshots/PDF/a11y/auth) et Obscura (scraping JS-rendered, JS eval, multi-URL parallèle, CDP). Règle simple : *curl.md pour le texte, shot-scraper pour le visuel, Obscura pour la donnée*. Fallback ordonné : curl.md → defuddle (HTML local ou curl.md down) → WebFetch (dernier recours, qualité moindre). ⚠️ Ne **jamais** passer à curl.md une URL contenant un secret en query string ou une page d'admin/intranet — utiliser `defuddle` local. Plugin Claude officiel disponible (https://curl.md/docs/plugins/claude) mais **non bundlé** (CLI suffit). Protocole : `framework/agents/_shared/curl-md-protocol.md`. Activation ulk : `./install.sh --with-curl-md` (activé par défaut).
Shot-Scraper : **obligatoire** depuis 2026-05-06 (priority `required`). Source : https://github.com/simonw/shot-scraper (Simon Willison, MIT). Install : `pip install shot-scraper && shot-scraper install`. Usage : `shot-scraper <url> -o file.png [--width W --height H --full-page]` · `shot-scraper accessibility <url>` · `shot-scraper pdf <url> file.pdf` · `shot-scraper multi shots.yml` · `shot-scraper auth <url> auth.json`. **Remplace `mcp__chrome-devtools__*` pour tous les agents**. Depuis 2026-05-07, **les use cases JS eval / scraping multi-URL sont délégués à Obscura** (voir ci-dessous) — shot-scraper conserve screenshots, PDF, arbre d'accessibilité, auth interactive. Protocole : `framework/agents/_shared/shot-scraper-protocol.md`. Agents concernés : visual-auditor (03), frontend-qa (02), seo-auditor (32), agamotto (17).
Obscura : **obligatoire** depuis 2026-05-07 (priority `required`). Source : https://github.com/h4ckf0r0day/obscura (Apache-2.0). Install : binaires releases (`curl -fsSL .../obscura-{aarch64-macos,x86_64-linux,x86_64-macos}.tar.gz`) ou `cargo install --git https://github.com/h4ckf0r0day/obscura` (Rust 1.75+). Activation ulk : `./install.sh --with-obscura`. Usage : `obscura fetch <url> --eval "<js>" [--selector S --wait-until networkidle --stealth]` · `obscura scrape urls.txt --concurrency N --eval "<js>" --format json` · `obscura serve --port 9222 --stealth`. Headless browser engine en Rust (V8 + CDP, compatible Puppeteer/Playwright) : 30 MB RAM (vs 200+ MB Chrome), 85 ms page load (vs ~500 ms). **Coexiste avec shot-scraper** : règle simple — *shot-scraper pour ce qui est visuel, Obscura pour ce qui est donnée*. Obscura prend les use cases scraping JS-rendered, JS eval (`--eval`), multi-URL parallèle (`obscura scrape`, workers natifs Rust ~5-10× plus rapides que `shot-scraper multi`) et CDP (clients Puppeteer/Playwright). Protocole : `framework/agents/_shared/obscura-protocol.md`. Agents concernés : visual-auditor (03), frontend-qa (02), seo-auditor (32), agamotto (17).
NotesMD CLI : **obligatoire** depuis 2026-04-29 (priority `required`). Source : https://github.com/Yakitrak/notesmd-cli (Go, MIT). Install : `brew tap yakitrak/yakitrak && brew install yakitrak/yakitrak/notesmd-cli`. Tous les agents qui touchent `docs/spec*` et `docs/todo.md` doivent privilégier `notesmd-cli daily|create|print|search|frontmatter|move` quand la CLI est dispo, et fallback fichier sinon. Avantage majeur sur la CLI officielle Obsidian : **n'exige pas que l'app desktop soit ouverte** (utilisable CI/headless). Voir `framework/agents/_shared/obsidian-doc-protocol.md`.
Defuddle CLI : **obligatoire** depuis 2026-04-29 (priority `required`). Source : https://github.com/kepano/defuddle (MIT, kepano). Install : `npm install -g defuddle`. Usage : `defuddle parse <url|file.html> [--markdown|--json]`pour toute extraction Markdown depuis le web (preferred over `WebFetch` quand la sortie doit être réutilisée). Skill associée : `kepano-defuddle`.
Defuddle CLI : **fallback** depuis 2026-05-07 (priority `recommended`, anciennement `required` 2026-04-29). Source : https://github.com/kepano/defuddle (MIT, kepano). Install : `npm install -g defuddle`. Usage : `defuddle parse <url|file.html> [--markdown|--json]`. **Rôle révisé** : utiliser **curl.md en premier** pour les URLs ; defuddle est conservé pour les **fichiers HTML locaux** (`page.html`) et comme **fallback** quand curl.md est down ou que l'URL ne peut pas transiter par un service tiers (intranet, secrets en query string). Skill associée : `kepano-defuddle`.
Pandoc : **obligatoire** depuis 2026-04-29 (priority `required`). Source : https://pandoc.org (GPL-2.0+). Install : `brew install pandoc` · `apt install pandoc` · `winget install pandoc`. À invoquer dès qu'un agent lit/produit un format non-Markdown : `.docx`, `.pdf`, `.rst`, `.org`, `.epub`, `.tex`, `.odt`, HTML riche. Jamais de parser ad-hoc. Exemples : `pandoc -f docx -t markdown brief.docx -o docs/brief.md` · `pandoc -f markdown -t pdf docs/spec.md -o docs/exports/spec.pdf`. Voir `framework/agents/_shared/obsidian-doc-protocol.md` (section *CLI Pandoc*).
Token compression: `rtk` (rtk-ai/rtk, MIT) — adopté en base ulk depuis 2026-04-27. Pour les commandes verbose (`git status/log/diff`, `gh pr list/view`, `npm test`, `pytest`, `cargo test`, `terraform plan`, logs CI…), préférer `rtk proxy <cmd>` — gain -60 à -90% tokens. Hook PreToolUse `rtk-compress.sh` actif en base avec whitelist : suggère `rtk proxy` quand approprié. Install : `brew install rtk` · `curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh`. Stats : `rtk gain`.
LLM-local: `apfel` **(optionnel, macOS 26+ Apple Silicon)** + `ollama qwen3.6:35b-a3b-mlx-bf16` **(optionnel, multiplateforme, Apple Silicon MLX)** — délèguent les micro-tâches (classification, TODO/secrets, commit message, extraction tags) à un LLM local gratuit. apfel = fichiers courts (<4K tokens), ollama = diffs longs (128K ctx). Install : `brew install Arthur-Ficial/tap/apfel` · `brew install ollama && ollama pull qwen3.6:35b-a3b-mlx-bf16`. Protocole unifié : `framework/agents/_shared/local-llm-protocol.md` · helpers : `framework/tools/llm-local.sh` (`llm_detect`, `llm_commit_message`, `llm_classify_ci_error`, `llm_extract_spec_meta`, …). Utilisé par godspeed (00), 2b3 (08), task-runner (04), ci-guard (54), shuri (01) ; fallback Claude si aucun. Gain mesuré : ~355-795 output tokens/session + latence (apfel ~1s vs Claude 2-5s par micro-tâche). Sprint : `docs/09-research/llm-local-sprint.md`.
Expand Down
6 changes: 4 additions & 2 deletions framework/agents/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ Full spec: `.claude/rules/agents-authoring.md`
| `plugins-protocol.md` | Official plugins delegation |
| `discovery-protocol.md` | Extended frontmatter spec |
| `phase-grid.md` | 6-phase grid + agent mapping |
| `cli-tools-protocol.md` | CLI > MCP priority — mentions `notesmd-cli`, `defuddle`, `pandoc` (required) |
| `cli-tools-protocol.md` | CLI > MCP priority — mentions `notesmd-cli`, `curl.md`, `defuddle`, `pandoc` (required/recommended) |
| `curl-md-protocol.md` | **URL → Markdown** : `curl.md` premier réflexe pour consultation/extraction web (depuis 2026-05-07). Remplace `WebFetch` et `defuddle parse <url>` |
| `obsidian-doc-protocol.md` | **Canonical format** for `docs/spec*`, `docs/todo.md`, `docs/_memory/` (Obsidian) + required CLIs |
| `faru-protocol.md` | Faru mode (git-native kanban): DOC_MODE detection, `docs/backlog/` card format, coexistence rule — Shuri 01, Task Runner 04, 2b3 08 |
| `design-source-protocol.md` | **Design source of truth** : `docs/design.md` (racine) + `docs/design-wireframe/<slug>/CARD.md` (cartes faru-style). Garante : Agathe (60). Hérité par Agathe, Stark, Agamotto, Brique, Visual-Auditor. |
Expand Down Expand Up @@ -75,7 +76,8 @@ Policy (ULK-072): an agent must not stay in `specials/` for more than 2 versions
- **notion CLI** (prioritaire): `brew install notion-cli` + `notion auth` — brigitte, bifrost — voir `_shared/notion-protocol.md`
- **mcp__notion__***: Notion API (fallback si CLI absent ou non-auth)
- **notesmd-cli** (required, gestion vault Obsidian sans app desktop): `brew tap yakitrak/yakitrak && brew install yakitrak/yakitrak/notesmd-cli` — privilégier pour `docs/spec*`, `docs/todo.md`, `docs/_memory/**` — voir `_shared/obsidian-doc-protocol.md`
- **defuddle** (required, web → Markdown propre): `npm install -g defuddle` — privilégier sur `WebFetch` quand la sortie est réutilisée
- **curl.md** (required, URL → Markdown pour agents — premier réflexe consultation web depuis 2026-05-07): `curl -fsSL https://curl.md/install.sh | bash` (ou `npm install -g curl.md`) — **remplace `WebFetch` et `defuddle parse <url>`**. Usage : `curl.md <url>` ou `curl https://curl.md/<url>`. Voir `_shared/curl-md-protocol.md`.
- **defuddle** (recommended, fallback URL→Markdown si curl.md down + fichiers HTML locaux): `npm install -g defuddle`
- **pandoc** (required, conversions multi-format): `brew install pandoc` — à invoquer dès qu'un format non-Markdown est en jeu (`.docx`, `.pdf`, `.rst`, `.org`, `.epub`, `.tex`, `.odt`)

## Model Distribution
Expand Down
18 changes: 18 additions & 0 deletions framework/agents/_shared/base-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,24 @@ Tous les agents et skills doivent appliquer ces 4 règles :

---

## Consultation web — premier réflexe `curl.md`

> Détails complets : `_shared/curl-md-protocol.md` (depuis 2026-05-07).

Pour **toute** consultation, citation, extraction ou indexation du contenu textuel d'une URL, l'agent passe par **`curl.md`** (wevm/curl.md, MIT, gratuit) :

```bash
curl.md https://example.com/article # CLI installée
curl https://curl.md/https://example.com/article # 1-shot sans install (CI/hooks)
```

**Remplace** : `WebFetch` et `defuddle parse <url>`.
**Coexiste avec** : `shot-scraper` (visuel), `obscura` (JS-rendered, scraping multi-URL, CDP).
**Fallback ordonné** : `curl.md` → `defuddle` (HTML local ou curl.md down) → `WebFetch` (qualité moindre).
**⚠️ Sécurité** : ne **jamais** passer à curl.md une URL avec un secret en query string ou une page d'admin/intranet (le service est distant) — utiliser `defuddle` local.

---

## Conventions de nommage des fichiers

| Type | Pattern | Emplacement |
Expand Down
Loading
Loading