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.Controllersits 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 anyREASONIX.mdin an ancestor dir.AGENTS.mdis accepted as a fallback name. @pathon its own line imports another file's contents.#<note>in chat quick-adds a line here. Theremembertool saves durable facts to the per-project auto-memory store (frontmatter files +MEMORY.mdindex), 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.