Session Persistence
Sessions survive restarts
By default, stopping and restarting the OpenACP daemon would lose track of all active sessions — their IDs, which agent was running, which Telegram topic or Discord thread they were attached to. Session persistence solves this by writing session records to disk as they are created and updated.
When the daemon restarts, it reloads all stored records. Sessions that were active before the restart are shown in their previous state. You can resume sending prompts to an agent session that survived a restart as long as the underlying agent process is still alive or can be reconnected.
Storage location
Session records are stored in ~/.openacp/sessions.json. The file format is:
{
"version": 1,
"sessions": {
"<sessionId>": { ... }
}
}Writes are debounced (2-second delay) to avoid excessive disk I/O during rapid session updates. The file is flushed synchronously on SIGTERM, SIGINT, and process exit.
If the file is unreadable on startup (corrupt JSON, wrong version), OpenACP logs the error and starts with an empty session map rather than crashing.
What is persisted
Each session record stores:
sessionId
Unique OpenACP session ID
agentSessionId
ID assigned by the agent subprocess (ACP session ID)
originalAgentSessionId
Agent session ID before the most recent handoff or restore
channelId
Which adapter owns this session (telegram, discord, etc.)
agentName
Name of the agent (e.g. claude, gemini)
workingDirectory
Filesystem path the agent is working in
status
initializing, active, idle, finished, error
name
Display name auto-assigned after the first prompt
threadId
Platform thread or topic ID (e.g. Telegram forum topic ID)
platform
Adapter-specific metadata (e.g. Telegram chat ID)
createdAt
ISO timestamp when the session was created
lastActiveAt
ISO timestamp of the most recent activity
TTL cleanup
Old session records are pruned automatically. By default, records that have not been active for 30 days are removed. Active and initializing sessions are never pruned regardless of age.
Configure the TTL in ~/.openacp/config.json:
Cleanup runs on startup and then every 24 hours for long-running instances.
Resuming after a restart
After restarting the daemon:
OpenACP reloads
sessions.jsonand restores all session records.Adapter-specific state (e.g. Telegram topic IDs) is re-associated from the
platformmetadata.Sessions that were
activeorinitializingbefore the restart are visible again in your messaging app.Sending a new message to an existing session topic reconnects to the agent process or creates a new agent session linked to the same record.
If the agent process did not survive the restart, the session transitions to error state and you will see an error notification in the topic. Create a new session or use /resume to continue work in a fresh session with history attached.
Last updated
Was this helpful?
