| Harness | Global Context File | Project Context File | System Prompt Override | Skills Directories | Source |
|---|---|---|---|---|---|
| claude | ~/.claude/CLAUDE.md |
CLAUDE.md in project root |
— | custom slash commands | docs |
| codex | ~/.codex/AGENTS.md |
AGENTS.md in project root |
— | — | docs |
| gemini | ~/.gemini/GEMINI.md |
GEMINI.md in workspace |
GEMINI_SYSTEM_MD env var |
~/.gemini/skills/, ~/.agents/skills/ |
context, skills, system |
| qwen | ~/.qwen/QWEN.md |
QWEN.md in workspace |
QWEN_SYSTEM_MD env var |
~/.qwen/skills/ |
docs |
| opencode | ~/.config/opencode/AGENTS.md |
AGENTS.md in project root |
prompt field in agent config |
~/.claude/skills/ (fallback) |
docs |
| kilo | ~/.config/kilo/AGENTS.md |
AGENTS.md in project root |
prompt field in agent config |
~/.kilocode/skills/ |
docs, skills |
| amp | ~/.config/amp/AGENTS.md, ~/.config/AGENTS.md |
AGENTS.md in cwd, parent dirs, subtrees |
— | ~/.config/agents/skills/, ~/.config/amp/skills/, .agents/skills/, .claude/skills/, ~/.claude/skills/ |
docs |
Master files (symlinked to all harnesses):
- Context file:
~/ai/AGENTS.md - Skills:
~/ai/skills/(29 skills)
Codex CLI (source):
- Global scope:
~/.codex/AGENTS.mdor~/.codex/AGENTS.override.md - Project scope: Walks from project root to cwd, reading
AGENTS.mdorAGENTS.override.md - Fallback filenames configurable via
project_doc_fallback_filenames
Gemini CLI (context, skills, system prompt):
- Context hierarchy: Global (
~/.gemini/GEMINI.md) → Workspace → JIT (auto-scans when accessing dirs) - Custom filename via
context.fileNamesetting:{"context": {"fileName": ["AGENTS.md", "GEMINI.md"]}} - Skills precedence: Workspace > User > Extension;
.agents/skills/takes precedence over.gemini/skills/ - System prompt override: See System Prompt Override section
Qwen Code (source):
- Forked from Gemini CLI, uses similar context system
- Default context file:
QWEN.md(configurable viacontext.fileName) - Skills from
.qwen/skills/(workspace) and~/.qwen/skills/(user) - System prompt override: See System Prompt Override section
OpenCode (source):
- Global:
~/.config/opencode/AGENTS.md - Project:
AGENTS.mdin project root - Fallback:
CLAUDE.md(unlessOPENCODE_DISABLE_CLAUDE_CODE=1) - Skills:
~/.claude/skills/(unlessOPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1)
Amp (source):
- Global:
$HOME/.config/amp/AGENTS.mdor$HOME/.config/AGENTS.md - Project:
AGENTS.mdin cwd, parent dirs (up to$HOME), subtrees - Fallback: If no
AGENTS.md, readsAGENT.mdorCLAUDE.md - Skills precedence (first wins):
~/.config/agents/skills/→~/.config/amp/skills/→.agents/skills/→.claude/skills/→~/.claude/skills/
Claude Code (source):
- Uses
CLAUDE.mdat project root and parent directories - Skills via custom slash commands
- Forked from OpenCode, uses similar configuration
- Global:
~/.config/kilo/AGENTS.md - Project:
AGENTS.mdin project root - Skills:
~/.kilocode/skills/(global),.kilocode/skills/(project) - System prompt override:
promptfield in agent config (same as OpenCode)
Each harness looks for configuration files in the project directory. Place these in your project root:
| Harness | Context File | Skills Directory | Config File |
|---|---|---|---|
| Claude | CLAUDE.md |
.claude/commands/ (slash commands) |
— |
| Codex | AGENTS.md |
— | — |
| Gemini | GEMINI.md |
.gemini/skills/ |
.gemini/settings.json |
| Qwen | QWEN.md |
.qwen/skills/ |
.qwen/settings.json |
| OpenCode | AGENTS.md |
— | opencode.json |
| Kilo | AGENTS.md |
.kilocode/skills/ |
.kilocode/launchConfig.json |
| Amp | AGENTS.md |
.agents/skills/ |
— |
Precedence (workspace > user > built-in):
| Harness | Context Hierarchy | Skills Hierarchy |
|---|---|---|
| Gemini | Project .gemini/GEMINI.md > ~/.gemini/GEMINI.md > JIT |
.agents/skills/ > .gemini/skills/ > ~/.gemini/skills/ |
| Qwen | Project .qwen/QWEN.md > ~/.qwen/QWEN.md |
.qwen/skills/ > ~/.qwen/skills/ |
| Codex | Walks project root → cwd reading AGENTS.md |
— |
| OpenCode | AGENTS.md in project root > ~/.config/opencode/AGENTS.md |
~/.claude/skills/ (fallback only) |
| Kilo | AGENTS.md in project root > ~/.config/kilo/AGENTS.md |
.kilocode/skills/ > ~/.kilocode/skills/ |
| Amp | cwd → parent dirs (to $HOME) → subtrees |
.agents/skills/ > .claude/skills/ > ~/.claude/skills/ |
Example project structure:
my-project/
├── AGENTS.md # Context for Codex, OpenCode, Kilo, Amp
├── GEMINI.md # Context for Gemini (or configure to read AGENTS.md)
├── QWEN.md # Context for Qwen
├── CLAUDE.md # Context for Claude
├── .gemini/
│ ├── settings.json # Gemini project config
│ └── skills/ # Gemini project skills
├── .qwen/
│ ├── settings.json # Qwen project config
│ └── skills/ # Qwen project skills
├── .kilocode/
│ ├── launchConfig.json # Kilo project config
│ └── skills/ # Kilo project skills
├── .agents/
│ └── skills/ # Amp project skills
└── opencode.json # OpenCode project config
Context files (AGENTS.md, GEMINI.md, CLAUDE.md, etc.) are user-supplied instructions that get appended to the harness's built-in system prompt. They add project-specific context, behavioral preferences, and task guidance.
System prompts are the harness's built-in instructions ("You are a helpful assistant..."). Some harnesses allow replacing this entirely via environment variables:
| Harness | Context File (appended) | System Prompt Override (replaces) |
|---|---|---|
| Gemini | GEMINI.md | GEMINI_SYSTEM_MD env var |
| Qwen | QWEN.md | QWEN_SYSTEM_MD env var |
| OpenCode | AGENTS.md | prompt field in agent config |
| Kilo | AGENTS.md | prompt field in agent config |
| Claude | CLAUDE.md | — |
| Codex | AGENTS.md | — |
| Amp | AGENTS.md | — |
When to override the system prompt:
- You want complete control over agent behavior
- The built-in prompt conflicts with your workflow
- You're building a specialized tool on top of the harness
Some harnesses allow replacing their built-in system prompt entirely. This is different from context files (AGENTS.md, GEMINI.md) which are appended to the prompt.
Gemini CLI (docs):
Set GEMINI_SYSTEM_MD environment variable:
# Use .gemini/system.md in project (fixed path)
GEMINI_SYSTEM_MD=true gemini
# Use custom file (variable holds the path)
GEMINI_SYSTEM_MD=/path/to/my-system.md gemini
# Disable override (use built-in)
GEMINI_SYSTEM_MD=false gemini| Value | Behavior |
|---|---|
true or 1 |
Uses .gemini/system.md in project |
/path/to/file.md |
Uses that file |
false or 0 |
Uses built-in system prompt |
Can also persist in .gemini/.env:
GEMINI_SYSTEM_MD=1
When active, Gemini shows |⌐■_■| indicator in the UI.
Qwen Code:
Forked from Gemini CLI - same mechanism with QWEN_SYSTEM_MD:
QWEN_SYSTEM_MD=/path/to/system.md qwenOpenCode (docs):
OpenCode uses custom agents to replace the system prompt. Define an agent in opencode.json:
{
"agent": {
"interactive": {
"prompt": "You are a helpful assistant...",
"model": "anthropic/claude-sonnet-4"
}
}
}The prompt field completely replaces the built-in system prompt for that agent.
Top-level agents - users invoke these directly in the coding harness.
| Agent | Role | Temperature |
|---|---|---|
| interactive | Default entry point, user-facing | 0.5 |
| autonomous | Execution engine (called by interactive) | 0.2 |
Interactive handles all horizons:
| Horizon | Criteria | Interactive's Action |
|---|---|---|
| Trivial | < 2 min, obvious | Just do it |
| Small | Fits in head, clear path | Brief plan → execute |
| Complex | Multiple unknowns, design needed | Design doc → hand off to autonomous |
Autonomous is not an entry point - it receives plans from interactive and executes without user interaction.
Workflow:
User → interactive
│
├─► trivial ──► just do it
│
├─► small ──► plan briefly → execute
│
└─► complex ──► design doc → hand off to autonomous
│
└─► planner → executor → done
Other:
| Agent | Description |
|---|---|
| executor | Executes implementation plans |
| minimal | Minimal agent template |
Internal agents - called by interactive/autonomous agents, not meant for direct user invocation.
Research (spawned in parallel):
| Agent | Purpose |
|---|---|
| codebase-locator | Find WHERE files are |
| codebase-analyzer | Understand HOW code works |
| pattern-finder | Find existing patterns |
| artifact-searcher | Search past work |
Execution (spawned sequentially):
| Agent | Purpose |
|---|---|
| planner | Creates implementation plan |
| executor | Orchestrates implementer + reviewer |
| implementer | Writes code |
| reviewer | Verifies correctness |
Utility:
| Agent | Description |
|---|---|
| project-initializer | Initializes new projects |
| code-compliance-reviewer | Reviews code against standards |
| code-smell-detector | Detects code smells |
Specialized agents with extra local tools - usable both interactively AND autonomously.
Workers are domain-specific agents that can be:
- Loaded interactively when user wants careful, hands-on work
- Used autonomously for scheduled tasks, regular upkeep, or audits
| Worker | Interactive Use | Autonomous Use |
|---|---|---|
| librarian | Careful work on Zotero library | Regular upkeep/audits |
| test_engineer | Design test strategy with user | Run test coverage audits |
| documentation_specialist | Plan docs structure | Generate missing docs |
Each worker has prompt.md + example_tasks/ showing autonomous work they can complete.
| Name | Command | Description | Link |
|---|---|---|---|
| serena | uvx --from git+https://github.com/oraios/serena serena start-mcp-server --project-from-cwd |
Code intelligence, symbol navigation | https://github.com/oraios/serena |
| morph | npx -y @morphllm/morphmcp |
Fast code edits via Morph LLM | https://github.com/morph-llm/morphmcp |
| kindly | uvx --from git+https://github.com/Shelpuk-AI-Technology-Consulting/kindly-web-search-mcp-server kindly-web-search-mcp-server start-mcp-server |
Web search | https://github.com/Shelpuk-AI-Technology-Consulting/kindly-web-search-mcp-server |
| context7 | npx -y @upstash/context7-mcp |
Documentation search (llms.txt) | https://github.com/upstash/context7 |
| cut-copy-paste-mcp | npx -y @fastmcp-me/cut-copy-paste-mcp |
Clipboard operations | https://github.com/fastmcp-me/cut-copy-paste-mcp |
Claude Code (docs):
# HTTP server
claude mcp add --transport http <name> <url>
# Stdio server
claude mcp add --transport stdio <name> -- <command> [args...]
# List servers
claude mcp listConfig files: ~/.claude.json (user), .mcp.json (project)
OpenCode (docs):
Edit opencode.json directly (no CLI command):
{
"mcp": {
"my-server": {
"type": "local",
"command": ["npx", "-y", "my-mcp-server"],
"enabled": true
},
"remote-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
}
}
}Config files: ~/.config/opencode/opencode.json (global), opencode.json (project)
Codex CLI (docs):
Edit ~/.codex/config.toml:
[mcp_servers.my-server]
command = "npx"
args = ["-y", "my-mcp-server"]
env = { "API_KEY" = "value" }
[mcp_servers.remote-server]
url = "https://mcp.example.com/mcp"Config file: ~/.codex/config.toml
Gemini CLI (docs):
# Add server
gemini mcp add --transport http <name> <url>
gemini mcp add -s user <name> -- <command> [args...]Or edit settings.json:
{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "my-mcp-server"]
},
"remote-server": {
"httpUrl": "https://mcp.example.com/mcp"
}
}
}Config files: ~/.gemini/settings.json (user), .gemini/settings.json (project)
Qwen Code (docs): Forked from Gemini CLI - same configuration pattern:
qwen mcp add --transport http <name> <url>Config files: ~/.qwen/settings.json (user), .qwen/settings.json (project)
Kilo:
Edit ~/.kilocode/cli/global/settings/mcp_settings.json:
{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "my-mcp-server"],
"env": {},
"disabled": false
}
}
}Amp (docs):
Amp reads MCP config from multiple locations. Check ~/.config/amp/ or harness documentation for current format.
Config: ~/ai/opencode/opencode.json
| Plugin | Purpose | Link |
|---|---|---|
opencode-antigravity-auth@latest |
Antigravity provider auth (Gemini, Claude via Google) | https://github.com/NoeFabris/opencode-antigravity-auth |
opencode-qwencode-auth |
Qwen OAuth authentication | anomalyco/opencode#11557 |
opencode-openai-codex-auth |
OpenAI Codex auth (GPT-5.x Codex models) | https://github.com/numman-ali/opencode-openai-codex-auth |
| Plugin | Purpose | Link |
|---|---|---|
cc-safety-net |
Safety net for destructive git/fs commands | https://github.com/kenryu42/claude-code-safety-net |
@azumag/opencode-rate-limit-fallback |
Auto fallback on rate limit (429) | https://npmjs.com/package/@azumag/opencode-rate-limit-fallback |
@ramtinj95/opencode-tokenscope |
Token usage stats and cost tracking | https://github.com/ramtinJ95/opencode-tokenscope |