====== 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)]]