OpenCode — Cheatsheet 📋

"الورقة اللي تطبعها وتعلقها جنب الـmonitor بتاعك"

SectionInstallation & Setup

Install

الطريقةالأمر
Install scriptcurl -fsSL https://raw.githubusercontent.com/opencode-ai/opencode/main/install | bash
Homebrew (macOS/Linux)brew install opencode-ai/tap/opencode
AUR (Arch)yay -S opencode-bin
Nixnix run nixpkgs#opencode
Gogo install github.com/opencode-ai/opencode@latest
Debian/Ubuntudpkg -i opencode_*.deb
Fedora/RHELrpm -i opencode_*.rpm
Windowsscoop install opencode أو winget install OpenCode.OpenCode

First Run

الأمربيعمل إيهإمتى تستخدمهليه مهم
opencodeبيفتح الـTUI interactiveأول مرة تفتح المشروعده الـmain interface
opencode -p "fix the bug"بينفذ prompt واحد ويخرجCI/CD أو scriptingمش بياخذ input منك
opencode -p "explain" -f jsonJSON output للـpipingautomation و pipelinesالـJSON structured
opencode -p "explain" -qساكن بدون spinnerCI/CD environmentsclean output
opencode --yoloكل tool calls تنفذ من غير permissionلما تثق في الـagent⚠️ خطر لو مش عارف بتاعك
أوامر الـCLI الأساسية
➜ ~ opencode
يفتح الـinteractive TUI
➜ ~ opencode -p "fix the null pointer"
⠋ Running agent...
✓ Fixed auth/auth.go line 42
➜ ~ opencode -p "explain" -f json | jq .summary
"This function handles OAuth token refresh."
➜ ~⏎ نفّذ · ⌫ امسح

SectionCLI Commands

الأمربيعمل إيه بالظبطإمتى تستخدمهليه مهم
opencodeبيفتح الـinteractive TUI — الـmain interfaceالشغل اليوميده اللي بتستخدمه 90% من الوقت
opencode -p "prompt"بينفذ prompt واحد في non-interactive mode ويخرجCI/CD، scripts، automationمش بيفتح TUI — بيطلع نتيجة ويخرج
opencode -f jsonبيطلع الـoutput كـJSON structuredلما بتعمل pipeline أو parseكل حاجة structured ومحددة
opencode -qQuiet mode — بدون spinner أو decorationsCI/CD environmentsclean output للـlogs
opencode -c /pathبيحدد working directoryلما بتشغل من مكان تانيعشان الـagent يشتغل على المشروع الصح
opencode serveبيبدأ shared workspace servermulti-client collaborationتلتين TUI يقدروا يشتغلوا مع بعض
opencode loginبيعمل login للـsubscription providersGemini Code Assist, Copilotprovider محتاج auth
opencode modelsبيعرض الـmodels المتاحةلما تختار modelيعرفك إيه المتاح
opencode statsبيعرض إحصائيات الاستخداممراقبة التكلفةيعرفك كلفة كام
opencode sessionsبيعرض الـsessions المحفوظةإدارة الـsessionsتعرف إيه اللي شغال
opencode update-providersبيحدّث الـmodel database من Catwalkلما في model جديديعرفك أحدث models
opencode logsبيفتح الـinternal logsdebuggingيعرفك إيه حصل جوه

SectionAgent System — الأنواع والأدوار

Agent Taxonomy & Division of Labor

Agent Swarm Architecture

Primary Agents

الـAgentالدورTemperaturePermissionsإمتى تستخدمه
Buildالـdefault driver — بيعمل كل حاجة0.3–0.5Full file ops + system commandsالشغل اليومي — كتابة كود، تعديل، تنفيذ
Planالـanalyst — بيقرأ ويفهم بس0.0–0.2Ask-first لـ file edits + bashلما عايز analysis أو architecture review
Titleبيولّد session titlesRead-onlyاتوماتيكي — مش بنستخدمه يدوي

الـTab Key — تبدل بين Build و Plan في أي وقت.

Subagents

الـSubagentالـAccessالدورإمتى تناديها
GeneralFull tools (except todo)Multi-step task executionلما الـtask محتاجة خطوات كتير
ExploreRead-only (glob, grep, ls, view)Local codebase searchلما بتدور على حاجة في الكود
ScoutExternal researcherExternal docs + dependency researchلما بتدور على docs أو upstream code

