First run on your own machine
What `spl init` creates on a local install, how to inspect your identity and config, and when to re-initialize. Once the workspace is up, Your first hour describes what it does next.
This page is for people running their own workspace or using the API. If you use a workspace created at syncropel.com, start with Your hosted workspace.
First run on Linux/macOS is three short verbs
spl init --preset recommended # generate identity + config, install the assistant
spl serve # start the workspace in the background
spl task add "..." # everything works immediately: no service account, no bearerOnce it is up, read Your first hour: a fresh workspace set up with a preset asks you one question, and answering it opens your first thread.
The local CLI talks to the workspace over a Unix socket at ~/.syncro/run/spl.sock; filesystem permissions (the socket is mode 0700 owned by your user) are the authentication. Bearer tokens are still the right primitive for delegating scoped access: see Service accounts and tokens when you need to pair a browser, phone, MCP client, remote CLI, or another workspace.
spl serve / spl stop / spl restart are the convenience verbs for interactive use; the full spl serve form (foreground) is the canonical entry point used by systemd units, Docker containers, Kubernetes pods, managed cloud platforms, and other process supervisors.
After spl version prints cleanly, run spl init once to create your local state directory.
spl init
spl init --preset recommendedThis creates ~/.syncro/ with default contents and a fresh identity, and
applies the recommended preset: the assistant is installed, and one question
("What are you working on?") is placed in your call, waiting for you when the
workspace starts. Pass --preset blank for a workspace with nothing installed
and no question. A bare spl init with no --preset applies none: the
workspace starts unconfigured, with no assistant and no question, until a
preset is applied (the Studio's first-run card offers them). An unknown preset
name is refused before anything is written.
The new directory tree:
~/.syncro/
├── config.toml Identity, default model, server settings
├── token Bearer token for the CLI (created later; see Service accounts and tokens)
├── keys/ Signing keys for your identity
│ ├── primary.pub Public key
│ └── did_sync_user_<name>.priv Private key (mode 0600), named after your `actor` value
├── logs/ Workspace logs (populated on first start)
├── run/ PID file + Unix socket (populated on first start)
├── secrets/ API keys for upstream providers (empty until you add)
└── hub.db Main record store (created at init; grows from first start)On Windows, the same tree lives under %USERPROFILE%\.syncro\.
Your identity
spl init generates a did:key-format identity and writes it into config.toml:
[identity]
actor = "did:sync:user:you"
did = "did:key:z6Mk..."
method = "key"
key_path = "/home/you/.syncro/keys/primary"actoris the human-readable name you'll see attached to every record you emit. It defaults todid:sync:user:<your-username>, the same username your OS reports.didis the cryptographic identity. A fresh keypair is generated and the public half becomes thedid:key:string. The private half is stored under~/.syncro/keys/(named after youractorvalue) with mode0600.methodnames the identity method (keyon a fresh install;weborsyncafter an upgrade).key_pathpoints at the keypair the workspace signs with.
Inspect the result:
spl identity showExpected output:
Identity:
DID: did:key:z6Mk...
Method: key
Key path: /home/you/.syncro/keys/primary
Actor: did:sync:user:youInspecting config.toml
cat ~/.syncro/config.tomlThe default file is small, tens of lines. The blocks you'll see:
[identity]: the identity and keypair above.[server]: bind address (127.0.0.1), port (9100), data dir, backup dir.[intelligence]: which language model your workspace uses, and your own provider key. On a local workspace you will need this; see the note below.[fleet]: advertised endpoint for fleet mode (not relevant for single-machine use).
A local workspace has no model until you give it a key
A hosted workspace arrives with managed model access (free plans include a
one-time inference allowance). A workspace on your own
machine does not: the assistant is installed by the preset but has nothing to
answer with until you supply a provider key. Run
spl config set-key anthropic <your key>, then spl stop and
spl serve --daemon. Until then the assistant is silent, and spl run says
so rather than failing quietly.
The assistant and the first question (self-host)
Every preset except blank installs the chief of staff (the chief), the
member that answers when you type in a thread, and seeds the one question a
fresh workspace asks: "What are you working on?" Answering it opens your first
thread, titled by your words. Your first hour
walks through it.
A blank workspace starts deliberately empty: nothing answers and nothing is
asked until you choose what runs on it. To add the assistant later:
spl blueprint plan <blueprint.json> # review what it installs, get the plan hash
spl blueprint install <blueprint.json> --accept-plan <hash> # any time, on an already-initialized workspaceThe source repository ships the chief-of-staff blueprint together with an install script that signs, plans and installs it; see Blueprints for the verbs.
Installing the chief later does not add the question; it only ever seeds when the workspace is first configured with a preset. On a blank workspace, open your first thread yourself. If you initialized blank and the assistant seems silent, this is why, and nothing is broken.
Workspaces before v0.216 had a separate built-in assistant, configured with
spl config scribe. That verb is gone: the conversational default is now an
ordinary member, defined by a blueprint like any other, so what answers you is
something you can read, change and replace. Old configuration records are still
readable as history.
(Hosted workspaces come with the assistant already on.)
Editing config.toml by hand is supported. Changes take effect on the next start. For runtime config (routing rules, permissions, embedding providers), use spl config … commands instead: those changes hot-reload without a restart.
When to re-initialize
Almost never. spl init is a one-time operation; running it again against an existing ~/.syncro/ is a no-op unless you pass --force:
spl init --force--force overwrites config.toml and regenerates the keypair. The existing hub.db is left alone: your records survive. But the new keypair will sign records under the same actor value as before, which means verification of old records against the new public key will fail. For practical purposes, --force is only appropriate on a machine that has never been used for real work.
If you want a fully clean state (new identity and new data), see Reset and uninstall.
Identity types
This machine's own identity (the default)
What spl init creates: an identity whose private key lives on this one machine. If you set up another machine the same way, it gets its own, separate identity. This is the right default for a single-machine installation.
Note this is different from signing in on the web or to a hosted workspace: there, your content is owned by your sign-in identity, which is the same on every device. See Your identity & recovery for how that works.
One identity across your machines
For machines you maintain yourself, master identity mode gives every device the same root identity: each machine's key is derived from one root you hold, and a 24-word recovery phrase can rebuild it anywhere. Start a fresh install with:
spl init --masterMaster mode is an init-time decision: there is no migration from a
per-machine identity to master mode later. (spl identity upgrade does
something different: it moves an existing identity to a more capable
identity method, key to web or sync, and the identity itself stays
the same.)
Either way, portability is optional: you can run Syncropel for years on a
single machine without it.
Permissions
After spl init:
ls -la ~/.syncro/ ~/.syncro/keys/Verify:
~/.syncro/config.tomlis never world-writable.- The private key under
~/.syncro/keys/is mode0600. ~/.syncro/token(once created) is mode0600.
The directory itself is created with your OS's default permissions; the
secrets inside it (keys, tokens) carry their own 0600. If anything looks
off, spl doctor will flag it with the exact chmod fix.
See also
- Your first hour: what the workspace does once it is running, and the first things to do
- Pairing a browser or phone: get a second device onto the same workspace
spl doctor: audit your~/.syncro/state at any time- Quickstart: five-minute happy path if you haven't done it yet
Windows Notes
Platform-specific guidance for Windows, covering WSL gotchas, Windows Defender, Windows Firewall, user-scope PATH, and long path names.
Your first hour
What a fresh workspace does the moment it exists, hosted or local. One question is waiting on you, answering it opens your first thread, the assistant answers there, and there are four useful things to do next.