Programmatic usage of omp-coding-agent via createAgentSession().
| File | Description |
|---|---|
01-minimal.ts |
Simplest usage with all defaults |
02-custom-model.ts |
Select model and thinking level |
03-custom-prompt.ts |
Replace or modify system prompt |
04-skills.ts |
Discover, filter, or replace skills |
05-tools.ts |
Built-in tools, custom tools |
06-hooks.ts |
Logging, blocking, result modification |
07-context-files.ts |
AGENTS.md context files |
08-slash-commands.ts |
File-based slash commands |
09-api-keys-and-oauth.ts |
API key resolution, OAuth config |
10-settings.ts |
Override compaction, retry, terminal settings |
11-sessions.ts |
In-memory, persistent, continue, list sessions |
12-full-control.ts |
Replace everything, no discovery |
cd packages/coding-agent
npx tsx examples/sdk/01-minimal.tsimport { getModel } from "@oh-my-pi/pi-ai";
import {
AuthStorage,
createAgentSession,
discoverAuthStorage,
discoverModels,
discoverSkills,
discoverHooks,
discoverCustomTools,
discoverContextFiles,
discoverSlashCommands,
loadSettings,
buildSystemPrompt,
ModelRegistry,
SessionManager,
BUILTIN_TOOLS,
HIDDEN_TOOLS,
createTools,
ResolveTool,
} from "@oh-my-pi/pi-coding-agent";
// Auth and models setup
const authStorage = discoverAuthStorage();
const modelRegistry = discoverModels(authStorage);
// Minimal
const { session } = await createAgentSession({ authStorage, modelRegistry });
// Custom model
const model = getModel("anthropic", "claude-opus-4-5");
const { session } = await createAgentSession({ model, thinkingLevel: "high", authStorage, modelRegistry });
// Modify prompt
const { session } = await createAgentSession({
systemPrompt: (defaultPrompt) => defaultPrompt + "\n\nBe concise.",
authStorage,
modelRegistry,
});
// Read-only tools
const { session } = await createAgentSession({ toolNames: ["read", "grep", "find", "ls"], authStorage, modelRegistry });
// In-memory
const { session } = await createAgentSession({
sessionManager: SessionManager.inMemory(),
authStorage,
modelRegistry,
});
// Full control
const customAuth = await AuthStorage.create("/my/app/agent.db");
customAuth.setRuntimeApiKey("anthropic", Bun.env.MY_KEY!);
const customRegistry = new ModelRegistry(customAuth);
const { session } = await createAgentSession({
model,
authStorage: customAuth,
modelRegistry: customRegistry,
systemPrompt: "You are helpful.",
toolNames: ["read", "bash"],
customTools: [{ tool: myTool }],
hooks: [{ factory: myHook }],
skills: [],
contextFiles: [],
slashCommands: [],
sessionManager: SessionManager.inMemory(),
});
// Run prompts
session.subscribe((event) => {
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
process.stdout.write(event.assistantMessageEvent.delta);
}
});
await session.prompt("Hello");ast_edit now always returns a preview. To finalize, call hidden resolve with a required reason.
action: "apply"→ commit pending preview changesaction: "discard"→ drop pending preview changesreason: stringis required for both paths
createAgentSession() / createTools() include resolve automatically, even when filtering toolNames.
If you are composing tools manually, use HIDDEN_TOOLS.resolve (or ResolveTool) and wire the same pendingActionStore.
const tools = await createTools(toolSession, ["ast_edit"]); // resolve is auto-included
const resolveTool = tools.find(t => t.name === "resolve") as ResolveTool;
await resolveTool.execute("call-1", {
action: "apply",
reason: "Preview matches expected replacements",
});| Option | Default | Description |
|---|---|---|
authStorage |
discoverAuthStorage() |
Credential storage |
modelRegistry |
discoverModels(authStorage) |
Model registry |
cwd |
process.cwd() |
Working directory |
agentDir |
~/.omp/agent |
Config directory |
model |
From settings/first available | Model to use |
thinkingLevel |
From settings/"off" | off, low, medium, high |
systemPrompt |
Discovered | String or (default) => modified |
toolNames |
All built-in tools | Filter which tools to include |
customTools |
Discovered | Replaces discovery |
additionalCustomToolPaths |
[] |
Merge with discovery |
hooks |
Discovered | Replaces discovery |
additionalHookPaths |
[] |
Merge with discovery |
skills |
Discovered | Skills for prompt |
contextFiles |
Discovered | AGENTS.md files |
slashCommands |
Discovered | File commands |
sessionManager |
SessionManager.create(cwd) |
Persistence |
settingsManager |
From agentDir | Settings overrides |
session.subscribe((event) => {
switch (event.type) {
case "message_update":
if (event.assistantMessageEvent.type === "text_delta") {
process.stdout.write(event.assistantMessageEvent.delta);
}
break;
case "tool_execution_start":
console.log(`Tool: ${event.toolName}`);
break;
case "tool_execution_end":
console.log(`Result: ${event.result}`);
break;
case "agent_end":
console.log("Done");
break;
}
});