SectionConfiguration — .opencode.json

الـConfig الكامل

json
{
  "agents": {
    "coder": { "model": "claude-sonnet-4", "maxTokens": 5000 },
    "task": { "model": "claude-sonnet-4", "maxTokens": 5000 },
    "title": { "model": "claude-sonnet-4", "maxTokens": 80 }
  },
  "providers": {
    "anthropic": { "apiKey": "$ANTHROPIC_API_KEY" },
    "openai": { "apiKey": "$OPENAI_API_KEY" },
    "openrouter": { "apiKey": "$OPENROUTER_API_KEY" }
  },
  "permissions": {
    "allowed_tools": ["view", "ls", "grep", "glob", "edit"]
  },
  "mcp": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/",
      "headers": { "Authorization": "Bearer $GH_PAT" }
    }
  },
  "lsp": {
    "go": { "command": "gopls" }
  },
  "hooks": {
    "PreToolUse": [
      { "matcher": "^(view|ls|grep|glob)$", "command": "echo '{\"decision\":\"allow\"}'" }
    ]
  },
  "options": {
    "context_paths": ["AGENTS.md", ".cursorrules"],
    "global_context_paths": ["~/.config/opencode/OPENCODE.md"],
    "tui": { "theme": "catppuccin", "compact_mode": false },
    "initialize_as": "AGENTS.md",
    "data_directory": ".opencode"
  }
}

Config Paths (بالترتيب)

الـPathالأولوية
./.opencode.json (local)أعلى — project-specific
$XDG_CONFIG_HOME/opencode/.opencode.jsonuser-level
$HOME/.opencode.jsonuser-level fallback

Provider Environment Variables

الـProviderالـVariableملاحظات
AnthropicANTHROPIC_API_KEYClaude models
OpenAIOPENAI_API_KEYGPT models
Google GeminiGEMINI_API_KEYGemini models
AWS BedrockAWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY + AWS_REGIONClaude via AWS
Azure OpenAIAZURE_OPENAI_ENDPOINT + AZURE_OPENAI_API_KEYGPT via Azure
OpenRouterOPENROUTER_API_KEYMulti-model access
GitHub CopilotGITHUB_TOKENFree tier available
GroqGROQ_API_KEYFast inference
OllamaLocal endpointSelf-hosted
LM StudioLocal endpointSelf-hosted
LiteLLMLocal endpointProxy for any model

Self-Hosted Models

json
{
  "providers": {
    "ollama": {
      "type": "openai-compat",
      "base_url": "http://localhost:11434/v1",
      "api_key": "ollama",
      "models": [
        { "id": "llama3.1:8b", "name": "Llama 3.1 8B" },
        { "id": "codellama:7b", "name": "CodeLlama 7B" }
      ]
    }
  }
}

SectionPermissions System — Allow/Ask/Deny

The Permission Triad

Permission Triad + Hooks Pipeline

الحالةمعناهامثال عملي
ALLOWينفذ من غير سؤالgit status * — آمن 100%
ASKيسألك الأول وتختارgrep * — ممكن يكون خطر
DENYممنوع نهائياًrm -rf / — خطير

Permission Rules (آخر rule بتتنفذ)

json
{
  "permissions": {
    "bash": {
      "rules": [
        { "pattern": "git status *", "decision": "allow" },
        { "pattern": "git diff *", "decision": "allow" },
        { "pattern": "grep *", "decision": "ask" },
        { "pattern": "*", "decision": "deny" }
      ]
    }
  }
}

YOLO Mode

bash
opencode--yolo# كل حاجة تنفذ من غير permission prompt
                # ⚠️ خطر — استخدمه بس لو واثق 100%

SectionHooks System — PreToolUse

Hook Config

json
{
  "hooks": {
    "PreToolUse": [
      {
        "name": "no-rm-rf",
        "matcher": "^bash$",
        "command": "./hooks/no-rm-rf.sh",
        "timeout": 10
      }
    ]
  }
}
الـFieldوصفهإمتى تستخدمه
nameاسم descriptive (optional)عشان تعرف الـhook
matcherregex ضد tool name (optional)^bash$ = bash بس، omit = كل الـtools
commandالـshell command (required)المسار بتاع الـscript
timeoutبالثواني (default 30)لو الـhook بيأخذ وقت
Hook في العمل
➜ ~ cat .opencode/pre-tool-use.sh
#!/bin/bash
block rm -rf
echo "$OPENCODE_TOOL_INPUT" | grep -q "rm -rf" && exit 1
exit 0
➜ ~ opencode -p "remove all temp files with rm -rf /"
✗ Hook blocked: dangerous rm command detected
➜ ~⏎ نفّذ · ⌫ امسح

