deer-flow/backend/AGENTS.md
Xinmin Zeng 2a97ec3e58
docs: turn README into an index and move reference detail to docs/guide (#8113)
* docs: turn README into an index and move reference detail to docs/guide

The README had grown to 393 KB because every change appended its notes there. The text moves verbatim into 18 topic guides under docs/guide/; only headings are re-leveled and relative links re-pointed. The README keeps the introduction, a quick start and a guide index. Contributor test notes move to CONTRIBUTING.md.

* docs: send user docs to topic guides and budget the root README

The rule 'update README.md for user-facing changes' is what grew the README. Guidance now points to docs/guide/, and check_agent_guidance.py fails when the root README exceeds 16 KiB (AG003).

* chore: remove unreferenced screenshots and finished plan notes

pr-build/ holds two PR screenshots (3 MB) from #1986. plans/ holds the plan for the merged #4049. docs/SKILL_NAME_CONFLICT_FIX.md is a February change note. Nothing references them.

* docs: route always-loaded AGENTS.md files to scoped guides

* docs(agents): cut scoped guides to scope, verify, traps, decisions

Each AGENTS.md keeps four kinds of content: the scope of the directory, the
verification commands, traps a local test run does not show, and decisions the
code cannot state. Values, field lists, function inventories, test names, issue
numbers and history are deleted, because the code, the tests and git state them.

Search and fetch providers share one community guide. Four guides with no
remaining content are removed. The size check now allows 6 KiB per file (hard
limit 8 KiB) and 24 KiB per chain (hard limit 32 KiB).

* style: format frontend guide table and guidance test imports

---------

Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-11-11 13:26:17 +08:00

3.5 KiB

Backend (backend/)

The Python backend: the publishable harness in packages/harness/deerflow/, the public extension contract in packages/extension-api/, and the unpublished Gateway and IM channels in app/. In every deployment the agent runtime runs inside the Gateway. Design docs are in docs/; start with ARCHITECTURE.md and API.md.

Guides by area

Read the guide for an area before you change it.

Area Guide
Run streaming, checkpoints, run ownership runtime
Repositories, leases, scheduled tasks, schema changes persistence, migrations
config.yaml, extensions_config.json config
Lead agent, prompt, thread state, middleware chain agents, middlewares
Memory, subagents, skills, tools memory, subagents, skills, tools
Sandbox, uploads, MCP, models, extensions sandbox, uploads, mcp, models, extensions
Trace ID, embedded client, other root modules harness package
Search, fetch and sandbox providers community, then the provider's own guide
Gateway, routers, IM channels gateway, routers, channels
Tests, benchmarks tests, benchmarks

Verify

make test               # offline suite in parallel shards
make test-blocking-io   # strict blocking-I/O suite
make lint
make format
make test-live          # calls real APIs; needs DEER_FLOW_RUN_LIVE_TESTS=1

Run make test and make test-blocking-io before and after a change. Every feature and bug fix ships with a test in tests/. Live tests stay opt-in, so the default suite needs no network and no API key.

Rules

  • The harness never imports app. app.* imports deerflow.*, and not the reverse, because the harness is published on its own. tests/test_harness_boundary.py enforces this in CI.
  • Start the Gateway with make dev or make gateway. make dev excludes DEER_FLOW_HOME and backend/sandbox from the reload watcher. A bare uvicorn --reload restarts the Gateway during a run, because agent tasks write Python files below DEER_FLOW_HOME.
  • From the repository root, run backend tools with uv run --no-sync --project backend. --project keeps the caller's working directory, so relative config paths still resolve. --no-sync keeps installed extras such as the PostgreSQL drivers.
  • Run Python through uv run inside backend/, without --no-sync, so the environment matches the lock.
  • Guard POSIX-only test markers with os.name. Windows collects the same files.
  • Add a schema change with make migrate-rev MSG="..." and follow the migrations guide.