Skip to content

[FEATURE]: Add systemPrompt option to SDK like Claude Agent SDK #7351

Closed as not planned

Description

@ysm-dev

Feature hasn't been suggested before.

  • I have verified this feature I'm about to request hasn't been suggested before.

Describe the enhancement you want to request

Summary

Add a systemPrompt option to the OpenCode SDK (@opencode-ai/sdk) that allows developers to directly customize or replace the system prompt, similar to how the Claude Agent SDK (@anthropic-ai/claude-agent-sdk) implements this feature.

Background

The Claude Agent SDK provides flexible system prompt customization through the systemPrompt option:

// Option 1: Complete replacement with custom prompt
for await (const message of query({
  prompt: "Help me write code",
  options: {
    systemPrompt: "You are a Python specialist...",
  },
})) {
  console.log(message);
}

// Option 2: Use preset with append
for await (const message of query({
  prompt: "Help me write code",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code",
      append: "Always include docstrings and type hints.",
    },
  },
})) {
  console.log(message);
}

Current OpenCode SDK Limitation

Currently, the OpenCode SDK does not provide a direct way to modify the system prompt. Available workarounds include:

  1. Agent configuration with prompt option - Requires file-based configuration
  2. AGENTS.md files - Project-level only, not programmatic
  3. noReply: true context injection - Only appends to conversation, doesn't modify system prompt

None of these provide the flexibility of directly setting systemPrompt in SDK calls.

Proposed API

import { createOpencode } from "@opencode-ai/sdk";

const { client } = await createOpencode();

// Option 1: Direct system prompt replacement
const session = await client.session.create({
  body: { 
    title: "My session",
    systemPrompt: "You are a specialized assistant for..."
  },
});

// Option 2: Append to default system prompt
const session = await client.session.create({
  body: { 
    title: "My session",
    systemPrompt: {
      type: "preset",
      preset: "default",
      append: "Additional instructions here..."
    }
  },
});

// Option 3: Per-prompt system prompt override
await client.session.prompt({
  path: { id: session.id },
  body: {
    systemPrompt: "Custom system prompt for this interaction",
    parts: [{ type: "text", text: "Hello!" }],
  },
});

Benefits

  1. Programmatic control - Dynamically generate system prompts based on runtime conditions
  2. SDK parity with Claude Agent SDK - Easier migration and consistent developer experience
  3. Flexibility - No need for file-based configuration for simple customizations
  4. Use cases:
    • Building custom agents with specialized behaviors
    • A/B testing different system prompts
    • Multi-tenant applications with different prompts per user/org
    • Reducing token usage by removing unnecessary default instructions

Related Issues

This feature would address many of the concerns raised in these issues from an SDK perspective.

Activity

  1. github-actions commented on Jan 8, 2026

    @github-actions
    Contributor

    This issue might be a duplicate of existing issues. Please check:

    Feel free to ignore if this issue addresses your specific systemPrompt SDK API design in ways these don't.

  2. thdxr commented on Mar 25, 2026

    @thdxr
    Member

    To stay organized issues are automatically closed after 90 days of no activity. If the issue is still relevant please open a new one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions