====== Claude Code vs OpenCode: konfigurace ====== Claude Code a OpenCode jsou AI coding assistanti pro příkazovou řádku, kteří umožňují řídit chování modelu pomocí konfiguračních souborů, hooks a rozšiřujících workflows. Tento článek popisuje konfigurační mechanismy Claude Code a u každého uvádí, jak je analogické chování zajištěno v OpenCode. ===== Instrukční soubory ===== ==== Claude Code: CLAUDE.md ==== Claude Code načítá instrukce z ''CLAUDE.md'' souborů ve třech úrovních: ^ Umístění ^ Scope ^ | ''~/.claude/CLAUDE.md'' | Osobní nastavení platné pro všechny projekty; není verzováno v gitu | | ''./CLAUDE.md'' nebo ''./.claude/CLAUDE.md'' | Projektové instrukce sdílené přes git | | ''/etc/claude-code/policy.md'' | Organizační pravidla (managed prostředí) | Instrukce lze umísťovat i do podadresářů projektu. Claude načte nejbližší ''CLAUDE.md'' v adresářové hierarchii, kde právě pracuje — například ''src/auth/CLAUDE.md'' se uplatní přesně tehdy, kdy Claude pracuje v daném modulu. ==== OpenCode: AGENTS.md ==== OpenCode používá analogický systém s ''AGENTS.md'': ^ Umístění ^ Scope ^ | ''~/.config/opencode/AGENTS.md'' | Globální nastavení napříč projekty | | ''./AGENTS.md'' | Projektové instrukce (root) | | ''./subdir/AGENTS.md'' | Instrukce pro konkrétní podadresář | Lokální soubory mají přednost před globálními; root ''AGENTS.md'' se merguje s lokálními. Instrukce lze také explicitně odkazovat přes ''opencode.json'': { "instructions": ["./subproject/AGENTS.md"] } ===== Hooks a guardrails ===== ==== Claude Code: Hooks ==== Hooks jsou shell příkazy definované v ''settings.json'', které se spouštějí při specifických událostech: ^ Event ^ Kdy se spouští ^ | ''SessionStart'' | Při startu nebo obnovení session | | ''PreToolUse'' | Před spuštěním nástroje | | ''PostToolUse'' | Po úspěšném nástroji | | ''UserPromptSubmit'' | Při odeslání promptu | | ''Stop'' | Při dokončení odpovědi | Příklad v ''.claude/settings.json'' — automatické formátování po každé editaci: { "hooks": { "PostToolUse": [{ "matcher": "Edit|Write", "hooks": [{ "type": "command", "command": "npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\"" }] }] } } Blokování nebezpečné akce se provede exit kódem ''2'' nebo JSON odpovědí s ''deny''. ==== OpenCode: Plugin systém ==== OpenCode používá místo JSON konfigurace JS/TS pluginy umístěné v '''.opencode/plugins/''' (nebo globálně v ''~/.config/opencode/plugins/''). Pluginy jsou TypeScript/JavaScript moduly s ''before''/''after'' hooky na tool cally: // .opencode/plugins/env-protection.ts export const EnvProtection: Plugin = async ({ client }) => ({ tool: { execute: { before: async (input) => { if (input.tool === "read" && input.args.filePath.includes(".env")) { throw new Error("Cannot read .env files"); } } } } }); Srovnání přístupů: ^ Aspekt ^ Claude Code (hooks) ^ OpenCode (pluginy) ^ | Jazyk | JSON + shell skripty | JS/TS moduly | | Umístění | ''.claude/settings.json'' nebo ''~/.claude/settings.json'' | ''.opencode/plugins/'' nebo ''~/.config/opencode/plugins/'' | | Blokování | Exit kód ''2'' nebo JSON deny | ''throw Error'' v ''before'' hooku | | Vlastní nástroje | Přes MCP nebo skills | Ano, přes Zod schema | ===== Skills a znovupoužitelné workflows ===== ==== Claude Code: Skills ==== Skills jsou markdown soubory v '''.claude/skills/'''. Každý skill obsahuje instrukce pro konkrétní typ práce — code review, refaktoring, debugging, release postup. Claude je načítá podle kontextu nebo na vyžádání. Výsledek: konzistentní chování napříč sezeními i v rámci týmu bez nutnosti opakovat instrukce v každém promptu. ==== OpenCode: Agenti a pluginy ==== OpenCode nemá přímý ekvivalent systému skills. Analogické chování se dosahuje kombinací instrukcí v ''AGENTS.md'' a JS/TS pluginů, které mohou definovat vlastní nástroje přes Zod schema. Globální workflows se umísťují do ''~/.config/opencode/AGENTS.md''. ===== Zdroje ===== * [[https://x.com/BharukaShraddha/status/2029836408232497678|Shraddha Bharuka – The Anatomy of a Claude Code Project (X/Twitter)]]