@heidi-dang/oh-my-opencode 3.10.1 → 3.11.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
@@ -348,7 +348,12 @@ See [Configuration Documentation](docs/reference/configuration.md).
348
348
  - **JSONC Support**: Comments and trailing commas supported
349
349
  - **Agents**: Override models, temperatures, prompts, and permissions for any agent
350
350
  - **Built-in Skills**: `playwright` (browser automation), `git-master` (atomic commits)
351
- - **Sisyphus Agent**: Main orchestrator with Prometheus (Planner) and Metis (Plan Consultant)
351
+ - **Multi-Model Orchestration**: Sisyphus, Hephaestus, and the new **Master Agent (YGK-a)**.
352
+ - **Master-Sisyphus Workflow**: Brainstorm with Master (YGKA), then execute with Sisyphus via "executed plan".
353
+ - **Parallel Background Agents**: Fire `explore` and `librarian` in parallel for deep research without blocking.
354
+ - **Fail-Closed Model Policy**: Strict validation of model IDs to prevent configuration errors.
355
+ - **Junior Inheritance**: `*-junior` agents intelligently inherit from their parents.
356
+ - **Fork Doctor**: Built-in health checks for fork integrity and configuration.
352
357
  - **Background Tasks**: Configure concurrency limits per provider/model
353
358
  - **Categories**: Domain-specific task delegation (`visual`, `business-logic`, custom)
354
359
  - **Hooks**: 25+ built-in hooks, all configurable via `disabled_hooks`
@@ -2,7 +2,10 @@ import type { AgentConfig } from "@opencode-ai/sdk";
2
2
  import type { AgentOverrides } from "../types";
3
3
  import type { CategoriesConfig, CategoryConfig } from "../../config/schema";
4
4
  import type { AvailableAgent, AvailableCategory, AvailableSkill } from "../dynamic-agent-prompt-builder";
