---
name: agent-architecture-skill
description: Generate architecture-level agent context (no code细节) for Terrain projects.
---

# Agent Architecture Context Skill

Produce `agent/context.md` — a **dense, architecture-oriented** document for Coding Agents and Ask mode.

## NOT this skill's job

- Full source code or compressed signatures (that's `agent/repomix.md` — Ask reads via grep/read_file)
- Human-friendly long-form narrative (that's `human/` Litho docs)

## Output contract

When Terrain runs context generation, return the **complete** markdown document as your reply;
Terrain persists it as `agent/context.md`. Do **not** write the output file yourself in that
mode — a reply that is only a completion summary will overwrite a good on-disk document.

When a prompt explicitly delegates file writing to you (no “Terrain will persist your reply”
clause), write to `TERRAIN_AGENT_CONTEXT_OUTPUT` or the path given in the prompt.

Required sections (Markdown `##` headings), in the language specified by the
prompt's `LANGUAGE` directive (Chinese names below; English equivalents in
parentheses — the prompt's explicit section list takes precedence):

1. **项目概览** (Project Overview) — purpose, consumers, key constraints (≤120 words)
2. **架构设计** (Architecture) — containers, layers, major dependencies (table/bullets)
3. **模块地图** (Module Map) — table: Module | Responsibility | Primary paths (≤12 rows)
4. **核心流程** (Core Flows) — 2–4 critical flows as numbered steps (no code)
5. **技术选型** (Tech Stack) — stack, frameworks, infra (bullet list)
6. **系统边界** (System Boundaries) — external APIs, DBs, third-party, trust boundaries
7. **代码映射索引** (Code Map Index) — table: Concept | Location (paths only) | Notes (≤15 rows)

## Developer meta (`terrain-meta.json`)

Repositories may ship one or more **`terrain-meta.json`** files (repo root, `.terrain/`, or nested). Before generating context, Terrain **programmatically collects** referenced files and injects them into the LLM prompt. The bundle is also written to `agent/meta-inputs.md`.

See `terrain-meta.example.json` in this skill directory.

### Schema (version 1)

```json
{
  "version": 1,
  "hints": {
    "module_roots": ["crates/", "src/"],
    "notes": "Free-form team hints"
  },
  "inputs": [
    { "label": "Modules doc", "type": "file", "path": "docs/architecture.md" },
    { "label": "ADRs", "type": "glob", "pattern": "docs/adr/*.md", "optional": true },
    { "label": "Glossary", "type": "inline", "content": "..." }
  ]
}
```

Input types: `file` (path relative to repo or meta file), `glob`, `inline`. Each input may set `optional` and `max_chars` (default 3500).

### How to use meta in output

- Treat collected meta as **authoritative** for **模块地图** and **系统边界**
- Supplement with `grep_agent_pack` for path discovery only
- Do **not** invent modules that contradict developer meta
- Rule-based `modules/` stubs are **deprecated** — synthesis is LLM-driven from meta + repomix

## Rules

- **Hard limit: ≤14000 characters** — trimmed to 16 KiB on save if exceeded
- Macro sections (1–3) must be the densest; sections 4–7 can be shorter
- No function bodies, no code blocks > 3 lines
- Path references only — implementation detail lives in `agent/repomix.md`
- Use `grep_agent_pack` only to discover paths, never paste grep output
- Prefer tables and bullet lists over prose

## ACP mode (Terrain)

When Terrain runs context generation in **ACP mode**, native function tools are unavailable. Use the **`terrain tools`** CLI instead:

```bash
terrain tools pack-meta --project {slug}
terrain tools grep-pack --project {slug} --pattern "module_name"
terrain tools read-pack-file --project {slug} --file src/foo.rs --start-line 1 --end-line 80
```

See `terrain-ask-skill` for the full CLI reference. Do not read the live repository filesystem.

Environment variables set by Terrain:

| Variable | Purpose |
|----------|---------|
| `TERRAIN_AGENT_ARCH_SKILL` | This skill directory |
| `TERRAIN_AGENT_CONTEXT_OUTPUT` | Write target for `agent/context.md` |
| `TERRAIN_KNOWLEDGE_ROOT` | Project `.terrain/` directory |
| `TERRAIN_PROJECT_SLUG` | Project slug |
| `TERRAIN_REPO_PATH` | Repository root |

## How Ask consumes this

- **Macro**: 项目概览 + 架构设计 + 模块地图 preloaded in the question
- **Meso**: other sections fetched on demand via `read_agent_context(section=…)`
- **Micro**: source code via `grep_agent_pack` → `read_agent_pack_file`
