Mods for administrators
This page is for people who look after Syntic Code on other people’s machines. It explains what a mod can and cannot reach, how mods get onto a machine, and the one control you have to keep them off.
What a mod is, in security terms
A mod is a program the user installs in their own config folder and switches on themselves. Syntic Code starts it beside each interactive session and gives it a narrow channel:
| A mod can | A mod cannot |
|---|---|
| Draw a short footer item, a two-row band and a small side pane | Run Syntic Code tools (shell, file edits, web, MCP) |
| Hear five session events: start, end, turn start, turn end, mode change | Send text to the model or read the conversation |
Post short notes that only the user sees, if granted notes | Approve permission prompts or change the permission mode |
Read the session id, model, mode, turn count, busy flag and folder, if granted session.read | Change settings, install plugins or enable other mods |
Those limits apply to what a mod asks Syntic Code to do. The mod itself is still a normal program running with the user’s rights. It can read and write the user’s files and reach the network like any other program the user runs.
Treat enabling a mod like running any downloaded program. The built-in limits stop a mod from using the agent; they do not sandbox the program.
How mods reach a machine
There is exactly one way: the user copies a mod folder into ~/.syntic/mods/<name>/ (or mods/ under an absolute SYNTIC_CONFIG_DIR) and runs syntic mod enable <name>.
Things that cannot install, enable or grant a mod:
- A repository. Project folders are never searched for mods. A
.syntic/mods/folder in a cloned repository is ignored, and project settings have no mod keys. - Plugins and marketplaces. Mods are separate from plugins. Installing a plugin never adds a mod.
- Hand-editing the state file. Enabled mods and grants are recorded in
~/.syntic/mods.json(written with owner-only permissions on Unix). Even if that file is edited, a mod only gets permissions that are both recorded there and asked for in its ownmod.json. - Headless runs.
syntic -pand other non-interactive runs never start mods.
Permission grants
A mod can ask for two permissions in its manifest: notes and session.read. When a user runs syntic mod enable, the command prints each permission with a plain explanation and grants exactly the ones the manifest asks for at that moment.
If a later version of the mod asks for more, the new permission is not granted automatically. syntic mod list flags it as now also asks for: …, and the user must run syntic mod enable again to grant it.
syntic mod disable <name> switches the mod off and removes its grants.
What a running mod is given
| Item | Detail |
|---|---|
| Working folder | The mod’s own folder, never the project. |
| Environment | Empty except PATH (cleaned), HOME, USER, LOGNAME, locale and temp variables, a few Windows system variables, and four SYNTIC_MOD_* variables. Tokens, keys and project variables are not passed. |
PATH | Relative entries, missing folders and anything inside the opened project are removed; standard system folders are added. |
| Program lookup | A relative command must stay inside the mod folder (no .., no symlink out). |
| Data folder | ~/.syntic/mod-data/<name>/, created owner-only on Unix. |
| Process group | Its own, on Unix. When the session ends, the mod and anything it started are stopped after a half-second grace period. |
| Output | Text is stripped of control and direction-override characters and cut to fixed sizes before display. |
Keep mods off on a machine
Set SYNTIC_DISABLE_MODS in the environment Syntic Code runs in. Any value other than empty, 0, false, no or off turns it on:
export SYNTIC_DISABLE_MODS=1With the switch on:
- no mod starts in any session started from that environment;
syntic mod liststill lists installed mods and adds a line saying no mod starts this time;syntic mod enablestill records the choice, and says the mod stays off until the variable is unset.
Put the variable wherever you manage the user’s environment, such as a shell profile for all users or your device management tool. It is read from the process environment when the session starts.
There is no managed settings key, allow-list or block-list for mods today. The environment variable is the only organization-wide control. For plugin controls, see Plugins for your organization.
Review a mod before people use it
If your team shares mods, review them like any internal tool:
- Read
mod.json. Checkcommand,events,uiandpermissions. A mod that only draws a status item needs no permissions. - Read the program. Look at what it does outside the protocol: network calls, files it reads or writes, child processes.
- Check where it writes. A well-behaved mod writes only to
$SYNTIC_MOD_DATA. - Pin a version. Share the reviewed folder (for example, from a tagged commit in an internal repository) so people copy the version you reviewed.
Next steps
- Mods overview
- mod.json reference
- Managed settings for other organization controls.