Exit Codes

الـCodeالمعنىبيعمل إيه
0Success — stdout بتـparse كـJSON envelopeممكن يـallow أو يـdeny أو يـhalt
2Block tool — stderr بيكون الـdeny reasonالـtool call بتتمنع
49Halt turn — الـagent turn بيقف بالكاملالمستخدم ياخد control

JSON Envelope

json
{
  "version": 1,
  "decision": "allow",          // "allow" | "deny" | null
  "halt": false,                // لو true الـturn بيقف
  "reason": "LGTM",            // بيتعرض لما deny/halt
  "context": "Scrubbed secrets", // بيتضاف للـmodel context
  "updated_input": { "command": "…" } // shallow-merge مع tool_input
}

أمثلة عملية

1. امنع rm -rf على الـroot:

bash
#!/usr/bin/env bash
ifecho"$OPENCODE_TOOL_INPUT_COMMAND"|grep-qE'rm\s+-(rf|fr)\s+/';then
echo"Refusing to run rm -rf against root">&2
exit2
fi

2. Auto-approve read-only tools:

json
{ "matcher": "^(view|ls|grep|glob)$", "command": "echo '{\"decision\":\"allow\"}'" }

3. ا inject context لـGo files:

bash
#!/usr/bin/env bash
if[["$OPENCODE_TOOL_INPUT_FILE_PATH"==*.go]];then
echo'{"context": "Run gofumpt after editing."}'
else
echo'{}'
fi

4. اوقف drop database:

bash
#!/usr/bin/env bash
ifecho"$OPENCODE_TOOL_INPUT_COMMAND"|grep-qE'drop\s+database';then
echo"Database drop detected — halting turn">&2
exit49
fi

SectionSkills System — SKILL.md

yaml
name: my-skill
description: What this skill does  critical for LLM tool selection.
user-invocable: true
disable-model-invocation: true
# Skill Instructions
Detailed instructions for the skill...
الـFieldالقاعدةليه
name1–64 chars، lowercase فقطعشان الـmatching يكون precise
description1–1024 charsده اللي الـLLM بيستخدمه يقرر يستدعي الـskill ولا لأ
user-invocabletrue = يظهر في Ctrl+Pعشان المستخدم يقدر يناديه
disable-model-invocationtrue = المستخدم بس اللي يناديهعشان ميتنفذش لوحدو

Discovery Paths

النوعالـPath
Global~/.config/opencode/skills/
Global~/.agents/skills/
Global~/.claude/skills/
Project.agents/skills/
Project.opencode/skills/
Customoptions.skills_paths في config

SectionContext Files — اللي الـAgent بيقرأها

الـFileالنوعملاحظات
AGENTS.mdUniversal standardكل الـagents بيفهموه — الـstandard الجديد
OPENCODE.mdOpenCode-specificبيقرأه OpenCode بس
CLAUDE.mdClaude Code-specificبيقرأه Claude Code
GEMINI.mdGemini-specificبيقرأه Gemini
.cursorrulesCursor-specificبيقرأه Cursor
.github/copilot-instructions.mdCopilot-specificبيقرأه GitHub Copilot

القاعدة: AGENTS.md هو الـuniversal standard — اكتبه مرة واحدة وكل الـagents هيفهموه.

SectionBuilt-in Tools — المرجع الكامل

File & Code Tools

الـToolبيعمل إيهإمتى تستخدمهليه مهم
globبيدور على ملفات بـpatternلما بتدور على ملفات بنوع معينأسرع من find
grepبيدور على محتوى ملفاتلما بتدور على string في الكودبيعمل regex search
lsبيطلع directory treeلما عايز تشوف الـstructureبـdepth control
viewبيقأ ملف مع line numbersلما عايز تقرأ ملفمع offset و limit
writeبيعمل أو بيستبدل ملفلما بتكتب ملف جديدبي overwrite كامل
editfind-and-replace في ملفلما بتعدل جزء من ملفلازم exact match
multieditتعديلات كتير في ملف واحدلما بتعدل أكتر من مكانsequential edits
diagnosticsبيعرض LSP errors/warningsلما بتدور على bugs في الكودبيستخدم language server
referencesبيلاقي symbol referencesلما بتدور على إزاي function بيستخدمواgo-to-reference

