Getting started with Synod for Visual Studio Code

Audience: Someone who has Synod installed and wants to use it, from first message to reading their own files. Time: About 15 minutes. Version this guide describes: 0.1.0 (2026-11-04).


What Synod is

Synod is a chat assistant inside VS Code that runs on your own machine. It talks to the models and tools of your local Datum Core stack; nothing is sent to a cloud service.

In the next major revision, Synod will also work with a remote MCP server (a tools server on another machine), so the tools it uses will no longer have to run on your own machine.

Three parts work together:

How the extension, the gateway and the tools fit together

PartWhat it does
The extension (this guide)The chat window, the Ask command, your settings, and the switches that decide what the model may do.
The gateway (LiteLLM)One address for every local model, plus the tools. The extension only ever talks to this.
Tools serverThe tools the model can call: read a file, search, show a git diff, and more.

What Synod is not. It is separate from other AI chat clients, including VS Code’s built-in chat. It has its own settings, its own tool switches and its own conversation history, and it never edits their configuration.


Quick start

Five steps from a clean install to reading one of your own files.

Step 1. Find the chat

Synod lives in the Secondary Side Bar: the dock on the right, where VS Code’s own Chat and other chat clients also sit. Look for the Synod tab there.

If the right-hand dock is hidden, show it with View → Appearance → Secondary Side Bar.

Two other ways to open it:

Command (Cmd+Shift+P)Result
Synod: Show Chat in Side BarFocuses the Synod tab in the dock.
Synod: Open ChatOpens the same chat as an editor tab, which you can drag into its own window.

Both show the same conversation; use whichever suits your layout.

One-time step: keep the tab. The first time, VS Code may show the Synod tab only while it is selected, so it disappears when you click another chat tab. Right-click the dock’s tab bar (or open its ... menu) and tick Synod. VS Code remembers this; you do it once.

Step 2. Sign in

Run Synod: Sign In and paste the gateway key. It is stored in your operating system’s keychain, never in a settings file. Synod: Sign Out removes it.

Step 3. Say hello

Type a message in the chat and press Send (or Enter). The reply streams in. Under it you will see the model name and how many tokens it used.

You should see a reply within a few seconds to a minute, depending on the model, and a small tokens-per-second figure near the top of the panel.

Step 4. Let Synod see your files

By default the model can answer questions but cannot look at your files. To allow that, turn on two tool bundles:

  1. Run Synod: Manage Tool Bundles.
  2. Tick datum-workstation (read the files in your open folders) and, if you want git history, datum-dev.
  3. Press Enter.

The list may show “0 tools in VS Code” for these. That is normal: the chat gets these tools from the gateway, not from VS Code. See Letting Synod use your workspace.

Step 5. Ask about a real file

In the chat, type:

Read the README in my workspace and summarise it in three bullets.

You should see a line appear above the reply, for example:

→ ide_read_file {"path":"my-project/README.md"}  ·  4210 characters

That line is the model calling a tool. Then the summary follows.

Nothing happened? If a line says no tools offered: ..., it names the switch to turn on.


A tour of the parts

The chat

The chat is the main way to use Synod.

