Files
2026-07-13 13:00:08 +08:00

3.2 KiB

Reasonix project memory

This file is loaded into every session's system prompt (the cache-stable prefix), so keep it concise and durable — it is the project's standing instructions to the agent. It is the Reasonix analog of Claude Code's CLAUDE.md.

Conventions

  • Go kernel under internal/; each package owns one concern and documents it in a package comment. Match the surrounding comment density and idiom when editing.
  • One transport-agnostic control.Controller sits behind every frontend (chat TUI, HTTP/SSE serve, Wails desktop). Add behavior to the controller, not a frontend, so all three inherit it.
  • Cache-first: the system-prompt prefix (base prompt + tools + memory) must stay byte-stable across turns so DeepSeek's automatic prefix cache stays warm. Never mutate it mid-session — ride the turn tail instead (see control.Compose).

Memory

  • Hierarchical docs: REASONIX.md (this file, committed/shared), REASONIX.local.md (personal, git-ignored), user-global ~/.config/reasonix/REASONIX.md, and any REASONIX.md in an ancestor dir. AGENTS.md is accepted as a fallback name.
  • @path on its own line imports another file's contents.
  • #<note> in chat quick-adds a line here. The remember tool saves durable facts to the per-project auto-memory store (frontmatter files + MEMORY.md index), which loads into the prefix on the next session.

Notes

Pre-push CI simulation

Run these before every commit to catch the fastest CI failures locally:

gofmt -w .                          # catches gofmt (saves ~13s CI)
go vet ./...                        # catches vet warnings (saves ~52s CI/lint)
go test ./internal/tool/builtin/ ./internal/boot/  # catches tool/boot test breaks

CI runs golangci-lint (not locally available), but gofmt + vet already block ~80% of fast-fail scenarios.

Import cycle rule

Before importing a new internal package from a non-test file, verify the target package's test files aren't already importing back to you:

# BAD: agent(_test.go) → tool/builtin(sessions.go) → agent  → setup failed

Use go test ./path/to/target/ to detect cycles before pushing. A [setup failed] message means a cycle exists.

PR hygiene

  • One force-push per round of review feedback. Multiple force-pushes destroy review history and confuse reviewers.
  • Keep the PR diff minimal. Only the files relevant to the PR's purpose — no stray changes from other branches.
  • Amend, don't add commits, for review feedback — keeps the commit history clean.

Cache-impact PR metadata

When PR changes touch files under internal/boot/, internal/tool/, internal/provider/, or other cache-sensitive paths (listed in scripts/check-cache-impact.sh), the PR body MUST include these lines at the end:

Cache-impact: <none|low|medium|high> — <reason>
Cache-guard: <focused guard test/command or existing guard rationale>

If the PR also touches files under internal/config/, internal/memory/, internal/outputstyle/, internal/skill/, or internal/boot/, add:

System-prompt-review: <reviewer/approval note>

Values n/a, none, todo, tbd are rejected — use a descriptive reason instead.