1
Workspace Instructions
Alex Clarke edited this page 2026-07-17 15:04:31 -06:00

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

Quick Start

cd /path/to/your/project
coyote --init-instructions
# → creates ./COYOTE.md with a skeleton

Edit 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.

File Discovery

Coyote walks up from the current directory. In each directory it checks the file chain in order and injects the first non-empty match:

  1. COYOTE.md — Coyote-native
  2. AGENTS.md — the cross-tool agent instructions standard (Codex, opencode, Cline, and others)
  3. CLAUDE.mdClaude Code's instructions file
  4. GEMINI.mdGemini 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.

What Gets Injected

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.

Configuration

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]

CLI Flags

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.

Relationship to Other Tools' Conventions

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.

See Also

  • Memory: agent-curated persistent memory
  • Skills: modular knowledge and capability packs
  • Roles: model behavior customization
  • Environment Variables: includes COYOTE_WORKSPACE_CONFIG_DIR for cross-tool config dirs