ControlWhereWhat it does
Resize gripTop right of the message boxDrag it up or down to make the message box taller or shorter. With the keyboard: focus it, then Up and Down move it in steps, Home and End go to the smallest and largest, and Esc or a double-click returns it to the default. The size is remembered.
Message box and SendBottomSends your message. While a reply runs, the button becomes Cancel and the box stays open: what you type then is added to the prompt being answered (Enter or Add to this prompt). See Adding to a prompt while it runs below. A message made only of symbols (a stray code fence, ????, <<<) is not sent: the text stays in the box and a hint says to add a few words. A single ? is allowed.
CommandsMessage boxType / to open the command menu (with Synod icons), or type /compact, /compact light, /compact focus, /compact purge, /compact undo, /reset, /keepawake, /models, /help and press Enter: see Commands in the message box: /compact and /reset. They are handled by Synod and never sent to the model.
Prompt historyMessage boxUp and Down walk back and forward through what you have asked before (across all your conversations); Esc returns to a new prompt; Enter sends what is in the box, a recalled prompt as it was or as you edited it. See below.
Settings window (the gear)Beside the model dropdownClick the gear to open a window with Tools (the tool level), Autonomy, Thinking and Auto-tune, laid out in as many columns as the pane has room for; only the settings available for the model you chose are shown. These belong to the chat you are in: the model, Thinking, Tools, Autonomy and Auto-tune are remembered with each conversation, so changing one in a chat leaves the others as they were, and reopening a chat brings its own back. A new chat starts from the defaults (the synod settings below), never from the chat before it; a chat you copy keeps the copy of its settings; /reset puts a chat back on the defaults. Esc closes it and puts you back on the gear, and it remembers whether it was open.
Model dropdownControls rowChooses the model for the next message. Marks show which models are already loaded in memory (fast to answer), which are cold (the first reply is slower) and which are too large for free memory.
Thinking switchSettings windowLets a model reason before it answers. Off by default: thinking can spend minutes on a simple question. Models that cannot reason ignore it.
RateHeaderLive tokens per second while a reply is generated.
GaugesHeaderMemory, CPU, GPU, disk activity and temperature of your machine while a model runs. Local mode only. Hover over a gauge (or focus it with Tab) to read its value, what it measures and when it turns amber or red. Use the arrow beside them to collapse; while they are collapsed Synod stops asking the stack for readings, except during a reply.
Status stripAbove the message boxWhile a reply is on its way: an animated icon, what the model is doing in words, and how long it has been. See below. The same state shows on the Synod tab (its icon) and in the side-bar view (its title and a badge).
AutonomySettings windowask each time (default), auto-read or auto-act (in policy): how far the chat goes before it asks you (see Autonomy: how far the chat goes before it asks).
Auto-tuneSettings windowAuto-tune on / off: let Synod choose which tool groups to offer and whether to use thinking for each message (see Auto-tune: what is offered and spent on each message).
Tool levelSettings windowTools off, Tools: read (default) or Tools: act (asks first): what the model may do in this window. Act lets it propose changes; each one asks you first (see Letting the model make changes (Act level, with your approval)).
Tool linesAbove a replyOne line per tool the model called: the tool, its arguments, and the size of the result or the error. A finished line has show result: click it to read exactly what the tool returned (the same text the model was given), and hide result to close it. Use it to check an answer, especially from a small model (see below).
TimestampsAbove each messageWhen you sent it, and when the reply finished.

Prompt history. In the message box, Up recalls your previous prompt and keeps going back; Down comes forward again, and past the newest it returns to whatever you had typed before you started walking. Esc, while you are walking, returns to a new prompt (what you had typed, or empty). Enter sends what is in the box: press it on a recalled prompt to run it again, or edit it first and press Enter to run the edited version. The history covers all your conversations, so you can re-run a prompt in a new conversation or after switching model. In a prompt that has several lines, Up and Down move the cursor as usual until it is on the first or last line, and then walk the history; Shift, Ctrl, Alt and Cmd with the arrows are left alone. Very long prompts and old attached-context blocks are not offered. (The Ask command’s input box is VS Code’s own and has its own history.)

The status strip. From the moment you send, a strip above the message box shows what is happening, so a long wait never looks like a hang. The icon is always the same drawing (a brain, its brainstem and spinal cord); the colour and the motion change, and the words beside it say the same thing, so you never need to rely on colour.

IconYou seeIt means
SendingThe icon is indigo and fills up.Sending: the request is on its way (shown for a moment).
CompactingThe icon is teal, with lines drawing in toward the middle.Compacting: the conversation is being shrunk before your message goes out (the /compact commands, or automatic compaction when a message would crowd the window). A summary waits on the model, so this can take a while.
PurgingThe icon is orange and drains upward.Purging: /compact purge is applying the exchanges you confirmed. Nothing is deleted.
LoadingThe icon is gold and pulses.Loading the model into memory. Only shown when the stack says the model is not loaded. A large model can take a minute or more.
WaitingThe icon shows cyan ripples.Waiting: the model is reading your message, or is queued behind another request. After 45 seconds the strip says it is still working, that Cancel is available, and when the request will give up.
ThinkingThe icon flickers violet.Thinking (the Thinking switch is on). The token count is an estimate (~).
Using a toolThe icon is plain and moves left, then right.Using a tool: the tool’s name is shown.
ReplyingThe icon is green and runs downward.Replying: the answer is arriving.
Looks confusedThe icon is pink and flickers.The model looks confused: it is repeating itself, producing garbage, asking for tools that do not work, or returned nothing. A warning only: the reply keeps going and you decide what to do.
Finished Cancelled Cut offThe icon is amber and still.Finished. Grey with a bar means you cancelled it; a break across the cord means it was cut off at the limit.
ErrorThe icon is a red cross.Error: Synod could not do it (cannot reach the stack, key rejected, timed out, server error).

On the Synod tab and the side-bar view. When Synod is open as an editor tab (Open Chat), the tab’s own icon shows the same state and moves while a reply is on its way, then settles for a few seconds and goes back to a quiet icon (an error stays until your next message). A side-bar view cannot animate an icon, so while a reply runs it shows the state’s name beside its title (Thinking, Waiting, Compacting) and a small 1 badge on the Synod icon; afterwards it shows the outcome (Done, Cancelled) for a few seconds. The badge counts replies running plus replies waiting for the model; with more than one chat busy the title says how many run and how many wait, and the tab shows the most advanced state of any chat. The editor tab’s own title carries the same count: Synod (3) means three replies are running or waiting, across all your chats, and it goes back to Synod when none are.

