mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-15 09:01:17 +00:00
* feat: add configuration for model, mode, and thought level
* docs: document Claude effort-level filesystem config
* fix: prevent panic on empty modes/thoughtLevels in parse_agent_config
Use `.first()` with safe fallback instead of direct `[0]` index access,
which would panic if the Vec is empty and no default is set.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: harden session lifecycle and align cli.mdx example with claude.json
- destroySession: wrap session/cancel RPC in try/catch so local cleanup
always succeeds even when the agent is unreachable
- createSession/resumeOrCreateSession: clean up the remote session if
post-creation config calls (setMode/setModel/setThoughtLevel) fail,
preventing leaked orphan sessions
- cli.mdx: fix example output to match current claude.json (model name,
model order, and populated modes)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: harden session lifecycle and align config persistence logic
- resumeOrCreateSession: Remove destroy-on-error for the resume path. Config
errors now propagate without destroying a pre-existing session. The destroy
pattern remains in createSession (where the session is newly created and has
no prior state to preserve).
- setSessionMode fallback: When session/set_mode returns -32601 and the
fallback uses session/set_config_option, now keep modes.currentModeId
in sync with the updated currentValue. Prevents stale cached state in
getModes() when the fallback path is used.
- persistSessionStateFromMethod: Re-read the record from persistence instead
of using a stale pre-await snapshot. Prevents race conditions where
concurrent session/update events (processed by persistSessionStateFromEvent)
are silently overwritten by optimistic updates.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
* fix: correct doc examples with valid Codex modes and update stable API list
- Replace invalid Codex mode values ("plan", "build") with valid ones
("auto", "full-access") in agent-sessions.mdx and sdk-overview.mdx
- Update CLAUDE.md stable method enumerations to include new session
config methods (setSessionMode, setSessionModel, etc.)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add OpenAPI annotations for process endpoints and fix config persistence race
Add summary/description to all process management endpoint specs and the
not_found error type. Fix hydrateSessionConfigOptions to re-read from
persistence after the network call, and sync mode-category configOptions
on session/update current_mode_update events.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
133 lines
2.7 KiB
Text
133 lines
2.7 KiB
Text
---
|
|
title: "Agent Sessions"
|
|
description: "Create sessions, prompt agents, and inspect event history."
|
|
sidebarTitle: "Sessions"
|
|
icon: "comments"
|
|
---
|
|
|
|
Sessions are the unit of interaction with an agent. Create one session per task, send prompts, and consume event history.
|
|
|
|
For SDK-based flows, sessions can be restored after runtime/session loss when persistence is enabled.
|
|
See [Session Restoration](/session-restoration).
|
|
|
|
## Create a session
|
|
|
|
```ts
|
|
import { SandboxAgent } from "sandbox-agent";
|
|
|
|
const sdk = await SandboxAgent.connect({
|
|
baseUrl: "http://127.0.0.1:2468",
|
|
});
|
|
|
|
const session = await sdk.createSession({
|
|
agent: "codex",
|
|
sessionInit: {
|
|
cwd: "/",
|
|
mcpServers: [],
|
|
},
|
|
});
|
|
|
|
console.log(session.id, session.agentSessionId);
|
|
```
|
|
|
|
## Send a prompt
|
|
|
|
```ts
|
|
const response = await session.prompt([
|
|
{ type: "text", text: "Summarize the repository structure." },
|
|
]);
|
|
|
|
console.log(response.stopReason);
|
|
```
|
|
|
|
## Subscribe to live events
|
|
|
|
```ts
|
|
const unsubscribe = session.onEvent((event) => {
|
|
console.log(event.eventIndex, event.sender, event.payload);
|
|
});
|
|
|
|
await session.prompt([
|
|
{ type: "text", text: "Explain the main entrypoints." },
|
|
]);
|
|
|
|
unsubscribe();
|
|
```
|
|
|
|
## Fetch persisted event history
|
|
|
|
```ts
|
|
const page = await sdk.getEvents({
|
|
sessionId: session.id,
|
|
limit: 50,
|
|
});
|
|
|
|
for (const event of page.items) {
|
|
console.log(event.id, event.createdAt, event.sender);
|
|
}
|
|
```
|
|
|
|
## List and load sessions
|
|
|
|
```ts
|
|
const sessions = await sdk.listSessions({ limit: 20 });
|
|
|
|
for (const item of sessions.items) {
|
|
console.log(item.id, item.agent, item.createdAt);
|
|
}
|
|
|
|
if (sessions.items.length > 0) {
|
|
const loaded = await sdk.resumeSession(sessions.items[0]!.id);
|
|
await loaded.prompt([{ type: "text", text: "Continue." }]);
|
|
}
|
|
```
|
|
|
|
## Configure model, mode, and thought level
|
|
|
|
Set the model, mode, or thought level on a session at creation time or after:
|
|
|
|
```ts
|
|
// At creation time
|
|
const session = await sdk.createSession({
|
|
agent: "codex",
|
|
model: "gpt-5.3-codex",
|
|
mode: "auto",
|
|
thoughtLevel: "high",
|
|
});
|
|
```
|
|
|
|
```ts
|
|
// After creation
|
|
await session.setModel("gpt-5.2-codex");
|
|
await session.setMode("full-access");
|
|
await session.setThoughtLevel("medium");
|
|
```
|
|
|
|
Query available modes:
|
|
|
|
```ts
|
|
const modes = await session.getModes();
|
|
console.log(modes?.currentModeId, modes?.availableModes);
|
|
```
|
|
|
|
### Advanced config options
|
|
|
|
For config options beyond model, mode, and thought level, use `getConfigOptions` to discover what the agent supports and `setConfigOption` to set any option by ID:
|
|
|
|
```ts
|
|
const options = await session.getConfigOptions();
|
|
for (const opt of options) {
|
|
console.log(opt.id, opt.category, opt.type);
|
|
}
|
|
```
|
|
|
|
```ts
|
|
await session.setConfigOption("some-agent-option", "value");
|
|
```
|
|
|
|
## Destroy a session
|
|
|
|
```ts
|
|
await sdk.destroySession(session.id);
|
|
```
|
|
|