praxis-agent 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -94,8 +94,9 @@ troubleshooting. Run `praxis --help` for the authoritative command surface.
94
94
  `/background` terminal handoff, unified `/status`/`/config`/`/usage` settings
95
95
  tabs, `/sandbox` mode/dependency/override/config controls, local cached
96
96
  `/release-notes`, Claude-compatible `/statusline` command execution and setup
97
- agent, `/mcp`, `/memory` shared instruction and auto-memory access, and live
98
- extension-reload controls,
97
+ agent, source-aligned `/init` project-instruction onboarding with its enhanced
98
+ skills/hooks flow, `/mcp`, `/memory` shared instruction and auto-memory
99
+ access, and live extension-reload controls,
99
100
  cursor/history composer, per-session model/effort/permission controls,
100
101
  context/status/skill/task dashboards, prompt stash and continuation shortcuts,
101
102
  filterable `@` file and agent references, composer undo, `Ctrl+G` external
@@ -136,7 +137,9 @@ troubleshooting. Run `praxis --help` for the authoritative command surface.
136
137
  workspace-directory add/remove controls, path confinement, credential
137
138
  redaction, and sanitized child processes.
138
139
  - **Durable local work** — resumable sessions, full-history forks, file
139
- checkpoints, tasks, foreground/background subagents, and top-level agents.
140
+ checkpoints, tasks, foreground/background subagents, top-level agents, and
141
+ Claude-compatible main-thread agent definitions with native prompt, model,
142
+ tool, memory, first-turn, and resume behavior.
140
143
  - **Claude-compatible ecosystem** — shared instructions with recursive `@`
141
144
  imports, memory, skills, commands, agents, hooks, settings, MCP servers,
142
145
  plugins, and transcript data.
@@ -184,8 +187,9 @@ for exact shared data, version boundaries, exclusions, and verification gates.
184
187
 
185
188
  Praxis targets one local OS user working across multiple repositories and
186
189
  sessions. It is CLI-only and provider-capability-aware. Organization, tenant,
187
- RBAC, billing, enterprise gateway, IDE, Chrome, Remote Control, Claude Desktop
188
- import, and hosted review-product surfaces are permanent non-goals.
190
+ RBAC, subscription authentication and billing, enterprise gateway,
191
+ IDE/Desktop/mobile clients, Remote Control, Claude Desktop import, and hosted
192
+ review-product surfaces are permanent non-goals.
189
193
 
190
194
  ## Security and support
191
195
 