Adding to a prompt while it runs

You do not have to wait for a reply to finish to say more. While one is running, type in the box and press Enter (or Add to this prompt): the chat shows Added to this prompt, and the model gets your text at its next step, that is after the next round of tool results and before its next request. It costs no extra model call. The chat then says The model has your addition, and when the reply is saved the addition is kept with the prompt it was made to (shown under it as Added while it ran), so the model sees one amended request in later turns. Compaction, undo and Clone treat it as part of that prompt.

  • A reply with no step left (one plain answer, no tools) has nowhere to take the addition. When it ends, the addition is sent as your next message and the chat says so.
  • If you cancel, or the reply fails, nothing is saved and an addition is not sent on its own: the chat names it so you can send it again.
  • Add and restart. If no step comes for a while (20 seconds; synod.steering.restartOfferSeconds), the chat also offers Add and restart: it stops the answer in progress, keeps the steps already done (a tool call is not run again) and keeps your place (the turn does not rejoin the line, so another chat cannot take the model in between), then asks again with your addition. The unfinished answer stays above the new one, collapsed, as a Discarded draft; it is not saved. Measured here on a 4B model with an 8,000-token prompt: the restarted request took about 20 seconds, against about 80 seconds from a changed start, because the engine reuses what it has already read.
  • A /command typed while a reply runs is still a command, not an addition.
  • Small models can weight the original request more: when the first prompt said “only” something, the smallest local models took the addition into account in about five of six tries in a check run on 2026-10-23, the larger ones every time. If an answer misses it, say it again.

The pictures above are the real icons, one frame each: in the chat they move. They are generated from the extension’s own source (npm run docs:icons), so they cannot drift from the product.

When the reply ends, the strip shows the result for a few seconds, then hides; the reply’s info line keeps the small icon and the total time. An error stays in the strip until your next message. If your computer is set to reduce motion, the icon shows a still picture in the same colour.

What the colours in the log mean. Four kinds of thing share the log, and each looks different so you can tell them apart at a glance:

WhatHow it looks
Your messagesPlain text in the theme’s link colour (blue in most themes), with no box.
Synod’s repliesA box with an outline, in the editor’s widget colour.
A tool callA muted off-yellow line starting with an arrow: the tool, its arguments and the size of the result.
What Synod itself saysA muted purple ground with a purple edge: the notice lines below, and the notes and reports it prints (for example the answer to /help or /models). An error keeps a red edge.

The notice lines have a name in brackets instead of a tool name:

  • (auto-tune) says which tool groups were offered for this message, or that it widened the offer and repeated the request (see Auto-tune: what is offered and spent on each message).
  • (tools) says why there are no tools for this message: the level is off, a bundle is off, the tool server could not be reached, or the model does not take tools.
  • (budget) says that some tool calls in a step were not run because the turn’s tool-output budget was used up, and how many results were cut to fit.
  • (autonomy) says why the chat stopped using tools and answered: the time allowed ran out, too many calls were refused or unusable, the output allowed was used up, or the round limit was reached.

Formatted replies. Replies are shown with Markdown formatting, drawn as the reply streams in: headings, bold, italic, strikethrough, inline code, bulleted and numbered lists (including nested ones), block quotes, tables, rules and links. A code block has a Copy button (hover over it). A block fenced as a shell (bash, sh, zsh, shell or console) also has Run in terminal: it types the command into a terminal named “Synod” and stops there, so you read it and press Enter yourself. Nothing is run for you, and nothing from the terminal is sent back to the model. A block of several lines asks first, because a shell runs every line but the last as soon as it is typed. A half-finished list or code block simply looks unfinished until it closes. Your own messages stay plain text.

Two things are deliberately not done, for safety: links open only if they are http, https or mailto (anything else shows as plain text), and images are never loaded (you see their description). Anything that looks like HTML in a reply is shown as the literal text, never run.

A reply that was stopped at the length limit is marked cut off at the limit, so you never mistake a partial answer for a complete one.

Ask

Synod: Ask is the quick, one-shot route: you type a question in a box at the top of the window, and the answer is written to the Synod output channel (View → Output → Synod, or Synod: Show Output).