Execution & Search Tools

الـToolبيعمل إيهإمتى تستخدمهليه مهم
bashبينفذ shell commandsلما بتشغل tests أو commandsمع timeout و background
fetchبيجيب URL content (raw)لما بتدور على docs onlineمع format: text/markdown/html
downloadبيـdownload URL لملفلما بتـdownload binary filesbinary-safe streaming
web_searchبيعمل web search (DuckDuckGo)لما بتدور على حاجة على الإنترنتمع max_results
web_fetchبيجيب URL كـmarkdown (sub-agent)للـsub-agentsمش للاستخدام المباشر
sourcegraphبيبحث في repos عن كودلما بتدور على implementation عبر reposمع count و context_window
agentبيعمل sub-agentلما الـmain agent محتاج search عميقlimited to glob/grep/ls/view
agentic_fetchweb research sub-agentلما بتدور على معلومات complexبيتبع links ويعمل iterations

Session & Info Tools

الـToolبيعمل إيه
opencode_infoبيعرض runtime state: model, provider, LSP, MCP, skills, hooks
opencode_logsبيقأ الـinternal logs
lsp_restartبيعمل restart لـLSP client
job_outputبيجيب output من background shell
job_killبيعمل kill لـbackground process
todosبيدير structured task list

SectionKeyboard Shortcuts — اللي لازم تحفظهم

الـShortcutبيعمل إيهإمتى تستخدمه
Ctrl+X (Leader)بداية كل shortcutsده الـleader key
Leader nNew sessionلما عايز تبدأ حاجة جديدة
Leader lList sessionsلما عايز ترجع لـsession قديمة
Ctrl+PCommand paletteلما عايز تنادي skill أو تعمل حاجة سريعة
TabCycle Primary Agentsتبدل بين Build و Plan
Leader ↓/↑Navigate sessionsتتنقل بين parent/child sessions
Ctrl+GScroll to topتنزل لفوق في الـchat
Ctrl+Alt+GScroll to bottomتنزل لتحت في الـchat
aAllow لـtool call واحدفي الـpermission dialog
AAllow لـكل الـsessionفي الـpermission dialog
dDenyفي الـpermission dialog

SectionMCP (Model Context Protocol)

الـTypeبيعمل إيهمثال
stdioبيشتغل كـlocal processfilesystem, databases
httpبيتصل بـHTTP endpointGitHub, external APIs
sseServer-Sent Eventsstreaming connections
json
{
  "mcp": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/",
      "headers": { "Authorization": "Bearer $GH_PAT" },
      "disabled_tools": ["create_issue"]
    },
    "filesystem": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"],
      "timeout": 30
    }
  }
}

SectionCrash Recovery — القواعد الأساسية

  1. لما السيرفر يقع → الـagents بتتحول لـ"ready" بس مش بتـrestart
  2. لازم انت تعمل manual restart — عشان مياكلش API credits ليلًا
  3. الـcompaction agent بيعمل auto-summarize على 95% من الـcontext window
  4. الـtitle agent بيعمل أسماء تلقائية لكل session
  5. الـsummary agent بيعمل overviews مستمرة في الـbackground

SectionTUI Themes

الـThemeالشكل
opencodeالـdefault — dark
catppuccinWarm pastel
draculaPurple-dark
flexokiInk-inspired
gruvboxRetro warm
monokaiClassic code editor
onedarkAtom-inspired
tokyonightBlue-dark
tronNeon cyan on black

SectionQuick Decision Guide

السيناريوابدأ من هنا
أول مرة بتستخدم OpenCodeopencode → TUI يفتح
عايز automate حاجةopencode -p "..." -f json
عايز أمنع أوامر خطيرةأضف hook في .opencode.json
عايز auto-approve read-onlypermissions.allowed_tools أو hook
عايز أدي الـagent قدرات جديدةاكتب SKILL.md في .agents/skills/
عايز الـagent يفهم مشروعكاكتب AGENTS.md في root
عايز تربط MCP toolأضف في mcp في .opencode.json
عايز تضيف LSPأضف في lsp في .opencode.json
عايز تشتغل على مشروع تانيopencode -c /path/to/project
عايز multi-clientopencode serve
عايز تختبر hookopencode_logs أو check exit code