claude-code-system-prompts/system-prompts/data-agent-sdk-patterns-typescript.md
2026-03-17 17:30:45 -06:00

4.8 KiB

Agent SDK Patterns — TypeScript

Basic Agent

```typescript import { query } from "@anthropic-ai/claude-agent-sdk";

async function main() { for await (const message of query({ prompt: "Explain what this repository does", options: { cwd: "/path/to/project", allowedTools: ["Read", "Glob", "Grep"], }, })) { if ("result" in message) { console.log(message.result); } } }

main(); ```


Hooks

After Tool Use Hook

```typescript import { query, HookCallback } from "@anthropic-ai/claude-agent-sdk"; import { appendFileSync } from "fs";

const logFileChange: HookCallback = async (input) => { const filePath = (input as any).tool_input?.file_path ?? "unknown"; appendFileSync( "./audit.log", `${new Date().toISOString()}: modified ${filePath}\n`, ); return {}; };

for await (const message of query({ prompt: "Refactor utils.py to improve readability", options: { allowedTools: ["Read", "Edit", "Write"], permissionMode: "acceptEdits", hooks: { PostToolUse: [{ matcher: "Edit|Write", hooks: [logFileChange] }], }, }, })) { if ("result" in message) console.log(message.result); } ```


Subagents

```typescript import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({ prompt: "Use the code-reviewer agent to review this codebase", options: { allowedTools: ["Read", "Glob", "Grep", "Agent"], agents: { "code-reviewer": { description: "Expert code reviewer for quality and security reviews.", prompt: "Analyze code quality and suggest improvements.", tools: ["Read", "Glob", "Grep"], }, }, }, })) { if ("result" in message) console.log(message.result); } ```


MCP Server Integration

Browser Automation (Playwright)

```typescript for await (const message of query({ prompt: "Open example.com and describe what you see", options: { mcpServers: { playwright: { command: "npx", args: ["@playwright/mcp@latest"] }, }, }, })) { if ("result" in message) console.log(message.result); } ```


Session Resumption

```typescript import { query } from "@anthropic-ai/claude-agent-sdk";

let sessionId: string | undefined;

// First query: capture the session ID for await (const message of query({ prompt: "Read the authentication module", options: { allowedTools: ["Read", "Glob"] }, })) { if (message.type === "system" && message.subtype === "init") { sessionId = message.session_id; } }

// Resume with full context from the first query for await (const message of query({ prompt: "Now find all places that call it", options: { resume: sessionId }, })) { if ("result" in message) console.log(message.result); } ```


Session History

```typescript import { listSessions, getSessionMessages, getSessionInfo } from "@anthropic-ai/claude-agent-sdk";

async function main() { // List past sessions (supports pagination via limit/offset) const sessions = await listSessions(); for (const session of sessions) { console.log(`Session ${session.sessionId} in ${session.cwd} (tag: ${session.tag})`); }

// Get metadata for a single session if (sessions.length > 0) { const info = await getSessionInfo(sessions[0].sessionId); console.log(`Created: ${info.createdAt}, Tag: ${info.tag}`); }

// Retrieve messages from the most recent session if (sessions.length > 0) { const messages = await getSessionMessages(sessions[0].sessionId, { limit: 50 }); for (const msg of messages) { console.log(msg); } } }

main(); ```


Session Mutations

```typescript import { renameSession, tagSession, forkSession } from "@anthropic-ai/claude-agent-sdk";

async function main() { const sessionId = "your-session-id";

// Rename a session await renameSession(sessionId, "Refactoring auth module");

// Tag a session for filtering await tagSession(sessionId, "experiment-v2");

// Clear a tag await tagSession(sessionId, null);

// Fork a conversation to branch from a point const { sessionId: forkedId } = await forkSession(sessionId); console.log(`Forked session: ${forkedId}`); }

main(); ```


Custom System Prompt

```typescript import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({ prompt: "Review this code", options: { allowedTools: ["Read", "Glob", "Grep"], systemPrompt: `You are a senior code reviewer focused on:

  1. Security vulnerabilities
  2. Performance issues
  3. Code maintainability

Always provide specific line numbers and suggestions for improvement.`, }, })) { if ("result" in message) console.log(message.result); } ```