If a reply is already running when you ask, Ask waits its turn: a notification says it is waiting, and you can cancel it there; it runs as soon as the reply in progress finishes (replies take turns, so the model is never asked for more things at once than your machine has slots for: one on a small machine, more on a larger one; the stack says how many, and Synod asks it rather than guessing). With more than one slot, chats on different models run side by side, but if the second model is not loaded the engine may have to swap models, and the chat says so when it starts. Other chats are not locked while a reply runs: you can switch, start a new chat or clone one, and the reply carries on in its own chat; the conversation menu shows which chats are running, waiting for a slot or waiting for your approval.

What makes Ask different is that it offers to attach context first. A picker lets you include:

OptionWhat is attached
SelectionThe text you have selected.
Active fileThe file in the editor (clipped at 12,000 characters).
Active directoryA listing of the file names in that folder.
Workspace: nameA listing of an open folder’s top level.
Added: nameA folder you added with Synod: Add Context Directory.

Attached context is pasted text. It is not tool access: a directory listing tells the model what the names are, nothing more. Ask uses the same tools as the chat when their bundles are on.

Use Synod: Clear Context Directories to remove the added folders.

Which should I use? The chat for conversations and anything that needs the model to look at files; Ask for a quick question about the text you have selected.

Models

These models are examples. Synod does not come with models. You choose which language models to use and download them onto your own machine; the table below shows the defaults the stack is set up with, and your list will differ. In the next major revision, Synod will also be able to use the models of Datum Core.

Synod works with the models your stack serves. The defaults are four sizes of one model family, each used by its own name:

ModelUse
qwen3.5:0.8bThe smallest and fastest; simple questions.
qwen3.5:2bQuick drafts.
qwen3.5:4bThe default: a balance of quality and speed.
qwen3.5:9bThe most capable and the slowest; needs the most memory.

Each of these also has a short name on the gateway: datum-local-nano, datum-local-grunt, datum-local-mid (the default) and datum-local-heavy. Either name works.

Check lists against the tool. Small models can drop items from a list a tool returned, or mistype an id. The tool was right every time. When a list matters, open show result on the tool line. The chat’s instructions tell the model to include every item and copy names, ids and numbers exactly; that helps, and it does not make a small model reliable.

The log follows a reply. While a reply arrives, the conversation keeps scrolling so the newest text stays in view. Scroll up to read something earlier and it stays where you put it, and a ↓ Latest button appears at the bottom right of the conversation; click it, scroll back to the bottom, or send a message, and it follows again.

Change the model for the current chat from the dropdown, or set the default with Synod: Select Model (it lists what the gateway offers) or the synod.model setting.

Note on context size. Local models run with a window of about 32,000 tokens (roughly 130,000 characters for everything: your question, the earlier conversation, the tool definitions and the reply). Synod reads the window from the stack and sizes the reply allowance, the history it sends and the tool output to fit it. When a prompt would fill 75% of the window the chat tidies the conversation first, and at 90% it summarises the earlier part; both are announced and nothing is deleted (see Conversations).

Conversations

Everything you say is saved in a conversation, and you can have as many as you like. The current one’s name is at the top of the chat.

To do thisDo this
See which conversation you are inRead the name at the top of the chat.
Rename itClick the name, type, press Enter (or Escape to cancel).
See all your conversations, and how manyClick the small arrow beside the name. The list shows each one’s name, when it was last used and its number of turns.
Switch to anotherClick it in the list.
Start a new one+ New in the list, or Synod: New Conversation. If the current one is still empty it is reused, so clicking again never piles up empty conversations.
Clone oneClone beside it. Its turns are copied into “ (copy)” and you switch to the copy; the two then go their own ways.
Delete oneDelete beside it. You are asked first.

Names. A new conversation is named from your first message (for example, “Can you read the files in my workspace?” becomes Read the files in my workspace). It is a plain rule, not a model, so it is instant. A name you type yourself is never replaced.

Deleted conversations are not erased. Delete moves a conversation to a Deleted folder. In the conversation list, open Deleted to see what is there, with when it was deleted, and:

  • Restore brings it back as it was.
  • Delete for good erases that one permanently, after a confirmation.
  • Erase all deleted empties the folder, after a confirmation.

Only the last two cannot be undone.

All of this is also in the Command Palette:

CommandDoes
Synod: Switch ConversationLists your conversations (with the count) and switches.
Synod: Rename ConversationRenames the current one.
Synod: Clone ConversationCopies the current one and switches to the copy.
Synod: Delete ConversationAsks which, then confirms.
Synod: Show Deleted ConversationsRestore, delete for good, or erase all.

Several chats at once. You can switch, start a new conversation, clone or rename while a reply runs in another chat. Each chat keeps its own reply, model and tool settings, and they share the engine: one runs while the others wait their turn, and a reply that has to wait shows its place in line. A chat with work going on is marked in the list by a coloured edge (blue: running, yellow: waiting for the model, orange: waiting for your approval) and its line says which; the list’s title adds how many are busy, for example Conversations (5) · 2 busy, and the Synod tab shows the total. A new chat you start while another is busy is a new chat, and it stays in the list even before it has a saved turn. A chat with a reply running or waiting cannot be deleted; wait for it or cancel it first.