@@ -24,6 +24,7 @@ export interface ClaudeSessionServiceOptions {
24
24
  tools?: ToolRegistry;
25
25
  permissions?: PermissionResolver;
26
26
  permissionResolverForMode?: (mode: AgentPermissionMode) => PermissionResolver;
27
+ permissionMode?: ClaudePermissionMode;
27
28
  persistPermissionUpdates?: (updates: readonly PermissionUpdate[]) => void | Promise<void>;
28
29
  approveTool?: (call: ModelToolCall, originalCall?: ModelToolCall, decision?: PermissionDecision) => PermissionApproval | Promise<PermissionApproval>;
29
30
  approveRecovery?: (call: ModelToolCall) => boolean | Promise<boolean>;
@@ -43,6 +44,11 @@ export interface ClaudeSessionServiceOptions {
43
44
  enableDynamicWakeups?: boolean;
44
45
  enableWorkflows?: boolean;
45
46
  providerForModel?: (model: string) => ModelProvider;
47
+ providerForMainModel?: (model: string) => ModelProvider;
48
+ explicitModel?: boolean;
49
+ explicitSystemPrompt?: boolean;
50
+ agentInitialPromptHandledExternally?: boolean;
51
+ agentSystemPromptOverridesExplicit?: boolean;
46
52
  effort?: string;
47
53
  maxModelTurns?: number;
48
54
  betas?: readonly string[];
@@ -149,6 +155,7 @@ export declare class ClaudeSessionService {
149
155
  private readonly hostedSubagentsByRegistry;
150
156
  private readonly backgroundNotificationWrites;
151
157
  private readonly downloadedFileResourceSessions;
158
+ private activeProvider;
152
159
  private mcpClosePromise;
153
160
  private runtimeCwd;
154
161
  constructor(options: ClaudeSessionServiceOptions);
@@ -221,6 +228,11 @@ export declare class ClaudeSessionService {
221
228
  private assertWritable;
222
229
  private sessionStatus;
223
230
  private provider;
231
+ model(): string | undefined;
232
+ private providerForAgent;
233
+ private resolveAgent;
234
+ private mainAgentSystemPrompt;
235
+ private assembledSystemMessages;
224
236
  private contextBudget;
225
237
  private append;
226
238
  private logicalTailUuid;
@@ -22,7 +22,7 @@ import { ClaudeHookToolCoordinator } from '../hooks/claude-hook-tools.js';
22
22
  import { ClaudeTranscriptStore, } from '../persistence/claude-transcript-store.js';
23
23
  import { InMemoryTranscriptStore } from '../persistence/in-memory-transcript-store.js';
24
24
  import { ModelCompactor } from './model-compactor.js';
25
- import { ClaudeSubagentExecutor, StructuredOutputRegistry, } from './subagent-service.js';
25
+ import { agentMemoryPrompt, ClaudeSubagentExecutor, StructuredOutputRegistry, } from './subagent-service.js';
26
26
  import { ScheduledPromptManager } from './scheduled-prompt-manager.js';
27
27
  import { ClaudeScheduledToolRegistry } from '../tools/claude-scheduled-tools.js';
28
28
  import { ClaudeTaskToolRegistry } from '../tools/claude-task-tools.js';
@@ -30,8 +30,29 @@ import { ClaudeWorkflowToolRegistry } from '../tools/claude-workflow-tools.js';
30
30
  import { WorkflowManager, } from './workflow-manager.js';
31
31
  import { SessionWorktreeManager } from './session-worktree.js';
32
32
  import { ClaudeWorktreeToolRegistry } from '../tools/claude-worktree-tools.js';
33
+ import { FilteredToolRegistry } from '../tools/filtered-tool-registry.js';
33
34
  import { generateToolUseSummary } from './tool-use-summary.js';
34
35
  import { ClaudeUserMessageToolRegistry, CLAUDE_USER_MESSAGE_PROMPT, } from '../tools/claude-user-message.js';
36
+ function agentPermissionMode(mode) {
37
+ return mode === undefined || mode === 'manual' ? 'default' : mode;
38
+ }
39
+ function agentToolName(rule) {
40
+ const opening = rule.indexOf('(');
41
+ return (opening < 0 ? rule : rule.slice(0, opening)).trim();
42
+ }
43
+ function mainAgentToolNames(tools, agent) {
44
+ const requested = agent.tools ? new Set(agent.tools.map(agentToolName)) : null;
45
+ if (requested && agent.memory) {
46
+ requested.add('Read');
47
+ requested.add('Edit');
48
+ requested.add('Write');
49
+ }
50
+ const disallowed = new Set(agent.disallowedTools?.map(agentToolName) ?? []);
51
+ return tools
52
+ .definitions()
53
+ .map(({ name }) => name)
54
+ .filter((name) => (!requested || requested.has(name)) && !disallowed.has(name));
55
+ }
35
56
  const emptyToolRegistry = {
36
57
  definitions: () => [],
37
58
  prepare: async (call) => call,
@@ -97,6 +118,7 @@ export class ClaudeSessionService {
97
118
  hostedSubagentsByRegistry = new WeakMap();
98
119
  backgroundNotificationWrites = new Map();
99
120
  downloadedFileResourceSessions = new Set();
121
+ activeProvider;
100
122
  mcpClosePromise;
101
123
  runtimeCwd;
102
124
  constructor(options) {
@@ -127,6 +149,12 @@ export class ClaudeSessionService {
127
149
  : {}),
128
150
  })
129
151
  : null;
152
+ const configuredAgent = options.agent
153
+ ? (options.extensions?.agent(options.agent) ?? null)
154
+ : null;
155
+ if (configuredAgent && options.provider) {
156
+ this.activeProvider = this.providerForAgent(configuredAgent);
157
+ }
130
158
  }
131
159
  nextScheduledPrompt(signal) {
132
160
  return this.scheduledPrompts?.next(signal) ?? Promise.resolve(null);
@@ -240,12 +268,15 @@ export class ClaudeSessionService {
240
268
  permissionResolverForMode: this.options.permissionResolverForMode,
241
269
  }
242
270
  : {}),
271
+ parentPermissionMode: () => agentPermissionMode(this.options.interactiveTools?.mode(sessionId) ??
272
+ this.options.permissionMode),
243
273
  ...(this.options.subagentToolNames
244
274
  ? { toolNames: this.options.subagentToolNames }
245
275
  : {}),
246
276
  ...(this.options.extensions
247
277
  ? { extensions: this.options.extensions }
248
278
  : {}),
279
+ ...(this.options.mcp ? { mcp: this.options.mcp } : {}),
249
280
  ...(this.options.hooks ? { hooks: this.options.hooks } : {}),
250
281
  ...(this.options.contextAssembler
251
282
  ? { contextAssembler: this.options.contextAssembler }
@@ -501,7 +532,6 @@ export class ClaudeSessionService {
501
532
  return { agentId, name };
502
533
  }
503
534
  async promptSuggestion(sessionId, signal) {
504
- const provider = this.provider();
505
535
  const loaded = this.options.sessionPersistence === false
506
536
  ? await this.turnStore(sessionId).withLease((lease) => lease.load())
507
537
  : {
@@ -513,20 +543,19 @@ export class ClaudeSessionService {
513
543
  const entries = loaded.value;
514
544
  this.restoreWorktree(entries.entries);
515
545
  const agentName = this.options.agent ?? getClaudeAgentSetting(entries.entries);
516
- const agent = agentName ? this.options.extensions?.agent(agentName) : null;
546
+ const agent = this.resolveAgent(agentName);
547
+ const provider = this.providerForAgent(agent);
548
+ this.activeProvider = provider;
517
549
  const assembledContext = await this.options.contextAssembler?.assemble({
518
550
  cwd: this.activeCwd(),
519
551
  });
552
+ const agentSystem = await this.mainAgentSystemPrompt(agent);
553
+ const assembledSystemMessages = this.assembledSystemMessages(agent, assembledContext?.systemMessages ?? []);
520
554
  const contextMessages = [
521
- ...(assembledContext?.systemMessages ?? []),
522
- ...(agent
523
- ? [
524
- {
525
- role: 'system',
526
- content: `# Agent definition: ${agent.name}\n\n${agent.body}`,
527
- },
528
- ]
555
+ ...(agentSystem
556
+ ? [{ role: 'system', content: agentSystem }]
529
557
  : []),
558
+ ...assembledSystemMessages,
530
559
  ];
531
560
  const messages = [
532
561
  ...contextMessages,
@@ -535,11 +564,16 @@ export class ClaudeSessionService {
535
564
  { role: 'user', content: PROMPT_SUGGESTION_INSTRUCTION },
536
565
  ], assembledContext?.firstUserMessageContext),
537
566
  ];
567
+ const suggestionTools = agent && this.options.tools
568
+ ? new FilteredToolRegistry(this.options.tools, {
569
+ tools: mainAgentToolNames(this.options.tools, agent),
570
+ })
571
+ : this.options.tools;
538
572
  let suggestion = '';
539
573
  for await (const event of provider.complete({
540
574
  messages,
541
575
  ...(provider.capabilities.tools
542
- ? { tools: this.options.tools?.definitions() ?? [] }
576
+ ? { tools: suggestionTools?.definitions() ?? [] }
543
577
  : {}),
544
578
  ...(this.options.effort ? { effort: this.options.effort } : {}),
545
579
  ...(signal ? { signal } : {}),
@@ -1332,7 +1366,17 @@ export class ClaudeSessionService {
1332
1366
  tail: appendResult.tail,
1333
1367
  };
1334
1368
  }
1335
- const provider = this.provider();
1369
+ const agentName = this.options.agent ?? getClaudeAgentSetting(snapshot.entries);
1370
+ const agent = this.resolveAgent(agentName);
1371
+ const provider = this.providerForAgent(agent);
1372
+ this.activeProvider = provider;
1373
+ const effectivePrompt = !requireExisting &&
1374
+ !skipUserPrompt &&
1375
+ !this.options.agentInitialPromptHandledExternally &&
1376
+ shellCommand === undefined &&
1377
+ agent?.initialPrompt
1378
+ ? `${agent.initialPrompt}\n\n${prompt}`
1379
+ : prompt;
1336
1380
  const initialPricing = this.options.pricing?.resolve(provider.model ?? 'praxis/provider');
1337
1381
  if (this.options.maxBudgetUsd !== undefined && !initialPricing) {
1338
1382
  throw new Error(`Cannot enforce --max-budget-usd: no pricing is configured for model ${provider.model ?? 'praxis/provider'}`);
@@ -1450,12 +1494,15 @@ export class ClaudeSessionService {
1450
1494
  permissionResolverForMode: this.options.permissionResolverForMode,
1451
1495
  }
1452
1496
  : {}),
1497
+ parentPermissionMode: () => agentPermissionMode(this.options.interactiveTools?.mode(sessionId) ??
1498
+ this.options.permissionMode),
1453
1499
  ...(this.options.subagentToolNames
1454
1500
  ? { toolNames: this.options.subagentToolNames }
1455
1501
  : {}),
1456
1502
  ...(this.options.extensions
1457
1503
  ? { extensions: this.options.extensions }
1458
1504
  : {}),
1505
+ ...(this.options.mcp ? { mcp: this.options.mcp } : {}),
1459
1506
  ...(this.options.hooks ? { hooks: this.options.hooks } : {}),
1460
1507
  ...(this.options.contextAssembler
1461
1508
  ? { contextAssembler: this.options.contextAssembler }
@@ -1498,7 +1545,7 @@ export class ClaudeSessionService {
1498
1545
  promptIdForCall: (callId) => currentPromptId ??
1499
1546
  this.promptIdForToolCall(snapshot.entries, callId),
1500
1547
  defaultModel: provider.model ?? 'praxis/provider',
1501
- tokenBudget: workflowTokenTarget(prompt),
1548
+ tokenBudget: workflowTokenTarget(effectivePrompt),
1502
1549
  enabled: true,
1503
1550
  })
1504
1551
  : agentTools;
@@ -1575,9 +1622,14 @@ export class ClaudeSessionService {
1575
1622
  const structuredCapture = this.options.structuredOutputSchema
1576
1623
  ? { calls: 0, value: undefined }
1577
1624
  : undefined;
1578
- const structuredTools = this.options.structuredOutputSchema && structuredCapture
1579
- ? new StructuredOutputRegistry(fileHistoryTools ?? this.options.tools ?? emptyToolRegistry, this.options.structuredOutputSchema, structuredCapture)
1625
+ const agentScopedTools = agent && fileHistoryTools
1626
+ ? new FilteredToolRegistry(fileHistoryTools, {
1627
+ tools: mainAgentToolNames(fileHistoryTools, agent),
1628
+ })
1580
1629
  : fileHistoryTools;
1630
+ const structuredTools = this.options.structuredOutputSchema && structuredCapture
1631
+ ? new StructuredOutputRegistry(agentScopedTools ?? this.options.tools ?? emptyToolRegistry, this.options.structuredOutputSchema, structuredCapture)
1632
+ : agentScopedTools;
1581
1633
  const hookTools = this.options.hooks && structuredTools && turnPermissions
1582
1634
  ? new ClaudeHookToolCoordinator({
1583
1635
  tools: structuredTools,
@@ -1768,14 +1820,8 @@ export class ClaudeSessionService {
1768
1820
  inputTokens: usage.inputTokens + (result.usage?.inputTokens ?? 0),
1769
1821
  outputTokens: usage.outputTokens + (result.usage?.outputTokens ?? 0),
1770
1822
  }), { inputTokens: 0, outputTokens: 0 });
1771
- const agentName = this.options.agent ?? getClaudeAgentSetting(snapshot.entries);
1772
- const agent = agentName
1773
- ? this.options.extensions?.agent(agentName)
1774
- : null;
1775
- if (agentName && !agent) {
1776
- throw new Error(`Unknown Claude agent ${agentName}`);
1777
- }
1778
1823
  if (this.options.agent &&
1824
+ agent &&
1779
1825
  getClaudeAgentSetting(snapshot.entries) !== this.options.agent) {
1780
1826
  const agentSetting = createClaudeAgentSettingEntry(sessionId, this.options.agent);
1781
1827
  const settingTail = await this.append(lease, snapshot.tail, agentSetting);
@@ -1787,9 +1833,14 @@ export class ClaudeSessionService {
1787
1833
  const assembledContext = await this.options.contextAssembler?.assemble({
1788
1834
  cwd: this.activeCwd(),
1789
1835
  });
1836
+ const agentSystem = await this.mainAgentSystemPrompt(agent);
1837
+ const assembledSystemMessages = this.assembledSystemMessages(agent, assembledContext?.systemMessages ?? []);
1790
1838
  const planModeMessage = this.options.interactiveTools?.contextMessage(sessionId);
1791
1839
  const contextMessages = [
1792
- ...(assembledContext?.systemMessages ?? []),
1840
+ ...(agentSystem
1841
+ ? [{ role: 'system', content: agentSystem }]
1842
+ : []),
1843
+ ...assembledSystemMessages,
1793
1844
  ...(planModeMessage
1794
1845
  ? [{ role: 'system', content: planModeMessage }]
1795
1846
  : []),
@@ -1801,14 +1852,6 @@ export class ClaudeSessionService {
1801
1852
  },
1802
1853
  ]
1803
1854
  : []),
1804
- ...(agent
1805
- ? [
1806
- {
1807
- role: 'system',
1808
- content: `# Agent definition: ${agent.name}\n\n${agent.body}`,
1809
- },
1810
- ]
1811
- : []),
1812
1855
  ...(this.options.structuredOutputSchema
1813
1856
  ? [
1814
1857
  {
@@ -1822,8 +1865,8 @@ export class ClaudeSessionService {
1822
1865
  ? { userMessages: [] }
1823
1866
  : shellCommand === undefined
1824
1867
  ? this.options.extensions
1825
- ? await this.options.extensions.expandPromptAsync(prompt, signal, toolResultDirectory)
1826
- : { userMessages: [prompt] }
1868
+ ? await this.options.extensions.expandPromptAsync(effectivePrompt, signal, toolResultDirectory)
1869
+ : { userMessages: [effectivePrompt] }
1827
1870
  : {
1828
1871
  userMessages: [`<bash-input>${shellCommand}</bash-input>`],
1829
1872
  };
@@ -1864,7 +1907,8 @@ export class ClaudeSessionService {
1864
1907
  : {}),
1865
1908
  }));
1866
1909
  const agentMentionMessages = shellCommand === undefined && !skipUserPrompt
1867
- ? (this.options.extensions?.agentMentionMessages(prompt) ?? [])
1910
+ ? (this.options.extensions?.agentMentionMessages(effectivePrompt) ??
1911
+ [])
1868
1912
  : [];
1869
1913
  const injectAgentMentionContext = (messages) => {
1870
1914
  if (agentMentionMessages.length === 0)
@@ -1875,7 +1919,7 @@ export class ClaudeSessionService {
1875
1919
  const message = messages[index];
1876
1920
  if (message?.role === 'user' &&
1877
1921
  typeof message.content === 'string' &&
1878
- message.content.endsWith(prompt)) {
1922
+ message.content.endsWith(effectivePrompt)) {
1879
1923
  insertionIndex = index;
1880
1924
  foundPrompt = true;
1881
1925
  break;
@@ -2073,7 +2117,7 @@ export class ClaudeSessionService {
2073
2117
  ...hookSession,
2074
2118
  hook_event_name: 'UserPromptSubmit',
2075
2119
  prompt_id: currentPromptId ?? randomUUID(),
2076
- prompt,
2120
+ prompt: effectivePrompt,
2077
2121
  }, undefined, signal);
2078
2122
  await recordHookOutcome(outcome);
2079
2123
  if (outcome.blockedReason) {
@@ -2252,7 +2296,7 @@ export class ClaudeSessionService {
2252
2296
  if (!skipUserPrompt) {
2253
2297
  await this.append(lease, snapshot.tail, createClaudeLastPromptEntry({
2254
2298
  sessionId,
2255
- lastPrompt: prompt,
2299
+ lastPrompt: effectivePrompt,
2256
2300
  leafUuid: finalLeafUuid,
2257
2301
  }));
2258
2302
  }
@@ -2865,6 +2909,42 @@ export class ClaudeSessionService {
2865
2909
  }
2866
2910
  return this.options.provider;
2867
2911
  }
2912
+ model() {
2913
+ return this.activeProvider?.model ?? this.options.provider?.model;
2914
+ }
2915
+ providerForAgent(agent) {
2916
+ const inherited = this.provider();
2917
+ const selectProvider = this.options.providerForMainModel ?? this.options.providerForModel;
2918
+ if (this.options.explicitModel ||
2919
+ !agent?.model ||
2920
+ agent.model === 'inherit' ||
2921
+ !selectProvider) {
2922
+ return inherited;
2923
+ }
2924
+ return selectProvider(agent.model);
2925
+ }
2926
+ resolveAgent(name) {
2927
+ if (!name)
2928
+ return null;
2929
+ return this.options.extensions?.agent(name) ?? null;
2930
+ }
2931
+ async mainAgentSystemPrompt(agent) {
2932
+ if (!agent ||
2933
+ (this.options.explicitSystemPrompt &&
2934
+ !this.options.agentSystemPromptOverridesExplicit)) {
2935
+ return null;
2936
+ }
2937
+ const memory = await agentMemoryPrompt(this.options.configRoot, this.activeCwd(), agent);
2938
+ const system = memory ? `${agent.body}\n\n${memory}` : agent.body;
2939
+ return system.trim() ? system : null;
2940
+ }
2941
+ assembledSystemMessages(agent, messages) {
2942
+ return agent &&
2943
+ this.options.explicitSystemPrompt &&
2944
+ this.options.agentSystemPromptOverridesExplicit
2945
+ ? messages.slice(1)
2946
+ : messages;
2947
+ }
2868
2948
  contextBudget(provider) {
2869
2949
  if (this.options.contextBudget)
2870
2950
  return this.options.contextBudget;
@@ -1,8 +1,9 @@
1
1
  import { type ClaudeSidechainPermissionMode } from '../compatibility/claude/sidechain.js';
2
2
  import { type ContextAssembler } from '../core/context.js';
3
3
  import { type ModelProvider, type ModelToolCall, type ModelToolDefinition, type ModelUsage, type PermissionResolver, type PermissionApproval, type PermissionDecision, type PermissionUpdate, type RuntimeEventSink, type ToolExecutionContext, type ToolExecutionResult, type ToolRegistry } from '../core/runtime.js';
4
- import { type ClaudeExtensionCatalog } from '../extensions/claude-extensions.js';
4
+ import { type ClaudeAgentRuntimeDefinition, type ClaudeExtensionCatalog } from '../extensions/claude-extensions.js';
5
5
  import type { ClaudeHookRunner } from '../hooks/claude-hooks.js';
6
+ import type { ClaudeMcpRuntime } from '../mcp/claude-mcp-tools.js';
6
7
  import { type BackgroundAgentSnapshot } from './background-agent-manager.js';
7
8
  export interface WorkflowAgentRunOptions {
8
9
  sessionId: string;
@@ -43,6 +44,7 @@ export declare class StructuredOutputRegistry implements ToolRegistry {
43
44
  prepare(call: ModelToolCall, context: ToolExecutionContext): Promise<ModelToolCall>;
44
45
  execute(call: ModelToolCall, context: ToolExecutionContext): Promise<ToolExecutionResult>;
45
46
  }
47
+ export declare function agentMemoryPrompt(configRoot: string, cwd: string, definition: ClaudeAgentRuntimeDefinition | null): Promise<string | null>;
46
48
  export interface ClaudeSubagentExecutorOptions {
47
49
  configRoot: string;
48
50
  cwd: string;
@@ -52,7 +54,9 @@ export interface ClaudeSubagentExecutorOptions {
52
54
  baseTools: ToolRegistry;
53
55
  permissions: PermissionResolver;
54
56
  permissionResolverForMode?: (mode: AgentPermissionMode) => PermissionResolver;
57
+ parentPermissionMode?: () => AgentPermissionMode;
55
58
  extensions?: ClaudeExtensionCatalog;
59
+ mcp?: ClaudeMcpRuntime;
56
60
  hooks?: ClaudeHookRunner;
57
61
  contextAssembler?: ContextAssembler;
58
62
  contextReserveTokens?: number;
@@ -80,6 +84,8 @@ export declare class ClaudeSubagentExecutor {
80
84
  backgroundSnapshots(): readonly BackgroundAgentSnapshot[];
81
85
  stopBackgroundTask(taskId: string): string;
82
86
  private cwd;
87
+ private agentDefinition;
88
+ private resolveAgentInput;
83
89
  registry(sessionId: string, depth: number, promptIdForCall: (callId: string) => string | null): ToolRegistry;
84
90
  definitions(): ModelToolDefinition;
85
91
  managementDefinitions(): readonly ModelToolDefinition[];