- Detached means unattached but still running
- Attached means a human client is currently connected to the session terminal
- Exited means the supervisor has recorded a final exit code
Core Commands
| Command | Purpose |
|---|---|
nono ps | List live sessions by default, or include exited sessions with --all |
nono attach <id> | Connect to a live session terminal |
nono detach <id> | Drop the current terminal attachment without stopping the session |
nono stop <id> | Ask the supervisor to terminate the session cleanly |
nono inspect <id> | Show session metadata and current state |
nono prune | Remove old session records from the local registry |
Session States
Each supervised session has two pieces of runtime state:- Lifecycle state:
running,paused, orexited - Attachment state:
attachedordetached
running + attachedrunning + detachedexited
paused is not the default detached behavior. It is an exceptional state, not the normal runtime model.
How Sessions Start
Attached Start
Detached Start
Inspecting Live Sessions
Usenono ps to see active sessions:
--all to include exited sessions:
--json for automation:
Attaching and Detaching
Attach to a Live Session
Detach Without Stopping the Session
You can detach in two ways:~/.config/nono/config.toml:
d or x,
named keys esc, tab, enter, space, and control chords like ctrl-] or ctrl-a.
The sequence must contain at least two key presses to avoid accidental detach.
Detaching only disconnects the client. It does not stop the supervisor or the sandboxed process.
Stopping a Session
Usenono stop when you want the session to terminate cleanly:
SIGTERM to the supervisor, waits for cleanup, then escalates to SIGKILL after the timeout.
- final session state update
- rollback finalization
- audit/session shutdown
- PTY/socket cleanup
Inspecting a Session
Usenono inspect when you want the full record for one session:
- session id
- name
- status
- attachment state
- child and supervisor pids
- start time
- command
- profile
- workdir
- network mode
- rollback session id, when present
Pruning Old Session Records
Exited sessions stay in the registry until you remove them. Usenono prune to clean them up:
nono prune currently skips sessions in running state and removes exited sessions. paused sessions are treated more conservatively elsewhere in the runtime than they are here, so do not use prune as a maintenance step for paused/stopped sessions until that behavior is tightened.
Common Workflows
Start Detached, Check Back Later
Use this when you want an agent to keep running while you do something else:Start Attached, Detach When You Need Your Terminal Back
Use this when you want to watch the first phase of the run, then leave it working:~/.config/nono/config.toml, use your configured keys
instead.
Or from another terminal:
Find a Broken Session and Reattach for Debugging
If an agent run misbehaves but is still alive:Stop a Session Cleanly
If the agent is no longer useful or has wedged:nono stop over killing the child directly, because the supervisor is responsible for state cleanup.
Rollback Pairing
Detached sessions are especially useful when combined with rollback:- the agent can keep running while no terminal is attached
- if the session goes astray, you still have a rollback session available for review and restore
- Start detached with rollback enabled
- Let the agent work unattended
- Reattach only when you need to inspect, guide, or debug
- Use rollback review/restore if the resulting changes are wrong
Approval Semantics While Detached
Detached does not mean “run completely unchecked”. If a session reaches an approval boundary:- with an attached operator, approval can be handled interactively
- without an attached operator, the session should not auto-grant
- detachment itself does not pause the session
- approval waiting may pause forward progress for that specific request
Local Attach Security Model
Current attach is local-only and same-user only. The supervisor protects attach with:- a private session registry directory
- owner-only attach socket permissions
- kernel peer-credential checks on every accepted attach socket
- another local user should not be able to attach to your session
- another process running as your same uid is still inside your local trust boundary