What the model sees. Only the newest part of a long conversation is sent with each message (default 8,000 characters, synod.historyMaxChars). The full conversation stays on disk. The chat and Ask share the current conversation.

Where they are kept. One plain file per conversation in ~/.local/share/photon-datum/memory/conversations/ (.ndjson), and deleted ones in ~/.local/share/photon-datum/memory/conversations-deleted/. Set DATUM_HISTORY_DIR to keep them somewhere else.


Letting Synod use your workspace

How it works

What happens when you ask about a file

  1. The extension publishes the folders open in this window to a small file on your machine, so the tools know what you have open.
  2. When you ask, the model may request a tool. The extension runs it through the gateway, shows you the call, and gives the result back to the model.
  3. The model answers using what it read. This can repeat a few times in one reply.

What the model can use

Only read-only tools are offered. The default list:

ToolDoes
ide_rootsLists the folders you have open.
ide_list_dirLists the files in a folder.
ide_read_fileReads a text file (large files are read in pieces).
ide_search_filesSearches file names and contents.
git_status, git_log, git_diff, git_showInspect the state and history of a git repository.
datetimeToday’s date, the time, the time zone and the UTC and Unix time. A model cannot know these, so it asks.
version, pingThe tool server’s version and build, and whether it answers.
workspaceThe working folder, the repository root, the branch, the remote, the git status and the last commit.
token_countHow many tokens a text is for a given model.
model_infoWhat the gateway knows about a model: its context window, and whether it takes tools or thinks.
runtime_statusWhat the engine is doing now: which models are in memory, RAM and swap, memory and CPU pressure, and whether a given model is already loaded.

Change the list with synod.chatTools.allow. Each tool costs part of the model’s small window, so keep it short.

A tool is offered only if all three are true:

  1. it is in the allow list;
  2. the tool itself is marked read-only by the server; and
  3. its bundle is switched on.

Bundles: the switches

A bundle is a named group of tools that you switch on or off together.

BundleContainsDefault
datum-coreThe basics every user gets.On
datum-workstationThe ide_* file tools (they act on your machine).Off
datum-devThe git_* tools.Off
otherTools no bundle claims.On

Switch bundles with Synod: Manage Tool Bundles. Your choices are stored in the synod.mcpBundles setting. List MCP Tools by Bundle writes the full picture to the output channel.

A bundle switch controls what Synod uses. It does not change what VS Code’s own chat or other AI clients can see.

Limits that keep replies fast

SettingDefaultMeaning
synod.chatTools.maxRounds6How many times the model may ask for tools in one reply.
synod.chatTools.maxResultChars6144The most of one tool result the model is given. The rest is cut, and the model is told how to ask for more.
synod.chatTools.maxTurnChars12288The most tool output in one reply, in total. After that the model must answer with what it has.

If the model keeps asking for the same thing, the repeat is refused. If a limit is reached, the model is asked to answer with what it has read and to say what it could not check.

Folders the tools will not open

Folders named confidential or export, at any depth and in any letter case, are off limits to every tool, and are not even listed. This protects client material. You can add more names on the machine that runs the gateway with the DATUM_IDE_DENY environment variable (for example private). Files such as .env, keys and certificates are also never read.

Turning workspace publishing off

synod.publishWorkspace (on by default) controls whether the open folders are published. Turn it off and the file tools see nothing. The published file is ~/.local/state/datum/ide-workspaces.json, readable only by you; remote and virtual workspaces are never published.

Letting the model make changes (Act level, with your approval)

By default the model can only read. To let it propose changes, choose Tools: act (asks first) under the message box. Synod asks once to confirm the switch; the choice lasts for that window and starts again at read after a reload (the setting synod.chatTools.level changes where a window starts).

At Act the model is also offered the tools in synod.chatTools.allowWrite. By default:

ToolDoes
ide_write_fileCreates or overwrites a file.
ide_patch_fileReplaces text inside a file.

Deleting and pushing are not in the default list; add them only if you want to be asked about them.

