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

/init

Syntic 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

FileUse it forShared
Organization file (for example /etc/syntic/SYNTIC.md)Rules for every user on the machineSet by your admin
~/.syntic/SYNTIC.mdYour personal preferences in every projectNo
SYNTIC.md or .syntic/SYNTIC.md in the project and each parent folder up to the repository rootTeam knowledgeYes, through git
SYNTIC.local.md in your working folderYour own notes for this checkout (keep it out of git)No
.syntic/rules/*.mdTopic or folder-specific rules (below)Yes
SYNTIC.md in subfoldersNotes for a single area of the code; loaded when the agent starts working thereYes

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.md

Imports 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

HowSaves
Start a message with #The rest of the line goes into SYNTIC.md.
/remember <fact>The fact goes into memory.
/memoryLists 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.

ControlEffect
/memory, then aSwitch auto memory.
/memory, then uTurn memory upkeep (saving and tidying notes in the background) on or off.
"autoMemoryEnabled": false or SYNTIC_DISABLE_AUTO_MEMORY=1Auto memory off.
"autoMemoryUpkeep": false or SYNTIC_EXTRACT_MEMORIES=0No background upkeep.
"autoMemoryDirectory" or SYNTIC_AUTO_MEMORY_DIRKeep 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.