Memory (SYNTIC.md)
Every session starts fresh, so Syntic Code reads memory files at the start to learn how your project works: how to build and test it, the conventions you follow, the traps to avoid. The main memory file is SYNTIC.md, plain Markdown that you and your team edit like any other file.
Get started in one command
/initSyntic Code studies the project and writes a SYNTIC.md with what a newcomer needs: build, test and lint commands, how the code is laid out, and conventions it noticed. Read it, fix anything wrong, and commit it. Run /init <focus> to steer it, for example /init the API service only.
A good SYNTIC.md is short and specific:
# Orders service
- Build: `make build`. Tests: `make test` (needs Docker running).
- Use pnpm, never npm or yarn.
- Money is always integer cents (`amountCents`), never floats.
- New endpoints need an entry in `docs/api.md`.
- Do not edit files under `gen/`; run `make codegen` instead.Which files are loaded
| File | Use it for | Shared |
|---|---|---|
Organization file (for example /etc/syntic/SYNTIC.md) | Rules for every user on the machine | Set by your admin |
~/.syntic/SYNTIC.md | Your personal preferences in every project | No |
SYNTIC.md or .syntic/SYNTIC.md in the project and each parent folder up to the repository root | Team knowledge | Yes, through git |
SYNTIC.local.md in your working folder | Your own notes for this checkout (keep it out of git) | No |
.syntic/rules/*.md | Topic or folder-specific rules (below) | Yes |
SYNTIC.md in subfolders | Notes for a single area of the code; loaded when the agent starts working there | Yes |
If a folder has no SYNTIC.md, Syntic Code reads its AGENTS.md instead, so repositories that already keep agent instructions there work as they are.
More specific files are read last, so they win when instructions conflict. Memory is capped at 40,000 characters in total (SYNTIC_MAX_MEMORY_CHARS); anything beyond is cut with a visible note.
Rules files
Split a long SYNTIC.md into focused files in .syntic/rules/ (subfolders are fine). A rule without frontmatter always loads. Add paths to load it only when the agent touches matching files:
---
paths: "services/billing/**/*.ts"
---
Billing code: every amount is integer cents. Round with `roundHalfEven`.You can keep personal rules in ~/.syntic/rules/ too.
Pull in other files
A line that is only an import directive brings another file in:
@import ./docs/testing.md
@./docs/style.md
@~/notes/my-shortcuts.mdImports nest up to five levels and loops are ignored. The directive must be on its own line; an @path in the middle of a sentence is left as text.
Leave files out
{ "synticMdExcludes": ["vendor/**/SYNTIC.md", "AGENTS.md"] }or SYNTIC_MEMORY_EXCLUDES. A pattern without / matches the file name; one with / matches the end of the path. SYNTIC_DISABLE_MEMORY=1 loads no memory at all.
Add to memory as you work
| How | Saves |
|---|---|
Start a message with # | The rest of the line goes into SYNTIC.md. |
/remember <fact> | The fact goes into memory. |
/memory | Lists the memory files loaded in this session; Enter opens one in your editor. |
Auto memory
Besides the files you write, Syntic Code keeps its own notes for each project: facts it learned that will help next time (where things are, which command works, what you prefer). They live in a memory folder in the project’s data folder, indexed by a MEMORY.md file whose first 200 lines load each session.
| Control | Effect |
|---|---|
/memory, then a | Switch auto memory. |
/memory, then u | Turn memory upkeep (saving and tidying notes in the background) on or off. |
"autoMemoryEnabled": false or SYNTIC_DISABLE_AUTO_MEMORY=1 | Auto memory off. |
"autoMemoryUpkeep": false or SYNTIC_EXTRACT_MEMORIES=0 | No background upkeep. |
"autoMemoryDirectory" or SYNTIC_AUTO_MEMORY_DIR | Keep the notes somewhere else (an absolute path). |
--bare runs skip auto memory.
Check what is loaded
/memory lists every file in this session’s memory. /context shows how much of the context window memory takes. An InstructionsLoaded hook fires each time a file is loaded, if you want to log it.
Memory loads into every request, so every line has a cost. Keep SYNTIC.md to what the agent cannot work out by reading the code, and move area-specific detail into rules files with paths.