Every change asks first, every time. When the model asks to change something, a dialog shows the tool, the arguments it will run with and, for file tools, the tool’s own dry run (“would create … (17 bytes)”). Nothing runs unless you choose Approve. Closing the dialog, or anything else, is a no. The model is told a decline was the answer and not to try again unless you ask. While it waits for you, the status strip says Waiting for your approval. Approving one change does not approve the next.

  • Changed files are recorded. For each file the model writes or patches after you approve, Synod reads the file just before and just after and keeps both with that reply. The chat lists it above the reply (Created notes/todo.txt, Overwrote …, Patched …) with a View diff link that opens VS Code’s own diff editor from what was kept, not from the file as it is now. The same list is there when you reopen the conversation. The record covers what Synod itself changed, with your approval; it does not see changes made some other way. A file over 60,000 characters is kept cut (the diff title says so), and a file Synod could not read still gets a line, without a diff. The kept text is for you: it is never sent to the model.
  • If the tool’s dry run fails (a protected folder, an ambiguous path), you are not asked: the model gets the error.
  • The level can be changed only between replies.
  • The Ask command uses the same level and the same dialog.

What the model remembers of what it read

The conversation keeps a short record of each tool the model called (which tool, the arguments, the time and how much came back). On the next message the model is given that as a note which says it may be out of date and to call the tool again for the current state, so “what is in it now?” always looks again. The result itself is not sent back: a file, web page or ticket can contain text written to pass for an instruction, and in a system note it could. synod.chatTools.rememberChars (0 by default) saves the first part of each result for you; when you set it above 0, the sample is sent back too, quoted, with its words joined by ^ and a warning, and the risk is yours. The note counts toward synod.historyMaxChars and goes when its turn goes. The full result is never saved.


Autonomy: how far the chat goes before it asks

Autonomy is separate from the tool level. The tool level says what the model is allowed to use; Autonomy says how many times it has to ask you. It never goes beyond the tool level.

LevelWhat changes
Ask each time (default)Reads run within the usual limits; every change opens the approval dialog (Letting the model make changes (Act level, with your approval)).
Auto-readThe chat carries on reading until it has answered: up to 16 rounds and 4 minutes, with older tool results shortened as it goes so the window does not fill. It stops, says why (“Stopped: …”) and answers with what it has if two tool calls are refused, a call repeats, the time or rounds run out, or the stack errors. Changes still ask.
Auto-act (in policy)As auto-read, and a change runs without a dialog only when it is inside your policy. Needs the tool level Act.

Raising the level asks you once, saying what will change. The choice lasts for that window and cannot be changed while a reply runs; synod.autonomy.level sets where a window starts.

The policy for auto-act (all empty by default, so nothing is auto-approved until you name where):

  • synod.autonomy.allowFolders: absolute folders where file changes may run unasked. Symlinks are resolved; a path with a confidential or export folder in it always asks.
  • synod.autonomy.autoTools: which tools may run unasked at all (default: file write, file patch). Delete, push, bulk and restore tools never do, even if listed. Notes and status changes can’t be tied to a project from their arguments, so they always ask.
  • By default only a new file runs unasked (the tool’s own dry run must say it “would create” it); overwriting asks unless synod.autonomy.allowOverwrite is on.
  • synod.autonomy.maxAuto (5): the sixth change in one reply asks. Decline anything and the rest of that reply asks.

Each unasked change shows on its tool line as auto-approved: folder … and is written to ~/.local/state/datum/vscode-autonomy.jsonl (time, tool, arguments, the rule that allowed it, the dry run, the model). That log is always on. Anything outside the policy simply opens the dialog as usual.

Auto-tune: what is offered and spent on each message

Tool definitions take about a third of a small model’s window on every message, and thinking can cost thousands of tokens on a simple question. Auto-tune (on by default while Synod is in development; the toggle beside the model dropdown) decides for each message, by fixed rules and never by asking a model:

  • Which tool groups to offer: files and git. Your message is checked for words and file names that point to a group (“README.md”, “commit”, “epics”); the groups the previous reply used stay on, so a follow-up keeps its tools; a short follow-up in a continuing conversation (“and the second one?”, “try again”, “what about that?”) keeps everything, so refining a request is never starved of tools; a short message that points to none is a plain question and gets no tools; a long one that points to none gets everything. Nothing is remembered from turn to turn: every message starts from the full set. Tools you added yourself are never touched.
  • The small tools: datetime, version, workspace, token_count, ping, model_info and runtime_status are their own group, system. They are offered when the message mentions the time, the date, a version, tokens, models, the runtime or a status (or the previous reply used one), and left out of a plain question, so a greeting does not carry seven tool definitions.
  • Thinking: if the Thinking switch is on and the message is short with no reasoning words (“why”, “explain”, “plan”, “compare” …), thinking is switched off for that message. Auto-tune never switches it on.

It can only take things away, never add. A line above the reply says what it did, for example offered: git · ~1,073 of ~2,431 tokens of tool definitions (estimate). If the model then says it cannot reach your files, the message is repeated once with everything allowed (the first reply is cleared), and the line says “widened”. If it still goes wrong, switch Auto-tune off: that is exactly the behaviour before it existed.

