Sessions & resume
Every conversation is saved as a session, so you can close the terminal and pick up later with the full history. Sessions belong to the folder you started them in.
Pick up where you were
| Command | Opens |
|---|---|
syntic --continue (-c) | The latest session in this folder. |
syntic --resume (-r) | In a terminal, the session picker opens inside the app. In scripts, with -p, --all-projects or --fork-session, a list of this folder’s sessions is printed instead (--all-projects lists every folder’s). |
syntic --resume <id> | That session. A name you gave it with -n works too. |
syntic --from-pr 123 | The session that opened pull request 123 (number or URL). |
/resume (also /continue) inside a session | The same picker. Type to filter; paste a pull request link to find the session behind it. |
The picker shows each session’s name (or its first prompt), when it ran and where. Press Tab to switch between this folder and all folders, Ctrl+R to rename, Ctrl+D to delete.
When you quit, Syntic Code prints the exact command to come back:
Resume this session with: syntic --resume 7f3c2a90-…A session that was compacted resumes from its latest summary plus the messages after it, so it starts quickly even after a long day. The full history stays in the saved transcript.
After a crash
If Syntic Code (or your computer) stops in the middle of a tool call, the session can still be resumed, and it tells you honestly what it knows. Before a tool starts, Syntic Code writes a line to the session’s operations journal (operations.jsonl, readable only by you); it records each step as prepared, approved, running, then finished.
When you resume:
| The call was | It is answered with |
|---|---|
| Running when the session stopped | Outcome unknown: what is known about the call (tool, target, kind of action), and a note to the agent to check the current state before repeating anything that cannot safely run twice, such as a git push, a deploy, a payment or a database migration. |
| Prepared or approved but not started | Not run: the session ended before this call was started, so it had no effect. |
| Read-only (a read or a search) | Nothing special; it is safe to just do again. |
Nothing is ever re-run for you on resume. Resuming the same session a second time reports nothing new.
Damaged session files
A saved session can be damaged, for example by a disk filling up or two programs writing at once. Syntic Code keeps going instead of failing:
- On resume, it continues from the longest intact part of the history and prints one
warning:line saying what was wrong. Nothing is deleted. - A file it could not read is set aside as a
.corruptcopy, so you can look inside it later.
syntic doctor (section Saved sessions (this project)) and /doctor (also /checkup) list every damaged session and every set-aside copy for this project, each with its path and what to do: resume it with syntic --resume <id>, or delete the folder to discard it. A clean project shows “no damaged session files”.
Name your sessions
Names make the picker much easier to scan.
| How | Example |
|---|---|
| At start | syntic -n "billing retry bug" |
| During | /rename billing retry bug |
| Let the model name it | /rename with no title |
Sessions you do not name get an automatic title from their first messages.
Branch off
Explore another idea and keep the current path intact:
| Command | Does |
|---|---|
/branch [name] (also /fork) | Copies this conversation into a new session and continues there. The original stays untouched. |
/branch --bg <task> | Runs the copy in the background on <task>. |
syntic --resume <id> --fork-session | Resumes under a fresh id; the old one is left as it was. |
/background <task> (also /bg) | Hands <task> to a background session that continues from this conversation, while you keep working here. |
Start fresh
/clear starts a new, empty conversation in the same terminal. The previous one is saved and stays resumable; /clear <name> gives it a name on the way out.
Go back in time
- Undo the last turn:
/rollback. - Rewind to any earlier message, optionally restoring files too:
EscEscon an empty prompt, or/rewind. See Checkpoints & rewind. - Resume from an earlier point:
syntic --resume <id> --resume-session-at <message-id or N>keeps the transcript up to that message (or the firstNmessages) and continues from there. Files on disk are not changed. - Restore files only:
syntic --resume <id> --rewind-files <message-id>puts the files back to how they were before that message and exits.
Share or keep a copy
| Command | Writes |
|---|---|
/export | The conversation as Markdown, JSON or plain text (you choose). |
/share [file] | A Markdown copy for sharing, with likely secrets masked and your home folder shown as ~. Saved to ~/.syntic/shared/ unless you name a file. Nothing is uploaded. |
/copy | The last reply to your clipboard. |
To find the conversation behind a commit later, set "commitSessionTrailer": true. Commits Syntic Code makes then end with a Syntic-Session: <id> line you can pass to --resume.
Messages from other sessions
Your other open sessions (and their agents) can send this one a message; see Messaging between sessions for how to send one. What happens to a message that arrives depends on crossSessionInbound in your settings:
| Value | Behavior |
|---|---|
ask (default) | The message waits for you to choose Run, Reply or Dismiss. |
auto | It runs as your next prompt. |
refuse | It is dropped and the sender is told it was refused. |
dialogExpiry (seconds) dismisses a waiting message if you do not answer in time. While permission prompts are bypassed, messages always wait for you.
Open a session from a link
A syntic-cli://open?q=<text> link opens a session with the prompt already typed in, so runbooks and alerts can hand you a ready-made task. Nothing is sent until you press Enter. See Open a session from a link.
Where sessions are stored
Transcripts are saved in your system’s application data folder (on macOS, ~/Library/Application Support/ai.syntic.syntic/projects/), one folder per project, readable only by you. Change the location with SYNTIC_DATA_DIR.
| To | Use |
|---|---|
| Save nothing for one run | syntic --no-session-persistence |
| Delete transcripts older than N days automatically | "cleanupPeriodDays": N |
Keep prompts out of ↑ history | SYNTIC_SKIP_PROMPT_HISTORY=1 |
| Remove everything stored about one project (sessions, MCP approvals, folder trust) | syntic project purge [path] (--dry-run to preview) |
Running a session in the background, so it keeps going after you close the terminal, is covered in Background sessions.