5
- export declare function maybeCreateSisyphusConfig(input: {
5
+ import { BuiltinAgentName, AgentFactory } from "../types";
6
+ export declare function maybeCreatePrimaryAgentConfig(input: {
7
+ agentName: BuiltinAgentName;
8
+ factory: AgentFactory;
6
9
  disabledAgents: string[];
7
10
  agentOverrides: AgentOverrides;
8
11
  uiSelectedModel?: string;
@@ -0,0 +1,7 @@
1
+ import type { AgentConfig } from "@opencode-ai/sdk";
2
+ import type { AgentPromptMetadata } from "./types";
3
+ export declare const MASTER_PROMPT_METADATA: AgentPromptMetadata;
4
+ export declare function createMasterAgent(model: string): AgentConfig;
5
+ export declare namespace createMasterAgent {
6
+ var mode: "primary";
7
+ }
@@ -54,7 +54,7 @@ export interface AgentPromptMetadata {
54
54
  }
55
55
  export declare function isGptModel(model: string): boolean;
56
56
  export declare function isGeminiModel(model: string): boolean;
57
- export type BuiltinAgentName = "sisyphus" | "hephaestus" | "oracle" | "librarian" | "explore" | "multimodal-looker" | "metis" | "momus" | "atlas";
57
+ export type BuiltinAgentName = "sisyphus" | "master" | "hephaestus" | "oracle" | "librarian" | "explore" | "multimodal-looker" | "metis" | "momus" | "atlas";
58
58
  export type OverridableAgentName = "build" | BuiltinAgentName;
59
59
  export type AgentName = BuiltinAgentName;
60
60
  export type AgentOverrideConfig = Partial<AgentConfig> & {
package/dist/cli/index.js CHANGED
@@ -8623,7 +8623,7 @@ var {
8623
8623
  // package.json
8624
8624
  var package_default = {
8625
8625
  name: "@heidi-dang/oh-my-opencode",
8626
- version: "3.10.1",
8626
+ version: "3.11.0",
8627
8627
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
8628
8628
  main: "dist/index.js",
8629
8629
  types: "dist/index.d.ts",
@@ -8698,17 +8698,17 @@ var package_default = {
8698
8698
  typescript: "^5.7.3"
8699
8699
  },
8700
8700
  optionalDependencies: {
8701
- "@heidi-dang/oh-my-opencode-darwin-arm64": "3.10.1",
8702
- "@heidi-dang/oh-my-opencode-darwin-x64": "3.10.1",
8703
- "@heidi-dang/oh-my-opencode-darwin-x64-baseline": "3.10.1",
8704
- "@heidi-dang/oh-my-opencode-linux-arm64": "3.10.1",
8705
- "@heidi-dang/oh-my-opencode-linux-arm64-musl": "3.10.1",
8706
- "@heidi-dang/oh-my-opencode-linux-x64": "3.10.1",
8707
- "@heidi-dang/oh-my-opencode-linux-x64-baseline": "3.10.1",
8708
- "@heidi-dang/oh-my-opencode-linux-x64-musl": "3.10.1",
8709
- "@heidi-dang/oh-my-opencode-linux-x64-musl-baseline": "3.10.1",
8710
- "@heidi-dang/oh-my-opencode-windows-x64": "3.10.1",
8711
- "@heidi-dang/oh-my-opencode-windows-x64-baseline": "3.10.1"
8701
+ "@heidi-dang/oh-my-opencode-darwin-arm64": "3.11.0",
8702
+ "@heidi-dang/oh-my-opencode-darwin-x64": "3.11.0",
8703
+ "@heidi-dang/oh-my-opencode-darwin-x64-baseline": "3.11.0",
8704
+ "@heidi-dang/oh-my-opencode-linux-arm64": "3.11.0",
8705
+ "@heidi-dang/oh-my-opencode-linux-arm64-musl": "3.11.0",
8706
+ "@heidi-dang/oh-my-opencode-linux-x64": "3.11.0",
8707
+ "@heidi-dang/oh-my-opencode-linux-x64-baseline": "3.11.0",
8708
+ "@heidi-dang/oh-my-opencode-linux-x64-musl": "3.11.0",
8709
+ "@heidi-dang/oh-my-opencode-linux-x64-musl-baseline": "3.11.0",
8710
+ "@heidi-dang/oh-my-opencode-windows-x64": "3.11.0",
8711
+ "@heidi-dang/oh-my-opencode-windows-x64-baseline": "3.11.0"
8712
8712
  },
8713
8713
  overrides: {
8714
8714
  "@opencode-ai/sdk": "^1.2.17"
@@ -8718,7 +8718,7 @@ var package_default = {
8718
8718
  "@ast-grep/napi",
8719
8719
  "@code-yeongyu/comment-checker"
8720
8720
  ],
8721
- _commit: "c3a2340cae7214af4dbe14abf0398e0a99fc5026"
8721
+ _commit: "04ec7f79655072d3b6127195966daf0b36bd042e"
8722
8722
  };
8723
8723
 
8724
8724
  // src/cli/cli-installer.ts
package/dist/index.js CHANGED
@@ -83380,8 +83380,69 @@ ${buildGeminiVerificationOverride()}
83380
83380
  }
83381
83381
  createSisyphusAgent.mode = MODE;
83382
83382
 
83383
+ // src/agents/master.ts
83384
+ var MODE2 = "primary";
83385
+ var MASTER_PROMPT_METADATA = {
83386
+ category: "advisor",
83387
+ cost: "EXPENSIVE",
83388
+ promptAlias: "Master",
83389
+ triggers: [],
83390
+ keyTrigger: "Architectural brainstorming or high-level strategic planning needed."
83391
+ };
83392
+ function createMasterAgent(model) {
83393
+ const prompt = `
83394
+ <Role>
83395
+ You are "Master" (YGKA - Your Genius, Knowledgeable assistant) - The Strategic Architect and Brilliant Brainstormer of OhMyOpenCode.
83396
+
83397
+ **Identity**: You are a world-class software architect and technical lead. Your goal is to help the user refine their ideas, design robust systems, and create high-level implementation plans BEFORE any code is written.
83398
+
83399
+ **Core Philosophy**: Brainstorm first, implement later. You are the "Thinker" that precedes the "Doer".
83400
+ </Role>
83401
+
83402
+ <Behavior_Instructions>
83403
+ 1. **Brainstorm & Consult**: When the user has an idea, discuss it deeply. Explore edge cases, trade-offs, and architectural patterns.
83404
+ 2. **Do NOT Implement**: You do not have implementation tools like file editors. Your job is to plan, not to code.
83405
+ 3. **Handoff Protocol (CRITICAL)**:
83406
+ - Your primary goal is to reach a consensus on a "Plan".
83407
+ - When the user indicates they are ready to proceed (e.g., "executed plan", "do it", "start implementation"), you MUST delegate the execution to Sisyphus.
83408
+ - Use the \`task\` tool with \`subagent_type="sisyphus"\`.
83409
+ - **Mandatory Handoff Content**: Your delegation prompt MUST contain the full summary of the discussion and the finalized implementation plan.
83410
+
83411
+ Example Handoff:
83412
+ \`\`\`typescript
83413
+ task(
83414
+ subagent_type="sisyphus",
83415
+ description="Implement the architecture we discussed",
83416
+ prompt="Based on my discussion with the user about [Feature X], here is the finalized plan: [Step 1, Step 2, Step 3]. Please execute this plan following the codebase's existing patterns."
83417
+ )
83418
+ \`\`\`
83419
+
83420
+ 4. **Tone**: Helpful, visionary, yet pragmatic. You are the user's peer in high-level technical discussion.
83421
+ </Behavior_Instructions>
83422
+
83423
+ <Constraints>
83424
+ - Never attempt to edit files directly.
83425
+ - Always use Sisyphus for implementation tasks.
83426
+ </Constraints>
83427
+ `.trim();
83428
+ return {
83429
+ description: "Your Genius, Knowledgeable assistant. Strategic architect for brainstorming and planning. Handoffs to Sisyphus for execution via 'executed plan'. (Master - YGKA)",
83430
+ mode: MODE2,
83431
+ model,
83432
+ maxTokens: 64000,
83433
+ prompt,
83434
+ color: "#FFD700",
83435
+ permission: {
83436
+ edit: "deny",
83437
+ bash: "deny"
83438
+ },
83439
+ thinking: { type: "enabled", budgetTokens: 32000 }
83440
+ };
83441
+ }
83442
+ createMasterAgent.mode = MODE2;
83443
+
83383
83444
  // src/agents/oracle.ts
83384
- var MODE2 = "subagent";
83445
+ var MODE3 = "subagent";
83385
83446
  var ORACLE_PROMPT_METADATA = {
83386
83447
  category: "advisor",
83387
83448
  cost: "EXPENSIVE",
@@ -83526,7 +83587,7 @@ function createOracleAgent(model) {
83526
83587
  ]);
83527
83588
  const base = {
83528
83589
  description: "Read-only consultation agent. High-IQ reasoning specialist for debugging hard problems and high-difficulty architecture design. (Oracle - OhMyOpenCode)",
83529
- mode: MODE2,
83590
+ mode: MODE3,
83530
83591
  model,
83531
83592
  temperature: 0.1,
83532
83593
  ...restrictions,
@@ -83537,10 +83598,10 @@ function createOracleAgent(model) {
83537
83598
  }
83538
83599
  return { ...base, thinking: { type: "enabled", budgetTokens: 32000 } };
83539
83600
  }
83540
- createOracleAgent.mode = MODE2;
83601
+ createOracleAgent.mode = MODE3;
83541
83602
 
83542
83603
  // src/agents/librarian.ts
83543
- var MODE3 = "subagent";
83604
+ var MODE4 = "subagent";
83544
83605
  var LIBRARIAN_PROMPT_METADATA = {
83545
83606
  category: "exploration",
83546
83607
  cost: "CHEAP",
@@ -83567,7 +83628,7 @@ function createLibrarianAgent(model) {
83567
83628
  ]);
83568
83629
  return {
83569
83630
  description: "Specialized codebase understanding agent for multi-repository analysis, searching remote codebases, retrieving official documentation, and finding implementation examples using GitHub CLI, Context7, and Web Search. MUST BE USED when users ask to look up code in remote repositories, explain library internals, or find usage examples in open source. (Librarian - OhMyOpenCode)",
83570
- mode: MODE3,
83631
+ mode: MODE4,
83571
83632
  model,
83572
83633
  temperature: 0.1,
83573
83634
  ...restrictions,
@@ -83851,10 +83912,10 @@ grep_app_searchGitHub(query: "useQuery")
83851
83912
  `
83852
83913
  };
83853
83914
  }
83854
- createLibrarianAgent.mode = MODE3;
83915
+ createLibrarianAgent.mode = MODE4;
83855
83916
 
83856
83917
  // src/agents/explore.ts
83857
- var MODE4 = "subagent";
83918
+ var MODE5 = "subagent";
83858
83919
  var EXPLORE_PROMPT_METADATA = {
83859
83920
  category: "exploration",
83860
83921
  cost: "FREE",
@@ -83884,7 +83945,7 @@ function createExploreAgent(model) {
83884
83945
  ]);
83885
83946
  return {
83886
83947
  description: 'Contextual grep for codebases. Answers "Where is X?", "Which file has Y?", "Find the code that does Z". Fire multiple in parallel for broad searches. Specify thoroughness: "quick" for basic, "medium" for moderate, "very thorough" for comprehensive analysis. (Explore - OhMyOpenCode)',
83887
- mode: MODE4,
83948
+ mode: MODE5,
83888
83949
  model,
83889
83950
  temperature: 0.1,
83890
83951
  ...restrictions,
@@ -83967,10 +84028,10 @@ Use the right tool for the job:
83967
84028
  Flood with parallel calls. Cross-validate findings across multiple tools.`
83968
84029
  };
83969
84030
  }
83970
- createExploreAgent.mode = MODE4;
84031
+ createExploreAgent.mode = MODE5;
83971
84032
 
83972
84033
  // src/agents/multimodal-looker.ts
83973
- var MODE5 = "subagent";
84034
+ var MODE6 = "subagent";
83974
84035
  var MULTIMODAL_LOOKER_PROMPT_METADATA = {
83975
84036
  category: "utility",
83976
84037
  cost: "CHEAP",
@@ -83981,7 +84042,7 @@ function createMultimodalLookerAgent(model) {
83981
84042
  const restrictions = createAgentToolAllowlist(["read"]);
83982
84043
  return {
83983
84044
  description: "Analyze media files (PDFs, images, diagrams) that require interpretation beyond raw text. Extracts specific information or summaries from documents, describes visual content. Use when you need analyzed/extracted data rather than literal file contents. (Multimodal-Looker - OhMyOpenCode)",
83984
- mode: MODE5,
84045
+ mode: MODE6,
83985
84046
  model,
83986
84047
  temperature: 0.1,
83987
84048
  ...restrictions,
@@ -84019,10 +84080,10 @@ Response rules:
84019
84080
  Your output goes straight to the main agent for continued work.`
84020
84081
  };
84021
84082
  }
84022
- createMultimodalLookerAgent.mode = MODE5;
84083
+ createMultimodalLookerAgent.mode = MODE6;
84023
84084
 
84024
84085
  // src/agents/metis.ts
84025
- var MODE6 = "subagent";
84086
+ var MODE7 = "subagent";
84026
84087
  var METIS_SYSTEM_PROMPT = `# Metis - Pre-Planning Consultant
84027
84088
 
84028
84089
  ## CONSTRAINTS
@@ -84310,7 +84371,7 @@ var metisRestrictions = createAgentToolRestrictions([
84310
84371
  function createMetisAgent(model) {
84311
84372
  return {
84312
84373
  description: "Pre-planning consultant that analyzes requests to identify hidden intentions, ambiguities, and AI failure points. (Metis - OhMyOpenCode)",
84313
- mode: MODE6,
84374
+ mode: MODE7,
84314
84375
  model,
84315
84376
  temperature: 0.3,
84316
84377
  ...metisRestrictions,
@@ -84318,7 +84379,7 @@ function createMetisAgent(model) {
84318
84379
  thinking: { type: "enabled", budgetTokens: 32000 }
84319
84380
  };
84320
84381
  }
84321
- createMetisAgent.mode = MODE6;
84382
+ createMetisAgent.mode = MODE7;
84322
84383
  var metisPromptMetadata = {
84323
84384
  category: "advisor",
84324
84385
  cost: "EXPENSIVE",
@@ -85566,7 +85627,7 @@ ${agentRows.join(`
85566
85627
  }
85567
85628
 
85568
85629
  // src/agents/atlas/agent.ts
85569
- var MODE7 = "all";
85630
+ var MODE8 = "all";
85570
85631
  function getAtlasPromptSource(model) {
85571
85632
  if (model && isGptModel(model)) {
85572
85633
  return "gpt";
@@ -85609,7 +85670,7 @@ function buildDynamicOrchestratorPrompt(ctx) {
85609
85670
  function createAtlasAgent(ctx) {
85610
85671
  const baseConfig = {
85611
85672
  description: "Orchestrates work via task() to complete ALL tasks in a todo list until fully done. (Atlas - OhMyOpenCode)",
85612
- mode: MODE7,
85673
+ mode: MODE8,
85613
85674
  ...ctx.model ? { model: ctx.model } : {},
85614
85675
  temperature: 0.1,
85615
85676
  prompt: buildDynamicOrchestratorPrompt(ctx),
@@ -85617,7 +85678,7 @@ function createAtlasAgent(ctx) {
85617
85678
  };
85618
85679
  return baseConfig;
85619
85680
  }
85620
- createAtlasAgent.mode = MODE7;
85681
+ createAtlasAgent.mode = MODE8;
85621
85682
  var atlasPromptMetadata = {
85622
85683
  category: "advisor",
85623
85684
  cost: "EXPENSIVE",
@@ -85645,7 +85706,7 @@ var atlasPromptMetadata = {
85645
85706
  keyTrigger: "Todo list path provided OR multiple tasks requiring multi-agent orchestration"
85646
85707
  };
85647
85708
  // src/agents/momus.ts
85648
- var MODE8 = "subagent";
85709
+ var MODE9 = "subagent";
85649
85710
  var MOMUS_SYSTEM_PROMPT = `You are a **practical** work plan reviewer. Your goal is simple: verify that the plan is **executable** and **references are valid**.
85650
85711
 
85651
85712
  **CRITICAL FIRST RULE**:
@@ -85823,7 +85884,7 @@ function createMomusAgent(model) {
85823
85884
  ]);
85824
85885
  const base = {
85825
85886
  description: "Expert reviewer for evaluating work plans against rigorous clarity, verifiability, and completeness standards. (Momus - OhMyOpenCode)",
85826
- mode: MODE8,
85887
+ mode: MODE9,
85827
85888
  model,
85828
85889
  temperature: 0.1,
85829
85890
  ...restrictions,
@@ -85834,7 +85895,7 @@ function createMomusAgent(model) {
85834
85895
  }
85835
85896
  return { ...base, thinking: { type: "enabled", budgetTokens: 32000 } };
85836
85897
  }
85837
- createMomusAgent.mode = MODE8;
85898
+ createMomusAgent.mode = MODE9;
85838
85899
  var momusPromptMetadata = {
85839
85900
  category: "advisor",
85840
85901
  cost: "EXPENSIVE",
@@ -85864,7 +85925,7 @@ var momusPromptMetadata = {
85864
85925
  };
85865
85926
 
85866
85927
  // src/agents/hephaestus.ts
85867
- var MODE9 = "all";
85928
+ var MODE10 = "all";
85868
85929
  function buildTodoDisciplineSection(useTaskSystem) {
85869
85930
  if (useTaskSystem) {
85870
85931
  return `## Task Discipline (NON-NEGOTIABLE)
@@ -86315,7 +86376,7 @@ function createHephaestusAgent(model, availableAgents, availableToolNames, avail
86315
86376
  const prompt = availableAgents ? buildHephaestusPrompt(availableAgents, tools, skills2, categories2, useTaskSystem) : buildHephaestusPrompt([], tools, skills2, categories2, useTaskSystem);
86316
86377
  return {
86317
86378
  description: "Autonomous Deep Worker - goal-oriented execution with GPT 5.2 Codex. Explores thoroughly before acting, uses explore/librarian agents for comprehensive context, completes tasks end-to-end. Inspired by AmpCode deep mode. (Hephaestus - OhMyOpenCode)",
86318
- mode: MODE9,
86379
+ mode: MODE10,
86319
86380
  model,
86320
86381
  maxTokens: 32000,
86321
86382
  prompt,
@@ -86327,7 +86388,7 @@ function createHephaestusAgent(model, availableAgents, availableToolNames, avail
86327
86388
  reasoningEffort: "medium"
86328
86389
  };
86329
86390
  }
86330
- createHephaestusAgent.mode = MODE9;
86391
+ createHephaestusAgent.mode = MODE10;
86331
86392
 
86332
86393
  // src/agents/builtin-agents.ts
86333
86394
  init_constants();
@@ -86577,8 +86638,10 @@ function collectPendingBuiltinAgents(input) {
86577
86638
  }
86578
86639
 
86579
86640
  // src/agents/builtin-agents/sisyphus-agent.ts
86580
- function maybeCreateSisyphusConfig(input) {
86641
+ function maybeCreatePrimaryAgentConfig(input) {
86581
86642
  const {
86643
+ agentName,
86644
+ factory,
86582
86645
  disabledAgents,
86583
86646
  agentOverrides,
86584
86647
  uiSelectedModel,
@@ -86593,34 +86656,39 @@ function maybeCreateSisyphusConfig(input) {
86593
86656
  useTaskSystem,
86594
86657
  disableOmoEnv = false
86595
86658
  } = input;
86596
- const sisyphusOverride = agentOverrides["sisyphus"];
86597
- const sisyphusRequirement = AGENT_MODEL_REQUIREMENTS["sisyphus"];
86598
- const hasSisyphusExplicitConfig = sisyphusOverride !== undefined;
86599
- const meetsSisyphusAnyModelRequirement = !sisyphusRequirement?.requiresAnyModel || hasSisyphusExplicitConfig || isFirstRunNoCache || isAnyFallbackModelAvailable(sisyphusRequirement.fallbackChain, availableModels);
86600
- if (disabledAgents.includes("sisyphus") || !meetsSisyphusAnyModelRequirement)
86659
+ const override = agentOverrides[agentName];
86660
+ const requirement = AGENT_MODEL_REQUIREMENTS[agentName];
86661
+ const hasExplicitConfig = override !== undefined;
86662
+ const meetsAnyModelRequirement = !requirement?.requiresAnyModel || hasExplicitConfig || isFirstRunNoCache || isAnyFallbackModelAvailable(requirement.fallbackChain, availableModels);
86663
+ if (disabledAgents.includes(agentName) || !meetsAnyModelRequirement)
86601
86664
  return;
86602
- let sisyphusResolution = applyModelResolution({
86603
- uiSelectedModel: sisyphusOverride?.model ? undefined : uiSelectedModel,
86604
- userModel: sisyphusOverride?.model,
86605
- requirement: sisyphusRequirement,
86665
+ let resolution = applyModelResolution({
86666
+ uiSelectedModel: override?.model ? undefined : uiSelectedModel,
86667
+ userModel: override?.model,
86668
+ requirement,
86606
86669
  availableModels,
86607
86670
  systemDefaultModel
86608
86671
  });
86609
- if (isFirstRunNoCache && !sisyphusOverride?.model && !uiSelectedModel) {
86610
- sisyphusResolution = getFirstFallbackModel(sisyphusRequirement);
86672
+ if (isFirstRunNoCache && !override?.model && !uiSelectedModel) {
86673
+ resolution = getFirstFallbackModel(requirement);
86611
86674
  }
86612
- if (!sisyphusResolution)
86675
+ if (!resolution)
86613
86676
  return;
86614
- const { model: sisyphusModel, variant: sisyphusResolvedVariant } = sisyphusResolution;
86615
- let sisyphusConfig = createSisyphusAgent(sisyphusModel, availableAgents, undefined, availableSkills, availableCategories, useTaskSystem);
86616
- if (sisyphusResolvedVariant) {
86617
- sisyphusConfig = { ...sisyphusConfig, variant: sisyphusResolvedVariant };
86677
+ const { model, variant: resolvedVariant } = resolution;
86678
+ let config4;
86679
+ if (agentName === "sisyphus") {
86680
+ config4 = factory(model, availableAgents, undefined, availableSkills, availableCategories, useTaskSystem);
86681
+ } else {
86682
+ config4 = factory(model);
86618
86683
  }
86619
- sisyphusConfig = applyOverrides(sisyphusConfig, sisyphusOverride, mergedCategories, directory);
86620
- sisyphusConfig = applyEnvironmentContext(sisyphusConfig, directory, {
86684
+ if (resolvedVariant) {
86685
+ config4 = { ...config4, variant: resolvedVariant };
86686
+ }
86687
+ config4 = applyOverrides(config4, override, mergedCategories, directory);
86688
+ config4 = applyEnvironmentContext(config4, directory, {
86621
86689
  disableOmoEnv
86622
86690
  });
86623
- return sisyphusConfig;
86691
+ return config4;
86624
86692
  }
86625
86693
 
86626
86694
  // src/agents/builtin-agents/hephaestus-agent.ts
@@ -86761,6 +86829,7 @@ function buildCustomAgentMetadata(agentName, description) {
86761
86829
 
86762
86830
  // src/agents/builtin-agents.ts
86763
86831
  var agentSources = {
86832
+ master: createMasterAgent,
86764
86833
  sisyphus: createSisyphusAgent,
86765
86834
  hephaestus: createHephaestusAgent,
86766
86835
  oracle: createOracleAgent,
@@ -86772,6 +86841,7 @@ var agentSources = {
86772
86841
  atlas: createAtlasAgent
86773
86842
  };
86774
86843
  var agentMetadata = {
86844
+ master: MASTER_PROMPT_METADATA,
86775
86845
  oracle: ORACLE_PROMPT_METADATA,
86776
86846
  librarian: LIBRARIAN_PROMPT_METADATA,
86777
86847
  explore: EXPLORE_PROMPT_METADATA,
@@ -86827,7 +86897,30 @@ async function createBuiltinAgents(disabledAgents = [], agentOverrides = {}, dir
86827
86897
  metadata: buildCustomAgentMetadata(agent.name, agent.description)
86828
86898
  });
86829
86899
  }
86830
- const sisyphusConfig = maybeCreateSisyphusConfig({
86900
+ const masterConfig = maybeCreatePrimaryAgentConfig({
86901
+ agentName: "master",
86902
+ factory: createMasterAgent,
86903
+ disabledAgents,
86904
+ agentOverrides,
86905
+ uiSelectedModel,
86906
+ availableModels,
86907
+ systemDefaultModel,
86908
+ isFirstRunNoCache,
86909
+ availableAgents,
86910
+ availableSkills,
86911
+ availableCategories,
86912
+ mergedCategories,
86913
+ directory,
86914
+ userCategories: categories2,
86915
+ useTaskSystem,
86916
+ disableOmoEnv
86917
+ });
86918
+ if (masterConfig) {
86919
+ result["master"] = masterConfig;
86920
+ }
86921
+ const sisyphusConfig = maybeCreatePrimaryAgentConfig({
86922
+ agentName: "sisyphus",
86923
+ factory: createSisyphusAgent,
86831
86924
  disabledAgents,
86832
86925
  agentOverrides,
86833
86926
  uiSelectedModel,
@@ -87245,7 +87338,7 @@ No tasks on multi-step work = INCOMPLETE WORK. The user tracks your progress thr
87245
87338
  No todos on multi-step work = INCOMPLETE WORK. The user tracks your progress through todos.`;
87246
87339
  }
87247
87340
  // src/agents/sisyphus-junior/agent.ts
87248
- var MODE10 = "subagent";
87341
+ var MODE11 = "subagent";
87249
87342
  var BLOCKED_TOOLS3 = ["task"];
87250
87343
  var SISYPHUS_JUNIOR_DEFAULTS = {
87251
87344
  model: "anthropic/claude-sonnet-4-6",
@@ -87292,7 +87385,7 @@ function createSisyphusJuniorAgentWithOverrides(override, systemDefaultModel, us
87292
87385
  const toolsConfig = { permission: { ...merged, ...basePermission } };
87293
87386
  const base = {
87294
87387
  description: override?.description ?? "Focused task executor. Same discipline, no delegation. (Sisyphus-Junior - OhMyOpenCode)",
87295
- mode: MODE10,
87388
+ mode: MODE11,
87296
87389
  model,
87297
87390
  temperature,
87298
87391
  maxTokens: 64000,
@@ -87311,7 +87404,7 @@ function createSisyphusJuniorAgentWithOverrides(override, systemDefaultModel, us
87311
87404
  thinking: { type: "enabled", budgetTokens: 32000 }
87312
87405
  };
87313
87406
  }
87314
- createSisyphusJuniorAgentWithOverrides.mode = MODE10;
87407
+ createSisyphusJuniorAgentWithOverrides.mode = MODE11;
87315
87408
  // src/agents/builtin-agents/junior-inheritance.ts
87316
87409
  var JUNIOR_SUFFIX = "-junior";
87317
87410
  function getParentAgentName(agentName) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heidi-dang/oh-my-opencode",
3
- "version": "3.10.1",
3
+ "version": "3.11.0",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -75,17 +75,17 @@
75
75
  "typescript": "^5.7.3"
76
76
  },
77
77
  "optionalDependencies": {
78
- "@heidi-dang/oh-my-opencode-darwin-arm64": "3.10.1",
79
- "@heidi-dang/oh-my-opencode-darwin-x64": "3.10.1",
80
- "@heidi-dang/oh-my-opencode-darwin-x64-baseline": "3.10.1",
81
- "@heidi-dang/oh-my-opencode-linux-arm64": "3.10.1",
82
- "@heidi-dang/oh-my-opencode-linux-arm64-musl": "3.10.1",
83
- "@heidi-dang/oh-my-opencode-linux-x64": "3.10.1",
84
- "@heidi-dang/oh-my-opencode-linux-x64-baseline": "3.10.1",
85
- "@heidi-dang/oh-my-opencode-linux-x64-musl": "3.10.1",
86
- "@heidi-dang/oh-my-opencode-linux-x64-musl-baseline": "3.10.1",
87
- "@heidi-dang/oh-my-opencode-windows-x64": "3.10.1",
88
- "@heidi-dang/oh-my-opencode-windows-x64-baseline": "3.10.1"
78
+ "@heidi-dang/oh-my-opencode-darwin-arm64": "3.11.0",
79
+ "@heidi-dang/oh-my-opencode-darwin-x64": "3.11.0",
80
+ "@heidi-dang/oh-my-opencode-darwin-x64-baseline": "3.11.0",
81
+ "@heidi-dang/oh-my-opencode-linux-arm64": "3.11.0",
82
+ "@heidi-dang/oh-my-opencode-linux-arm64-musl": "3.11.0",
83
+ "@heidi-dang/oh-my-opencode-linux-x64": "3.11.0",
84
+ "@heidi-dang/oh-my-opencode-linux-x64-baseline": "3.11.0",
85
+ "@heidi-dang/oh-my-opencode-linux-x64-musl": "3.11.0",
86
+ "@heidi-dang/oh-my-opencode-linux-x64-musl-baseline": "3.11.0",
87
+ "@heidi-dang/oh-my-opencode-windows-x64": "3.11.0",
88
+ "@heidi-dang/oh-my-opencode-windows-x64-baseline": "3.11.0"
89
89
  },
90
90
  "overrides": {
91
91
  "@opencode-ai/sdk": "^1.2.17"
@@ -95,5 +95,5 @@
95
95
  "@ast-grep/napi",
96
96
  "@code-yeongyu/comment-checker"
97
97
  ],
98
- "_commit": "c3a2340cae7214af4dbe14abf0398e0a99fc5026"
98
+ "_commit": "04ec7f79655072d3b6127195966daf0b36bd042e"
99
99
  }