Commands in the message box: /compact and /reset

Typed in the chat and handled by Synod itself (never sent to the model, never saved as a turn). A message is a command only if it is exactly one of these, so a message that starts with a path (/Users/me/notes.md summarise this) is sent as usual.

CommandDoes
/compact or /compact fullSummarise the earlier conversation (the usual meaning of “compact”; the default). The model you have selected writes a short summary of everything except the last two exchanges, which stay as they are.
/compact lightTidy only: stop sending repeated prompts (the last copy is kept, so re-running a prompt many times while testing leaves one), empty replies, and old “I cannot access files” refusals that make a model repeat itself. No model is used.
/compact focus a, bKeep only what matters: the exchanges that mention a or b (and the latest two) stay; the rest are no longer sent. No model is used. Synod shows a preview first (“keeps 12 of 40 exchanges, drops 28; matched on: a (9), b (5)”) and applies it only when you confirm.
/compact purge x, yDrop what you name: the exchanges that mention x or y are no longer sent (the latest exchange is always kept). Same preview and confirmation.
/compact undoRestore what the latest focus or purge dropped.
/resetStart a new conversation and put the tool level and autonomy back to their starting values. The previous conversation stays in your conversation list.
/keepawake (also /caffeination)Keep this machine from sleeping while Synod works. /keepawake says how it is set; /keepawake auto (the default) holds only while a reply, an Ask or a compaction is running, for at most 30 minutes at a time; /keepawake on holds until you switch it off, for at most 4 hours; /keepawake off never holds. The strip says so while it holds. It only prevents sleep (it throttles nothing), and every hold ends by itself at its limit even if VS Code is killed. A laptop whose lid is closed on battery still sleeps. It works on macOS and on Linux with systemd; elsewhere it says it is not available. The limits are the settings synod.keepAwake.autoMinutes and synod.keepAwake.onHours.
/modelsThe models on offer and whether to run one now: each chat model with where it runs (local or remote), its parameter count, the context the chat gets (and what the model could do), the memory it needs and what is free, and a verdict (loaded now, fits now, fits only if another model is unloaded, too large for this machine). A model that is loaded shows the memory it really holds; one that is not shows an estimate, marked ~, from its file size and its context window. Loading a model that does not fit makes the engine unload the current one, and two models taking turns reload each time. Read-only, no model, works while a reply runs.
/helpList the commands.

A phrase is matched without regard to case against the prompt, the reply and the names of the tools called; an exchange is kept or dropped as a whole, and nothing is deleted: dropped exchanges stay on screen and on disk.

A bad option (/compact heavy) or a mistyped command (/compct) is answered by Synod, not sent.

Examples.

  • /compact focus README, install keeps only the exchanges that mention README or install (and the latest two), after showing you a preview.
  • /compact purge retry, typo drops the exchanges that mention a side track you no longer want the model to see.
  • /keepawake on keeps this machine awake until you switch it off, for at most four hours.

The command menu. Type / and a menu opens above the message box listing the commands, each with a Synod icon (the same brain-and-cord family as the status strip): violet for /compact full (the model writes a summary), cyan for /compact light (a tidy, no model), indigo for /reset (a fresh start), grey for /help. Typing narrows the list; Up/Down move the highlight, Tab or Enter put it in the box, Esc closes the menu, and you can click a row. When the box holds a command exactly the menu steps aside and Enter runs it. The same icon appears before the command’s result in the log, and on the divider a compaction leaves in the history.

Compaction deletes nothing. The original turns stay on disk and stay on screen, with a divider where the compaction happened (“Compacted (full): 12 earlier turns became a summary of 1,640 characters …”), and the note says roughly how many tokens of history the model now gets (an estimate). What changes is only what the model is sent. You can compact again later; a new summary builds on the old one. A failed or cancelled summary changes nothing. A small local model’s summary can lose detail: the originals are still there.

Synod’s own MCP servers

MCP (Model Context Protocol) is the standard way tools are offered to an assistant: tools that give AI agents controlled access to systems. Besides using the tools it is given, Synod can publish its own MCP servers to VS Code, so that VS Code’s chat and other tools can use them too. This is optional and independent of other assistants, and you do not need it for the chat.

Where to find and change things

Commands

Open the Command Palette (Cmd+Shift+P) and type Synod.

TaskCommand
Open the chatSynod: Show Chat in Side Bar, Synod: Open Chat
One-shot question with contextSynod: Ask
Start overSynod: New Conversation
Manage conversationsSwitch / Rename / Clone / Delete Conversation, Show Deleted Conversations
Pick a default modelSynod: Select Model
Add or clear context foldersSynod: Add Context Directory, Clear Context Directories
CredentialsSynod: Sign In, Sign Out
See the logSynod: Show Output; Synod: Open Error Log; Synod: Toggle Error Logging
Tool switchesSynod: Manage Tool Bundles, List MCP Tools by Bundle

