-
-
Notifications
You must be signed in to change notification settings - Fork 2
Workspace Instructions
Coyote can inject human-curated project instructions into every system prompt. This is its equivalent of Claude Code's
CLAUDE.md or the cross-tool AGENTS.md standard. Instructions are the "hard rules and orientation" for a repository:
coding conventions, build commands, architectural constraints, and anything else the LLM should always see.
Instructions complement Memory: instructions are human-curated and read-only to the LLM, while memory
(.coyote/memory/) is agent-curated via the memory__* tools.
| Workspace Instructions | Memory | |
|---|---|---|
| Curated by | You (committed to git) | The LLM (gitignored by default) |
| Injection | Always, in full | Index eagerly; drill files on demand |
| LLM writes? | Never | Yes (with function calling) |
| File(s) |
COYOTE.md at the repo root |
.coyote/memory/ directory |
cd /path/to/your/project
coyote --init-instructions
# → creates ./COYOTE.md with a skeletonEdit COYOTE.md with your project's instructions, commit it, and every Coyote invocation in that repository (or any
subdirectory of it) will include the file in the system prompt.
Re-running --init-instructions is safe: it refuses to overwrite an existing file.
Coyote walks up from the current directory. In each directory it checks the file chain in order and injects the first non-empty match:
-
COYOTE.md— Coyote-native -
AGENTS.md— the cross-tool agent instructions standard (Codex, opencode, Cline, and others) -
CLAUDE.md— Claude Code's instructions file -
GEMINI.md— Gemini CLI's context file
This means a repository that only ships an AGENTS.md or CLAUDE.md gives Coyote full project context with zero
configuration. A file closer to your working directory wins over a higher-priority file name further up the tree, so
a package-level CLAUDE.md beats a repo-root COYOTE.md when you launch Coyote inside that package.
Empty files are skipped, so an empty COYOTE.md will not shadow a real AGENTS.md next to it.
The file content is injected read-only and in full as its own system prompt section:
<workspace_instructions source="/path/to/project/COYOTE.md">
# Project Instructions
...
</workspace_instructions>There is no truncation cap. If the file exceeds ~24,000 characters Coyote logs a warning suggesting you move detail
into Memory drill files, but still injects everything. Keep instructions lean: hard rules and orientation
belong here; voluminous reference material belongs in the memory wiki where the LLM fetches it on demand (see the
iwe-knowledge-base skill for structural navigation of large corpora).
The LLM is never given tools to edit instructions files. They are yours.
In the global config.yaml:
workspace_instructions: null # null/true = inject when a file exists; false = never inject
workspace_instructions_files: null # Custom file chain, in priority order.
# Default: [COYOTE.md, AGENTS.md, CLAUDE.md, GEMINI.md]Reorder or drop fallbacks by setting a custom chain:
# Only ever read the Coyote-native file
workspace_instructions_files: [COYOTE.md]
# Prefer AGENTS.md over COYOTE.md
workspace_instructions_files: [AGENTS.md, COYOTE.md]| Flag | Effect |
|---|---|
--init-instructions |
Scaffold a COYOTE.md in the current directory |
--no-workspace-instructions |
Skip instructions injection for this invocation |
--workspace-instructions-file NAME |
Override the file chain for this invocation (repeatable, priority order) |
The override flag is handy for previewing what other tools see:
# What would Claude Code's context look like here?
coyote --workspace-instructions-file CLAUDE.md --dry-run 'hello'Verify what is being picked up with coyote --info, which reports the resolved workspace_instructions_file.
| Tool | Instructions file | Coyote reads it? |
|---|---|---|
| Coyote | COYOTE.md |
✅ (first priority) |
| Codex CLI | AGENTS.md |
✅ (second priority) |
| opencode | AGENTS.md |
✅ (second priority) |
| Claude Code | CLAUDE.md |
✅ (third priority) |
| Gemini CLI | GEMINI.md |
✅ (fourth priority) |
| Cursor | .cursor/rules/*.mdc |
❌ |
Unlike Claude Code, Coyote does not concatenate instruction files from every ancestor directory, support @path
imports, or load nested files on demand. The first match wins. The Memory system's eagerly-injected index
plus on-demand drill files (navigable with IWE graph tools) covers those use cases with better token economics: put a
pointer in the index ("working in packages/frontend/? read [[frontend-conventions]]") instead of scattering
instruction files.
- Memory: agent-curated persistent memory
- Skills: modular knowledge and capability packs
- Roles: model behavior customization
-
Environment Variables: includes
COYOTE_WORKSPACE_CONFIG_DIRfor cross-tool config dirs