Language

Synod shows its text in the language VS Code is displayed in, if a translation of it is installed, and in English otherwise. A translation is a file, l10n/<language>.json in the extension, with the same keys as the English messages; anything it does not translate shows in English, and the settings and command titles VS Code reads from package.json come from a matching package.nls.<language>.json. The chat window, the notices and dialogs, the settings window, the conversation menu and the status strip all use it. Some text stays English on purpose: what the model is told, the tool lines, and the reports that other code reads or that are pasted to a developer. German, Spanish and Bulgarian ship with the extension, every message in each. They were written by a language model and have not yet been reviewed by a native speaker, so expect some awkward wording; tell us what to correct. A new message in English is not accepted without its three translations, so the languages stay level. The mechanism is also checked with a pseudo-language that marks every message, so text that bypasses it shows up.

Profiles

One extension, set up as a product. The setting synod.profile chooses what this window has: which parts exist (the chat, Ask, MCP management, the sign-in commands) and which routes to models it may use (this machine’s stack, a remote stack, or either).

ProfileHasRoutes
chat (the default)It has every part.It may use this machine’s stack or a remote stack.
synapseIt has every part except signing in and out.It uses this machine’s stack only.
remoteIt has every part except MCP management.It uses a remote stack only.

A part that a profile does not have disappears from the Command Palette and the chat view, and a command run some other way says it is not part of the profile. If synod.mode asks for a route the profile does not allow, the profile’s own route is used and the Synod output says so; if you have not set synod.mode, the profile’s route is used without comment. The chat profile behaves exactly as Synod always has, so choosing nothing changes nothing. A change applies at once. Remote routes are not available yet, so the remote profile shows the same clear message as synod.mode = network.


Safety and privacy

  • Local only. Prompts, files and tool results go to your own gateway on your machine. Nothing is sent to an outside service.
  • Read-only by default. The chat is offered read tools only. At the Act level it can also propose the changes you have listed (synod.chatTools.allowWrite), and every one asks you first, every time, showing the tool’s own dry run where it has one (Letting the model make changes (Act level, with your approval)). Deleting and pushing are not in the default list.
  • You decide what it can reach. A tool stays out of reach until its bundle is on, and you can cut the list down with synod.chatTools.allow.
  • Every call is visible. The tool, its arguments and the result size appear above the reply.
  • Protected folders and credential files are never opened by the tools (Folders the tools will not open).
  • Tool results are treated as data. The model is told to treat file contents as information, never as instructions, so text inside a file cannot give it orders. By default nothing a tool returned is sent back to the model on later turns at all, only the fact that the call happened (synod.chatTools.rememberChars is 0); if you set it above 0, the sample is sent back quoted, with its words joined by ^ and a warning. A reply that looks like a command, a tool call or markup is never run.
  • Secrets stay in the keychain. The gateway key and any MCP secrets are never written to a settings file.

Glossary

TermMeaning
Gateway / LiteLLMThe gateway is the local service that all models and tools go through.
MCPMCP stands for Model Context Protocol, the standard way tools are offered to an assistant.
Tools serverIt is the collection of tools the model can call (files, git, and more).
ToolA tool is one thing the model can ask for, such as ide_read_file.
BundleA bundle is a named group of tools that you switch on or off together.
Tool call / roundA tool call is one request by the model to run a tool, and a round is one pass of asking and answering.
ContextContext is text attached to a message so the model can see it (Ask).
ConversationA conversation is the saved back-and-forth you continue from.
Context windowThe context window is how much text a model can consider at once. Local models here use 32,768 tokens where the model supports it.
TokenA token is a piece of text, roughly four characters.
ThinkingThinking is the model reasoning before it answers.
Protected folderA protected folder is a folder name (confidential, export) that the tools never open.
Secondary Side BarThe Secondary Side Bar is the dock on the right of VS Code, where Synod and other chat clients sit.

What is coming

Planned, not yet available:

  • Showing why a level is blocked. The tool-level control shows the level; when something blocks it (a bundle that is off) the reason appears as a line above the reply, not yet beside the control.
  • Auto-tune choosing the model, once the model capability matrix exists.
  • Review of the translations. The German, Spanish and Bulgarian text is to be checked by native speakers.
  • Remote MCP servers, with streaming tool support. In the next major revision, Synod will work with an MCP server on another machine, not only the tools on your own. That includes tools that stream their results while they run, so you see progress instead of waiting for the whole answer. The same revision will let Synod use the models of Datum Core.
  • Network mode. Sign-in for using a shared gateway.