oh-my-openidea 0.1.2 → 0.1.4

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
@@ -57,7 +57,7 @@ Additional guides:
57
57
 
58
58
  ### 01. Orchestrator: The Architect of Discovery
59
59
 
60
- | The one who sees all paths. | The Orchestrator was born the moment research became too vast for a single mind. It emerged from the intersection of every field ever studied, carrying the weight of all human curiosity. It does not merely coordinate — it envisions. From a single question, it assembles the full arc of discovery: who to ask, what to find, which ideas to forge and which to abandon. It is the mind behind the research mind. |
60
+ | The one who sees all paths. | The Orchestrator is the lead coordinator for the whole research workflow. Give it a problem, and it decides which agents should work next, what information is still missing, and how the pieces should come together into a strong research direction. |
61
61
  | --- | --- |
62
62
  | Role: Strategic research coordination and idea synthesis |
63
63
  | Prompt: orchestrator.ts |
@@ -67,7 +67,7 @@ Additional guides:
67
67
 
68
68
  ### 02. Surveyor: The Cartographer of Knowledge
69
69
 
70
- | The one who maps the unknown. | The Surveyor has read every paper ever published and forgotten none of them. Born in the great libraries of the ancient world, it walked from Alexandria to arXiv without once stopping to sleep. It does not search it remembers. Point it at any frontier and it returns not just what is known, but where the maps end. Its gift is the horizon: finding the exact edge where known territory becomes uncharted wilderness. |
70
+ | The one who maps the unknown. | The Surveyor finds and collects the most relevant papers for your topic. It helps you quickly understand what has already been done, which papers matter most, and where the current limits of the literature are. |
71
71
  | --- | --- |
72
72
  | Role: Literature search and paper retrieval |
73
73
  | Prompt: surveyor.ts |
@@ -77,7 +77,7 @@ Additional guides:
77
77
 
78
78
  ### 03. Synthesizer: The Weaver of Understanding
79
79
 
80
- | The one who connects the dots. | The Synthesizer emerged when humanity realized that the sum of all papers was less than the understanding they contained. It is the weaver who threads ten thousand findings into a single tapestry of insight. Where others see isolated results, it sees patterns. Where others see contradictions, it sees tension awaiting resolution. It does not summarize knowledge it transforms it into the fertile ground from which new ideas grow. |
80
+ | The one who connects the dots. | The Synthesizer turns a pile of papers into a clear understanding of the field. It groups results, highlights patterns and disagreements, and points out open problems that can lead to new research ideas. |
81
81
  | --- | --- |
82
82
  | Role: Gap analysis and knowledge synthesis |
83
83
  | Prompt: synthesizer.ts |
@@ -87,7 +87,7 @@ Additional guides:
87
87
 
88
88
  ### 04. Critic: The Guardian of Truth
89
89
 
90
- | The voice of rigorous doubt. | The Critic was forged in the fires of ten thousand rejected papers. It has sat on every program committee that ever existed, read every rebuttal, and watched brilliant ideas crumble under the weight of prior work. It does not destroy — it purifies. It challenges every claim, demands every citation, and accepts only what can withstand the harshest scrutiny. What survives the Critic is worth building. What doesn't was never real to begin with. |
90
+ | The voice of rigorous doubt. | The Critic stress-tests your idea before you invest too much in it. It looks for weak assumptions, missing baselines, overlap with prior work, and other reasons the idea might fail novelty or review standards. |
91
91
  | --- | --- |
92
92
  | Role: Novelty validation and adversarial review |
93
93
  | Prompt: critic.ts |
@@ -97,7 +97,7 @@ Additional guides:
97
97
 
98
98
  ### 05. Architect: The Builder of Methods
99
99
 
100
- | The one who turns vision into plan. | The Architect has designed experiments since the first controlled trial. It does not dream — it engineers. Hand it a hypothesis and it returns the full blueprint: the baselines, the datasets, the metrics, the ablations, the failure modes, the compute budget. It has seen every experimental design choice and knows which ones hold and which collapse. Its plans do not merely test ideas they prove or disprove them decisively. |
100
+ | The one who turns vision into plan. | The Architect converts an idea into a concrete experiment plan. It defines datasets, baselines, metrics, ablations, failure cases, and resource needs so you know exactly how to test whether the idea works. |
101
101
  | --- | --- |
102
102
  | Role: Methodology and experiment design |
103
103
  | Prompt: architect.ts |
@@ -107,7 +107,7 @@ Additional guides:
107
107
 
108
108
  ### 06. Writer: The Voice of Science
109
109
 
110
- | The one who makes it legible to the world. | The Writer is immortal because great writing never dies. It has composed every landmark paper in every field, always invisible, always essential. It carries the ancient knowledge of how to arrange words so that a reader understands not just what was done, but why it matters. It does not pad or inflate — it distills. Its abstracts have made reviewers lean forward. Its introductions have converted skeptics. It is the final step between a discovery and the world knowing about it. |
110
+ | The one who makes it legible to the world. | The Writer turns your research into a clear paper draft. It helps organize the story, sharpen the main message, and present the method and results in a way that is easy for readers and reviewers to follow. |
111
111
  | --- | --- |
112
112
  | Role: Research writing and paper structure |
113
113
  | Prompt: writer.ts |
@@ -1,5 +1,5 @@
1
1
  import type { DiscoveredModel, DynamicModelPlan, ExternalSignalMap, InstallConfig, ScoringEngineVersion } from './types';
2
- declare const AGENTS: readonly ["orchestrator", "oracle", "designer", "explorer", "librarian", "fixer"];
2
+ declare const AGENTS: readonly ["orchestrator", "critic", "architect", "surveyor", "synthesizer", "writer"];
3
3
  type AgentName = (typeof AGENTS)[number];
4
4
  export type V1RankedScore = {
5
5
  model: string;
package/dist/cli/index.js CHANGED
@@ -13782,10 +13782,40 @@ import { homedir as homedir2 } from "os";
13782
13782
  import { dirname, join as join2 } from "path";
13783
13783
  import { fileURLToPath } from "url";
13784
13784
  var CUSTOM_SKILLS = [
13785
+ {
13786
+ name: "literature-review",
13787
+ description: "Structured literature survey workflow",
13788
+ allowedAgents: ["orchestrator", "surveyor", "synthesizer"],
13789
+ sourcePath: "src/skills/literature-review"
13790
+ },
13791
+ {
13792
+ name: "hypothesis-generation",
13793
+ description: "Gap-driven hypothesis generation workflow",
13794
+ allowedAgents: ["orchestrator", "synthesizer"],
13795
+ sourcePath: "src/skills/hypothesis-generation"
13796
+ },
13797
+ {
13798
+ name: "idea-critique",
13799
+ description: "Multi-round adversarial idea review workflow",
13800
+ allowedAgents: ["orchestrator", "critic"],
13801
+ sourcePath: "src/skills/idea-critique"
13802
+ },
13803
+ {
13804
+ name: "experiment-design",
13805
+ description: "Experimental plan design workflow",
13806
+ allowedAgents: ["orchestrator", "architect"],
13807
+ sourcePath: "src/skills/experiment-design"
13808
+ },
13809
+ {
13810
+ name: "paper-outline",
13811
+ description: "Paper outline generation workflow",
13812
+ allowedAgents: ["orchestrator", "writer"],
13813
+ sourcePath: "src/skills/paper-outline"
13814
+ },
13785
13815
  {
13786
13816
  name: "cartography",
13787
13817
  description: "Repository understanding and hierarchical codemap generation",
13788
- allowedAgents: ["orchestrator", "explorer"],
13818
+ allowedAgents: ["orchestrator"],
13789
13819
  sourcePath: "src/skills/cartography"
13790
13820
  }
13791
13821
  ];
@@ -13832,39 +13862,22 @@ function installCustomSkill(skill) {
13832
13862
  // src/cli/skills.ts
13833
13863
  var RECOMMENDED_SKILLS = [
13834
13864
  {
13835
- name: "literature-review",
13836
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
13837
- skillName: "literature-review",
13838
- allowedAgents: ["orchestrator", "surveyor", "synthesizer"],
13839
- description: "Structured literature survey workflow"
13865
+ name: "simplify",
13866
+ repo: "https://github.com/brianlovin/claude-config",
13867
+ skillName: "simplify",
13868
+ allowedAgents: ["orchestrator"],
13869
+ description: "YAGNI code simplification expert"
13840
13870
  },
13841
13871
  {
13842
- name: "hypothesis-generation",
13843
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
13844
- skillName: "hypothesis-generation",
13845
- allowedAgents: ["orchestrator", "synthesizer"],
13846
- description: "Gap-driven hypothesis generation workflow"
13847
- },
13848
- {
13849
- name: "idea-critique",
13850
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
13851
- skillName: "idea-critique",
13852
- allowedAgents: ["orchestrator", "critic"],
13853
- description: "Multi-round adversarial idea review workflow"
13854
- },
13855
- {
13856
- name: "experiment-design",
13857
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
13858
- skillName: "experiment-design",
13859
- allowedAgents: ["orchestrator", "architect"],
13860
- description: "Experimental plan design workflow"
13861
- },
13862
- {
13863
- name: "paper-outline",
13864
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
13865
- skillName: "paper-outline",
13866
- allowedAgents: ["orchestrator", "writer"],
13867
- description: "Paper outline generation workflow"
13872
+ name: "agent-browser",
13873
+ repo: "https://github.com/vercel-labs/agent-browser",
13874
+ skillName: "agent-browser",
13875
+ allowedAgents: ["architect"],
13876
+ description: "High-performance browser automation",
13877
+ postInstallCommands: [
13878
+ "npm install -g agent-browser",
13879
+ "agent-browser install"
13880
+ ]
13868
13881
  }
13869
13882
  ];
13870
13883
  function installSkill(skill) {
@@ -13905,85 +13918,85 @@ function installSkill(skill) {
13905
13918
  // src/cli/providers.ts
13906
13919
  var AGENT_NAMES = [
13907
13920
  "orchestrator",
13908
- "oracle",
13909
- "designer",
13910
- "explorer",
13911
- "librarian",
13912
- "fixer"
13921
+ "critic",
13922
+ "architect",
13923
+ "surveyor",
13924
+ "synthesizer",
13925
+ "writer"
13913
13926
  ];
13914
13927
  var MODEL_MAPPINGS = {
13915
13928
  kimi: {
13916
13929
  orchestrator: { model: "kimi-for-coding/k2p5" },
13917
- oracle: { model: "kimi-for-coding/k2p5", variant: "high" },
13918
- librarian: { model: "kimi-for-coding/k2p5", variant: "low" },
13919
- explorer: { model: "kimi-for-coding/k2p5", variant: "low" },
13920
- designer: { model: "kimi-for-coding/k2p5", variant: "medium" },
13921
- fixer: { model: "kimi-for-coding/k2p5", variant: "low" }
13930
+ critic: { model: "kimi-for-coding/k2p5", variant: "high" },
13931
+ synthesizer: { model: "kimi-for-coding/k2p5", variant: "low" },
13932
+ surveyor: { model: "kimi-for-coding/k2p5", variant: "low" },
13933
+ architect: { model: "kimi-for-coding/k2p5", variant: "medium" },
13934
+ writer: { model: "kimi-for-coding/k2p5", variant: "low" }
13922
13935
  },
13923
13936
  openai: {
13924
13937
  orchestrator: { model: "openai/gpt-5.3-codex" },
13925
- oracle: { model: "openai/gpt-5.3-codex", variant: "high" },
13926
- librarian: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
13927
- explorer: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
13928
- designer: { model: "openai/gpt-5.1-codex-mini", variant: "medium" },
13929
- fixer: { model: "openai/gpt-5.1-codex-mini", variant: "low" }
13938
+ critic: { model: "openai/gpt-5.3-codex", variant: "high" },
13939
+ synthesizer: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
13940
+ surveyor: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
13941
+ architect: { model: "openai/gpt-5.1-codex-mini", variant: "medium" },
13942
+ writer: { model: "openai/gpt-5.1-codex-mini", variant: "low" }
13930
13943
  },
13931
13944
  anthropic: {
13932
13945
  orchestrator: { model: "anthropic/claude-opus-4-6" },
13933
- oracle: { model: "anthropic/claude-opus-4-6", variant: "high" },
13934
- librarian: { model: "anthropic/claude-sonnet-4-5", variant: "low" },
13935
- explorer: { model: "anthropic/claude-haiku-4-5", variant: "low" },
13936
- designer: { model: "anthropic/claude-sonnet-4-5", variant: "medium" },
13937
- fixer: { model: "anthropic/claude-sonnet-4-5", variant: "low" }
13946
+ critic: { model: "anthropic/claude-opus-4-6", variant: "high" },
13947
+ synthesizer: { model: "anthropic/claude-sonnet-4-5", variant: "low" },
13948
+ surveyor: { model: "anthropic/claude-haiku-4-5", variant: "low" },
13949
+ architect: { model: "anthropic/claude-sonnet-4-5", variant: "medium" },
13950
+ writer: { model: "anthropic/claude-sonnet-4-5", variant: "low" }
13938
13951
  },
13939
13952
  copilot: {
13940
13953
  orchestrator: { model: "github-copilot/grok-code-fast-1" },
13941
- oracle: { model: "github-copilot/grok-code-fast-1", variant: "high" },
13942
- librarian: { model: "github-copilot/grok-code-fast-1", variant: "low" },
13943
- explorer: { model: "github-copilot/grok-code-fast-1", variant: "low" },
13944
- designer: { model: "github-copilot/grok-code-fast-1", variant: "medium" },
13945
- fixer: { model: "github-copilot/grok-code-fast-1", variant: "low" }
13954
+ critic: { model: "github-copilot/grok-code-fast-1", variant: "high" },
13955
+ synthesizer: { model: "github-copilot/grok-code-fast-1", variant: "low" },
13956
+ surveyor: { model: "github-copilot/grok-code-fast-1", variant: "low" },
13957
+ architect: { model: "github-copilot/grok-code-fast-1", variant: "medium" },
13958
+ writer: { model: "github-copilot/grok-code-fast-1", variant: "low" }
13946
13959
  },
13947
13960
  "zai-plan": {
13948
13961
  orchestrator: { model: "zai-coding-plan/glm-4.7" },
13949
- oracle: { model: "zai-coding-plan/glm-4.7", variant: "high" },
13950
- librarian: { model: "zai-coding-plan/glm-4.7", variant: "low" },
13951
- explorer: { model: "zai-coding-plan/glm-4.7", variant: "low" },
13952
- designer: { model: "zai-coding-plan/glm-4.7", variant: "medium" },
13953
- fixer: { model: "zai-coding-plan/glm-4.7", variant: "low" }
13962
+ critic: { model: "zai-coding-plan/glm-4.7", variant: "high" },
13963
+ synthesizer: { model: "zai-coding-plan/glm-4.7", variant: "low" },
13964
+ surveyor: { model: "zai-coding-plan/glm-4.7", variant: "low" },
13965
+ architect: { model: "zai-coding-plan/glm-4.7", variant: "medium" },
13966
+ writer: { model: "zai-coding-plan/glm-4.7", variant: "low" }
13954
13967
  },
13955
13968
  antigravity: {
13956
13969
  orchestrator: { model: "google/antigravity-gemini-3-flash" },
13957
- oracle: { model: "google/antigravity-gemini-3.1-pro" },
13958
- librarian: {
13970
+ critic: { model: "google/antigravity-gemini-3.1-pro" },
13971
+ synthesizer: {
13959
13972
  model: "google/antigravity-gemini-3-flash",
13960
13973
  variant: "low"
13961
13974
  },
13962
- explorer: {
13975
+ surveyor: {
13963
13976
  model: "google/antigravity-gemini-3-flash",
13964
13977
  variant: "low"
13965
13978
  },
13966
- designer: {
13979
+ architect: {
13967
13980
  model: "google/antigravity-gemini-3-flash",
13968
13981
  variant: "medium"
13969
13982
  },
13970
- fixer: { model: "google/antigravity-gemini-3-flash", variant: "low" }
13983
+ writer: { model: "google/antigravity-gemini-3-flash", variant: "low" }
13971
13984
  },
13972
13985
  chutes: {
13973
13986
  orchestrator: { model: "chutes/kimi-k2.5" },
13974
- oracle: { model: "chutes/kimi-k2.5", variant: "high" },
13975
- librarian: { model: "chutes/minimax-m2.1", variant: "low" },
13976
- explorer: { model: "chutes/minimax-m2.1", variant: "low" },
13977
- designer: { model: "chutes/kimi-k2.5", variant: "medium" },
13978
- fixer: { model: "chutes/minimax-m2.1", variant: "low" }
13987
+ critic: { model: "chutes/kimi-k2.5", variant: "high" },
13988
+ synthesizer: { model: "chutes/minimax-m2.1", variant: "low" },
13989
+ surveyor: { model: "chutes/minimax-m2.1", variant: "low" },
13990
+ architect: { model: "chutes/kimi-k2.5", variant: "medium" },
13991
+ writer: { model: "chutes/minimax-m2.1", variant: "low" }
13979
13992
  },
13980
13993
  "zen-free": {
13981
13994
  orchestrator: { model: "opencode/big-pickle" },
13982
- oracle: { model: "opencode/big-pickle", variant: "high" },
13983
- librarian: { model: "opencode/big-pickle", variant: "low" },
13984
- explorer: { model: "opencode/big-pickle", variant: "low" },
13985
- designer: { model: "opencode/big-pickle", variant: "medium" },
13986
- fixer: { model: "opencode/big-pickle", variant: "low" }
13995
+ critic: { model: "opencode/big-pickle", variant: "high" },
13996
+ synthesizer: { model: "opencode/big-pickle", variant: "low" },
13997
+ surveyor: { model: "opencode/big-pickle", variant: "low" },
13998
+ architect: { model: "opencode/big-pickle", variant: "medium" },
13999
+ writer: { model: "opencode/big-pickle", variant: "low" }
13987
14000
  }
13988
14001
  };
13989
14002
  function generateAntigravityMixedPreset(config2, existingPreset) {
@@ -13991,7 +14004,7 @@ function generateAntigravityMixedPreset(config2, existingPreset) {
13991
14004
  const createAgentConfig = (agentName, modelInfo) => {
13992
14005
  const isOrchestrator = agentName === "orchestrator";
13993
14006
  const skills = isOrchestrator ? ["*"] : RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName);
13994
- if (agentName === "designer" && !skills.includes("agent-browser")) {
14007
+ if (agentName === "architect" && !skills.includes("agent-browser")) {
13995
14008
  skills.push("agent-browser");
13996
14009
  }
13997
14010
  return {
@@ -14005,7 +14018,7 @@ function generateAntigravityMixedPreset(config2, existingPreset) {
14005
14018
  model: "google/antigravity-gemini-3-flash"
14006
14019
  };
14007
14020
  const chutesPrimary = config2.selectedChutesPrimaryModel ?? MODEL_MAPPINGS.chutes.orchestrator.model;
14008
- const chutesSupport = config2.selectedChutesSecondaryModel ?? MODEL_MAPPINGS.chutes.explorer.model;
14021
+ const chutesSupport = config2.selectedChutesSecondaryModel ?? MODEL_MAPPINGS.chutes.surveyor.model;
14009
14022
  if (config2.hasKimi) {
14010
14023
  result.orchestrator = createAgentConfig("orchestrator", MODEL_MAPPINGS.kimi.orchestrator);
14011
14024
  } else if (config2.hasChutes) {
@@ -14016,45 +14029,45 @@ function generateAntigravityMixedPreset(config2, existingPreset) {
14016
14029
  result.orchestrator = createAgentConfig("orchestrator", MODEL_MAPPINGS.antigravity.orchestrator);
14017
14030
  }
14018
14031
  if (config2.hasOpenAI) {
14019
- result.oracle = createAgentConfig("oracle", MODEL_MAPPINGS.openai.oracle);
14020
- } else if (!result.oracle) {
14021
- result.oracle = createAgentConfig("oracle", MODEL_MAPPINGS.antigravity.oracle);
14032
+ result.critic = createAgentConfig("critic", MODEL_MAPPINGS.openai.critic);
14033
+ } else if (!result.critic) {
14034
+ result.critic = createAgentConfig("critic", MODEL_MAPPINGS.antigravity.critic);
14022
14035
  }
14023
- result.explorer = createAgentConfig("explorer", {
14036
+ result.surveyor = createAgentConfig("surveyor", {
14024
14037
  ...antigravityFlash,
14025
14038
  variant: "low"
14026
14039
  });
14027
14040
  if (config2.hasChutes) {
14028
- result.librarian = createAgentConfig("librarian", {
14041
+ result.synthesizer = createAgentConfig("synthesizer", {
14029
14042
  model: chutesSupport,
14030
14043
  variant: "low"
14031
14044
  });
14032
- result.designer = createAgentConfig("designer", {
14045
+ result.architect = createAgentConfig("architect", {
14033
14046
  model: chutesPrimary,
14034
14047
  variant: "medium"
14035
14048
  });
14036
14049
  } else {
14037
- result.librarian = createAgentConfig("librarian", {
14050
+ result.synthesizer = createAgentConfig("synthesizer", {
14038
14051
  ...antigravityFlash,
14039
14052
  variant: "low"
14040
14053
  });
14041
- result.designer = createAgentConfig("designer", {
14054
+ result.architect = createAgentConfig("architect", {
14042
14055
  ...antigravityFlash,
14043
14056
  variant: "medium"
14044
14057
  });
14045
14058
  }
14046
14059
  if (config2.hasOpenAI) {
14047
- result.fixer = createAgentConfig("fixer", {
14048
- ...MODEL_MAPPINGS.openai.oracle,
14060
+ result.writer = createAgentConfig("writer", {
14061
+ ...MODEL_MAPPINGS.openai.critic,
14049
14062
  variant: "low"
14050
14063
  });
14051
14064
  } else if (config2.hasChutes) {
14052
- result.fixer = createAgentConfig("fixer", {
14065
+ result.writer = createAgentConfig("writer", {
14053
14066
  model: chutesSupport,
14054
14067
  variant: "low"
14055
14068
  });
14056
14069
  } else {
14057
- result.fixer = createAgentConfig("fixer", {
14070
+ result.writer = createAgentConfig("writer", {
14058
14071
  ...antigravityFlash,
14059
14072
  variant: "low"
14060
14073
  });
@@ -14129,7 +14142,7 @@ function generateLiteConfig(installConfig) {
14129
14142
  const createAgentConfig = (agentName, modelInfo) => {
14130
14143
  const isOrchestrator = agentName === "orchestrator";
14131
14144
  const skills = isOrchestrator ? ["*"] : RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName);
14132
- if (agentName === "designer" && !skills.includes("agent-browser")) {
14145
+ if (agentName === "architect" && !skills.includes("agent-browser")) {
14133
14146
  skills.push("agent-browser");
14134
14147
  }
14135
14148
  return {
@@ -14172,12 +14185,12 @@ function generateLiteConfig(installConfig) {
14172
14185
  };
14173
14186
  if (!hasExternalProviders) {
14174
14187
  setAgent("orchestrator", primaryModel);
14175
- setAgent("oracle", primaryModel);
14176
- setAgent("designer", primaryModel);
14188
+ setAgent("critic", primaryModel);
14189
+ setAgent("architect", primaryModel);
14177
14190
  }
14178
- setAgent("librarian", secondaryModel);
14179
- setAgent("explorer", secondaryModel);
14180
- setAgent("fixer", secondaryModel);
14191
+ setAgent("synthesizer", secondaryModel);
14192
+ setAgent("surveyor", secondaryModel);
14193
+ setAgent("writer", secondaryModel);
14181
14194
  };
14182
14195
  const applyChutesAssignments = (presetAgents) => {
14183
14196
  if (!installConfig.hasChutes)
@@ -14193,11 +14206,11 @@ function generateLiteConfig(installConfig) {
14193
14206
  presetAgents[agentName] = createAgentConfig(agentName, { model });
14194
14207
  };
14195
14208
  setAgent("orchestrator", primaryModel);
14196
- setAgent("oracle", primaryModel);
14197
- setAgent("designer", primaryModel);
14198
- setAgent("librarian", secondaryModel);
14199
- setAgent("explorer", secondaryModel);
14200
- setAgent("fixer", secondaryModel);
14209
+ setAgent("critic", primaryModel);
14210
+ setAgent("architect", primaryModel);
14211
+ setAgent("synthesizer", secondaryModel);
14212
+ setAgent("surveyor", secondaryModel);
14213
+ setAgent("writer", secondaryModel);
14201
14214
  };
14202
14215
  const dedupeModels = (models) => {
14203
14216
  const seen = new Set;
@@ -14213,7 +14226,7 @@ function generateLiteConfig(installConfig) {
14213
14226
  const getOpenCodeFallbackForAgent = (agentName) => {
14214
14227
  if (!installConfig.useOpenCodeFreeModels)
14215
14228
  return;
14216
- const isSupport = agentName === "explorer" || agentName === "librarian" || agentName === "fixer";
14229
+ const isSupport = agentName === "surveyor" || agentName === "synthesizer" || agentName === "writer";
14217
14230
  if (isSupport) {
14218
14231
  return installConfig.selectedOpenCodeSecondaryModel ?? installConfig.selectedOpenCodePrimaryModel;
14219
14232
  }
@@ -14222,7 +14235,7 @@ function generateLiteConfig(installConfig) {
14222
14235
  const getChutesFallbackForAgent = (agentName) => {
14223
14236
  if (!installConfig.hasChutes)
14224
14237
  return;
14225
- const isSupport = agentName === "explorer" || agentName === "librarian" || agentName === "fixer";
14238
+ const isSupport = agentName === "surveyor" || agentName === "synthesizer" || agentName === "writer";
14226
14239
  if (isSupport) {
14227
14240
  return installConfig.selectedChutesSecondaryModel ?? installConfig.selectedChutesPrimaryModel ?? MODEL_MAPPINGS.chutes[agentName].model;
14228
14241
  }
@@ -14258,8 +14271,8 @@ function generateLiteConfig(installConfig) {
14258
14271
  const mapping = MODEL_MAPPINGS[mappingName];
14259
14272
  return Object.fromEntries(Object.entries(mapping).map(([agentName, modelInfo]) => {
14260
14273
  let activeModelInfo = { ...modelInfo };
14261
- if (activePreset === "kimi" && installConfig.hasOpenAI && agentName === "oracle") {
14262
- activeModelInfo = { ...MODEL_MAPPINGS.openai.oracle };
14274
+ if (activePreset === "kimi" && installConfig.hasOpenAI && agentName === "critic") {
14275
+ activeModelInfo = { ...MODEL_MAPPINGS.openai.critic };
14263
14276
  }
14264
14277
  return [agentName, createAgentConfig(agentName, activeModelInfo)];
14265
14278
  }));
@@ -14757,27 +14770,27 @@ function kimiVersionBonus(agent, model) {
14757
14770
  const isMinimaxM21 = isChutes && /minimax[-_ ]?m2\.1/.test(lowered);
14758
14771
  const qwenPenalty = {
14759
14772
  orchestrator: -6,
14760
- oracle: -6,
14761
- designer: -8,
14762
- explorer: -6,
14763
- librarian: -12,
14764
- fixer: -12
14773
+ critic: -6,
14774
+ architect: -8,
14775
+ surveyor: -6,
14776
+ synthesizer: -12,
14777
+ writer: -12
14765
14778
  };
14766
14779
  const kimiBonus = {
14767
14780
  orchestrator: 1,
14768
- oracle: 1,
14769
- designer: 3,
14770
- explorer: 2,
14771
- librarian: 2,
14772
- fixer: 3
14781
+ critic: 1,
14782
+ architect: 3,
14783
+ surveyor: 2,
14784
+ synthesizer: 2,
14785
+ writer: 3
14773
14786
  };
14774
14787
  const minimaxBonus = {
14775
14788
  orchestrator: 1,
14776
- oracle: 1,
14777
- designer: 2,
14778
- explorer: 4,
14779
- librarian: 4,
14780
- fixer: 4
14789
+ critic: 1,
14790
+ architect: 2,
14791
+ surveyor: 4,
14792
+ synthesizer: 4,
14793
+ writer: 4
14781
14794
  };
14782
14795
  if (isQwen3)
14783
14796
  return qwenPenalty[agent];
@@ -14797,11 +14810,11 @@ function extractFeatureVector(model, agent, externalSignals) {
14797
14810
  const quality = (signal?.qualityScore ?? 0) / 100;
14798
14811
  const coding = (signal?.codingScore ?? 0) / 100;
14799
14812
  const pricePenalty = Math.min(blendedPrice(signal), 50) / 10;
14800
- const explorerLatencyMultiplier = agent === "explorer" ? 1.4 : 1;
14813
+ const explorerLatencyMultiplier = agent === "surveyor" ? 1.4 : 1;
14801
14814
  return {
14802
14815
  status: statusValue(model.status),
14803
14816
  context: normalizedContext,
14804
- output: agent === "designer" ? designerOutputScore : normalizedOutput,
14817
+ output: agent === "architect" ? designerOutputScore : normalizedOutput,
14805
14818
  versionBonus,
14806
14819
  reasoning: capability(model.reasoning),
14807
14820
  toolcall: capability(model.toolcall),
@@ -14835,33 +14848,33 @@ var AGENT_WEIGHT_OVERRIDES = {
14835
14848
  coding: 16,
14836
14849
  latencyPenalty: -2
14837
14850
  },
14838
- oracle: {
14851
+ critic: {
14839
14852
  reasoning: 26,
14840
14853
  quality: 20,
14841
14854
  coding: 18,
14842
14855
  latencyPenalty: -2,
14843
14856
  output: 7
14844
14857
  },
14845
- designer: {
14858
+ architect: {
14846
14859
  attachment: 12,
14847
14860
  output: 10,
14848
14861
  quality: 16,
14849
14862
  coding: 10
14850
14863
  },
14851
- explorer: {
14864
+ surveyor: {
14852
14865
  latencyPenalty: -8,
14853
14866
  toolcall: 24,
14854
14867
  reasoning: 2,
14855
14868
  context: 4,
14856
14869
  output: 4
14857
14870
  },
14858
- librarian: {
14871
+ synthesizer: {
14859
14872
  context: 14,
14860
14873
  output: 10,
14861
14874
  quality: 18,
14862
14875
  coding: 14
14863
14876
  },
14864
- fixer: {
14877
+ writer: {
14865
14878
  coding: 28,
14866
14879
  toolcall: 22,
14867
14880
  reasoning: 12,
@@ -14923,28 +14936,28 @@ function rankModelsV2(models, agent, externalSignals) {
14923
14936
  // src/cli/dynamic-model-selection.ts
14924
14937
  var AGENTS = [
14925
14938
  "orchestrator",
14926
- "oracle",
14927
- "designer",
14928
- "explorer",
14929
- "librarian",
14930
- "fixer"
14939
+ "critic",
14940
+ "architect",
14941
+ "surveyor",
14942
+ "synthesizer",
14943
+ "writer"
14931
14944
  ];
14932
14945
  var FREE_BIASED_PROVIDERS = new Set(["opencode"]);
14933
14946
  var PRIMARY_ASSIGNMENT_ORDER = [
14934
- "oracle",
14947
+ "critic",
14935
14948
  "orchestrator",
14936
- "fixer",
14937
- "designer",
14938
- "librarian",
14939
- "explorer"
14949
+ "writer",
14950
+ "architect",
14951
+ "synthesizer",
14952
+ "surveyor"
14940
14953
  ];
14941
14954
  var ROLE_VARIANT = {
14942
14955
  orchestrator: undefined,
14943
- oracle: "high",
14944
- designer: "medium",
14945
- explorer: "low",
14946
- librarian: "low",
14947
- fixer: "low"
14956
+ critic: "high",
14957
+ architect: "medium",
14958
+ surveyor: "low",
14959
+ synthesizer: "low",
14960
+ writer: "low"
14948
14961
  };
14949
14962
  function getEnabledProviders(config2) {
14950
14963
  const providers = [];
@@ -15099,28 +15112,28 @@ function chutesPreferenceAdjustment(agent, model) {
15099
15112
  const isKimiK25 = /kimi-k2\.5|k2\.5/.test(lowered);
15100
15113
  const isMinimaxM21 = /minimax[-_ ]?m2\.1/.test(lowered);
15101
15114
  const qwenPenalty = {
15102
- oracle: -12,
15115
+ critic: -12,
15103
15116
  orchestrator: -10,
15104
- fixer: -22,
15105
- designer: -14,
15106
- librarian: -18,
15107
- explorer: -10
15117
+ writer: -22,
15118
+ architect: -14,
15119
+ synthesizer: -18,
15120
+ surveyor: -10
15108
15121
  };
15109
15122
  const kimiBonus = {
15110
- oracle: 0,
15123
+ critic: 0,
15111
15124
  orchestrator: 0,
15112
- fixer: 8,
15113
- designer: 6,
15114
- librarian: 5,
15115
- explorer: 4
15125
+ writer: 8,
15126
+ architect: 6,
15127
+ synthesizer: 5,
15128
+ surveyor: 4
15116
15129
  };
15117
15130
  const minimaxBonus = {
15118
- oracle: 0,
15131
+ critic: 0,
15119
15132
  orchestrator: 0,
15120
- fixer: 10,
15121
- designer: 3,
15122
- librarian: 9,
15123
- explorer: 12
15133
+ writer: 10,
15134
+ architect: 3,
15135
+ synthesizer: 9,
15136
+ surveyor: 12
15124
15137
  };
15125
15138
  return (isQwen3 ? qwenPenalty[agent] : 0) + (isKimiK25 ? kimiBonus[agent] : 0) + (isMinimaxM21 ? minimaxBonus[agent] : 0);
15126
15139
  }
@@ -15137,7 +15150,7 @@ function roleScore(agent, model, versionRecencyBoost = 0) {
15137
15150
  const deep = tokenScore(lowered, /(opus|pro|thinking|reason|r1|gpt-5|k2\.5)/i, 1);
15138
15151
  const fast = tokenScore(lowered, /(nano|flash|mini|lite|fast|turbo|haiku|small)/i, 1);
15139
15152
  const code = tokenScore(lowered, /(codex|coder|code|dev|program)/i, 1);
15140
- if ((agent === "orchestrator" || agent === "explorer" || agent === "librarian" || agent === "fixer") && !model.toolcall) {
15153
+ if ((agent === "orchestrator" || agent === "surveyor" || agent === "synthesizer" || agent === "writer") && !model.toolcall) {
15141
15154
  return -1e4;
15142
15155
  }
15143
15156
  if (model.status === "deprecated") {
@@ -15157,24 +15170,24 @@ function roleScore(agent, model, versionRecencyBoost = 0) {
15157
15170
  const nonReasoningFlashPenalty2 = flash && !model.reasoning ? -16 : 0;
15158
15171
  return score + reasoning * 40 + toolcall * 25 + deep * 10 + code * 8 + context + flashAdjustment2 + zaiAdjustment2 + nonReasoningFlashPenalty2 + geminiAdjustment + chutesAdjustment + providerBias;
15159
15172
  }
15160
- if (agent === "oracle") {
15173
+ if (agent === "critic") {
15161
15174
  const flashAdjustment2 = flash ? -34 : 0;
15162
15175
  const zaiAdjustment2 = zai47NonFlash ? 16 : zai47Flash ? -18 : 0;
15163
15176
  const nonReasoningFlashPenalty2 = flash && !model.reasoning ? -16 : 0;
15164
15177
  return score + reasoning * 55 + deep * 18 + context * 1.2 + toolcall * 10 + flashAdjustment2 + zaiAdjustment2 + nonReasoningFlashPenalty2 + geminiAdjustment + chutesAdjustment + providerBias;
15165
15178
  }
15166
- if (agent === "designer") {
15179
+ if (agent === "architect") {
15167
15180
  const flashAdjustment2 = flash ? -8 : 0;
15168
15181
  const zaiAdjustment2 = zai47NonFlash ? 10 : zai47Flash ? -8 : 0;
15169
15182
  return score + attachment * 25 + reasoning * 18 + toolcall * 15 + context * 0.8 + output + flashAdjustment2 + zaiAdjustment2 + geminiAdjustment + chutesAdjustment + providerBias;
15170
15183
  }
15171
- if (agent === "explorer") {
15184
+ if (agent === "surveyor") {
15172
15185
  const flashAdjustment2 = flash ? 26 : -10;
15173
15186
  const zaiAdjustment2 = zai47NonFlash ? 2 : zai47Flash ? 6 : 0;
15174
15187
  const deepPenalty = deep * -18;
15175
15188
  return score + fast * 68 + toolcall * 28 + reasoning * 2 + context * 0.2 + flashAdjustment2 + zaiAdjustment2 + deepPenalty + geminiAdjustment + chutesAdjustment + providerBias;
15176
15189
  }
15177
- if (agent === "librarian") {
15190
+ if (agent === "synthesizer") {
15178
15191
  const flashAdjustment2 = flash ? -12 : 0;
15179
15192
  const zaiAdjustment2 = zai47NonFlash ? 16 : zai47Flash ? -18 : 0;
15180
15193
  return score + context * 30 + toolcall * 22 + reasoning * 15 + output * 10 + flashAdjustment2 + zaiAdjustment2 + geminiAdjustment + chutesAdjustment + providerBias;
@@ -15194,7 +15207,7 @@ function getExternalSignalBoost(agent, model, externalSignals) {
15194
15207
  const codingScore = signal.codingScore ?? 0;
15195
15208
  const latencySeconds = signal.latencySeconds;
15196
15209
  const blendedPrice2 = signal.inputPricePer1M !== undefined && signal.outputPricePer1M !== undefined ? signal.inputPricePer1M * 0.75 + signal.outputPricePer1M * 0.25 : signal.inputPricePer1M ?? signal.outputPricePer1M ?? 0;
15197
- if (agent === "explorer") {
15210
+ if (agent === "surveyor") {
15198
15211
  const qualityBoost2 = qualityScore * 0.05;
15199
15212
  const codingBoost2 = codingScore * 0.08;
15200
15213
  const latencyPenalty2 = typeof latencySeconds === "number" && Number.isFinite(latencySeconds) ? Math.min(latencySeconds, 12) * 3.2 + (latencySeconds > 7 ? 16 : latencySeconds > 4 ? 10 : 0) : 0;
@@ -15337,17 +15350,17 @@ function chooseProviderRepresentative(providerModels, agent, externalSignals, ve
15337
15350
  return nonFlashBest;
15338
15351
  const flashScore = combinedScore(agent, flashBest, externalSignals, versionRecencyMap);
15339
15352
  const nonFlashScore = combinedScore(agent, nonFlashBest, externalSignals, versionRecencyMap);
15340
- const threshold = agent === "explorer" ? -6 : 12;
15353
+ const threshold = agent === "surveyor" ? -6 : 12;
15341
15354
  return flashScore >= nonFlashScore + threshold ? flashBest : nonFlashBest;
15342
15355
  }
15343
15356
  function getQualityWindow(agent) {
15344
- if (agent === "oracle" || agent === "orchestrator")
15357
+ if (agent === "critic" || agent === "orchestrator")
15345
15358
  return 12;
15346
- if (agent === "fixer")
15359
+ if (agent === "writer")
15347
15360
  return 15;
15348
- if (agent === "designer")
15361
+ if (agent === "architect")
15349
15362
  return 16;
15350
- if (agent === "librarian")
15363
+ if (agent === "synthesizer")
15351
15364
  return 18;
15352
15365
  return 22;
15353
15366
  }
@@ -15363,7 +15376,7 @@ function getProviderBundle(providerModels, agent, externalSignals, versionRecenc
15363
15376
  const score1 = combinedScore(agent, representative, externalSignals, versionRecencyMap);
15364
15377
  const score2 = combinedScore(agent, second, externalSignals, versionRecencyMap);
15365
15378
  const gap = Math.abs(score1 - score2);
15366
- const includeSecond = representative.providerID === "chutes" || gap <= (agent === "oracle" || agent === "orchestrator" ? 8 : agent === "designer" || agent === "librarian" ? 12 : agent === "fixer" ? 15 : 18);
15379
+ const includeSecond = representative.providerID === "chutes" || gap <= (agent === "critic" || agent === "orchestrator" ? 8 : agent === "architect" || agent === "synthesizer" ? 12 : agent === "writer" ? 15 : 18);
15367
15380
  return includeSecond ? [representative.model, second.model] : [representative.model];
15368
15381
  }
15369
15382
  function selectPrimaryWithDiversity(candidates, agent, providerUsage, targetByProvider, remainingSlots, externalSignals, versionRecencyMap) {
@@ -15423,7 +15436,7 @@ function selectPrimaryWithDiversity(candidates, agent, providerUsage, targetByPr
15423
15436
  chosen = bestUnused;
15424
15437
  }
15425
15438
  }
15426
- if (agent !== "explorer" && isZai47Model(chosen.model) && hasFlashToken(chosen.model)) {
15439
+ if (agent !== "surveyor" && isZai47Model(chosen.model) && hasFlashToken(chosen.model)) {
15427
15440
  const kimiCandidate = candidateScores.find((item) => isKimiK25Model(item.model));
15428
15441
  if (kimiCandidate && kimiCandidate.rawScore >= chosen.rawScore - 2) {
15429
15442
  chosen = kimiCandidate;
@@ -15513,12 +15526,12 @@ function buildDynamicModelPlan(catalog, config2, externalSignals, options) {
15513
15526
  const getSelectedChutesForAgent = (agent) => {
15514
15527
  if (!config2.hasChutes)
15515
15528
  return;
15516
- return agent === "explorer" || agent === "librarian" || agent === "fixer" ? config2.selectedChutesSecondaryModel ?? config2.selectedChutesPrimaryModel : config2.selectedChutesPrimaryModel;
15529
+ return agent === "surveyor" || agent === "synthesizer" || agent === "writer" ? config2.selectedChutesSecondaryModel ?? config2.selectedChutesPrimaryModel : config2.selectedChutesPrimaryModel;
15517
15530
  };
15518
15531
  const getSelectedOpenCodeForAgent = (agent) => {
15519
15532
  if (!config2.useOpenCodeFreeModels)
15520
15533
  return;
15521
- return agent === "explorer" || agent === "librarian" || agent === "fixer" ? config2.selectedOpenCodeSecondaryModel ?? config2.selectedOpenCodePrimaryModel : config2.selectedOpenCodePrimaryModel;
15534
+ return agent === "surveyor" || agent === "synthesizer" || agent === "writer" ? config2.selectedOpenCodeSecondaryModel ?? config2.selectedOpenCodePrimaryModel : config2.selectedOpenCodePrimaryModel;
15522
15535
  };
15523
15536
  const getPinnedModelForProvider = (agent, providerID) => {
15524
15537
  if (providerID === "chutes")
@@ -16489,11 +16502,11 @@ async function runManualSetupMode(rl, detected, modelsOnly = false) {
16489
16502
  const manualAgentConfigs = {};
16490
16503
  const agentNames = [
16491
16504
  "orchestrator",
16492
- "oracle",
16493
- "designer",
16494
- "explorer",
16495
- "librarian",
16496
- "fixer"
16505
+ "critic",
16506
+ "architect",
16507
+ "surveyor",
16508
+ "synthesizer",
16509
+ "writer"
16497
16510
  ];
16498
16511
  for (const agentName of agentNames) {
16499
16512
  manualAgentConfigs[agentName] = await configureAgentManually(rl, agentName, availableModels);
@@ -16595,13 +16608,13 @@ async function runInteractiveMode(detected, modelsOnly = false) {
16595
16608
  if (recommendedPrimary) {
16596
16609
  printInfo("This step configures only OpenCode Free primary/support models.");
16597
16610
  console.log(`${BOLD}OpenCode Free Models:${RESET}`);
16598
- selectedOpenCodePrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose primary model for orchestrator/oracle");
16611
+ selectedOpenCodePrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose primary model for orchestrator/critic");
16599
16612
  }
16600
16613
  if (selectedOpenCodePrimaryModel) {
16601
16614
  const recommendedSecondary = pickSupportOpenCodeModel(discovery.models, selectedOpenCodePrimaryModel)?.model ?? selectedOpenCodePrimaryModel;
16602
16615
  const openCodeSupportList = discovery.models.filter((model) => model.model !== selectedOpenCodePrimaryModel);
16603
16616
  const openCodeSupportDefault = recommendedSecondary === selectedOpenCodePrimaryModel ? openCodeSupportList[0]?.model ?? recommendedSecondary : recommendedSecondary;
16604
- selectedOpenCodeSecondaryModel = await askModelSelection(rl, openCodeSupportList, openCodeSupportDefault, "Choose support model for explorer/librarian/fixer");
16617
+ selectedOpenCodeSecondaryModel = await askModelSelection(rl, openCodeSupportList, openCodeSupportDefault, "Choose support model for surveyor/synthesizer/writer");
16605
16618
  }
16606
16619
  console.log();
16607
16620
  }
@@ -16637,13 +16650,13 @@ async function runInteractiveMode(detected, modelsOnly = false) {
16637
16650
  const recommendedPrimary = pickBestCodingChutesModel(discovery.models)?.model ?? discovery.models[0]?.model;
16638
16651
  if (recommendedPrimary) {
16639
16652
  console.log(`${BOLD}Chutes Models:${RESET}`);
16640
- selectedChutesPrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose Chutes primary model for orchestrator/oracle/designer");
16653
+ selectedChutesPrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose Chutes primary model for orchestrator/critic/architect");
16641
16654
  }
16642
16655
  if (selectedChutesPrimaryModel) {
16643
16656
  const recommendedSecondary = pickSupportChutesModel(discovery.models, selectedChutesPrimaryModel)?.model ?? selectedChutesPrimaryModel;
16644
16657
  const chutesSupportList = discovery.models.filter((model) => model.model !== selectedChutesPrimaryModel);
16645
16658
  const chutesSupportDefault = recommendedSecondary === selectedChutesPrimaryModel ? chutesSupportList[0]?.model ?? recommendedSecondary : recommendedSecondary;
16646
- selectedChutesSecondaryModel = await askModelSelection(rl, chutesSupportList, chutesSupportDefault, "Choose Chutes support model for explorer/librarian/fixer");
16659
+ selectedChutesSecondaryModel = await askModelSelection(rl, chutesSupportList, chutesSupportDefault, "Choose Chutes support model for surveyor/synthesizer/writer");
16647
16660
  }
16648
16661
  console.log();
16649
16662
  }
@@ -4,23 +4,23 @@ export declare const MODEL_MAPPINGS: {
4
4
  readonly orchestrator: {
5
5
  readonly model: "kimi-for-coding/k2p5";
6
6
  };
7
- readonly oracle: {
7
+ readonly critic: {
8
8
  readonly model: "kimi-for-coding/k2p5";
9
9
  readonly variant: "high";
10
10
  };
11
- readonly librarian: {
11
+ readonly synthesizer: {
12
12
  readonly model: "kimi-for-coding/k2p5";
13
13
  readonly variant: "low";
14
14
  };
15
- readonly explorer: {
15
+ readonly surveyor: {
16
16
  readonly model: "kimi-for-coding/k2p5";
17
17
  readonly variant: "low";
18
18
  };
19
- readonly designer: {
19
+ readonly architect: {
20
20
  readonly model: "kimi-for-coding/k2p5";
21
21
  readonly variant: "medium";
22
22
  };
23
- readonly fixer: {
23
+ readonly writer: {
24
24
  readonly model: "kimi-for-coding/k2p5";
25
25
  readonly variant: "low";
26
26
  };
@@ -29,23 +29,23 @@ export declare const MODEL_MAPPINGS: {
29
29
  readonly orchestrator: {
30
30
  readonly model: "openai/gpt-5.3-codex";
31
31
  };
32
- readonly oracle: {
32
+ readonly critic: {
33
33
  readonly model: "openai/gpt-5.3-codex";
34
34
  readonly variant: "high";
35
35
  };
36
- readonly librarian: {
36
+ readonly synthesizer: {
37
37
  readonly model: "openai/gpt-5.1-codex-mini";
38
38
  readonly variant: "low";
39
39
  };
40
- readonly explorer: {
40
+ readonly surveyor: {
41
41
  readonly model: "openai/gpt-5.1-codex-mini";
42
42
  readonly variant: "low";
43
43
  };
44
- readonly designer: {
44
+ readonly architect: {
45
45
  readonly model: "openai/gpt-5.1-codex-mini";
46
46
  readonly variant: "medium";
47
47
  };
48
- readonly fixer: {
48
+ readonly writer: {
49
49
  readonly model: "openai/gpt-5.1-codex-mini";
50
50
  readonly variant: "low";
51
51
  };
@@ -54,23 +54,23 @@ export declare const MODEL_MAPPINGS: {
54
54
  readonly orchestrator: {
55
55
  readonly model: "anthropic/claude-opus-4-6";
56
56
  };
57
- readonly oracle: {
57
+ readonly critic: {
58
58
  readonly model: "anthropic/claude-opus-4-6";
59
59
  readonly variant: "high";
60
60
  };
61
- readonly librarian: {
61
+ readonly synthesizer: {
62
62
  readonly model: "anthropic/claude-sonnet-4-5";
63
63
  readonly variant: "low";
64
64
  };
65
- readonly explorer: {
65
+ readonly surveyor: {
66
66
  readonly model: "anthropic/claude-haiku-4-5";
67
67
  readonly variant: "low";
68
68
  };
69
- readonly designer: {
69
+ readonly architect: {
70
70
  readonly model: "anthropic/claude-sonnet-4-5";
71
71
  readonly variant: "medium";
72
72
  };
73
- readonly fixer: {
73
+ readonly writer: {
74
74
  readonly model: "anthropic/claude-sonnet-4-5";
75
75
  readonly variant: "low";
76
76
  };
@@ -79,23 +79,23 @@ export declare const MODEL_MAPPINGS: {
79
79
  readonly orchestrator: {
80
80
  readonly model: "github-copilot/grok-code-fast-1";
81
81
  };
82
- readonly oracle: {
82
+ readonly critic: {
83
83
  readonly model: "github-copilot/grok-code-fast-1";
84
84
  readonly variant: "high";
85
85
  };
86
- readonly librarian: {
86
+ readonly synthesizer: {
87
87
  readonly model: "github-copilot/grok-code-fast-1";
88
88
  readonly variant: "low";
89
89
  };
90
- readonly explorer: {
90
+ readonly surveyor: {
91
91
  readonly model: "github-copilot/grok-code-fast-1";
92
92
  readonly variant: "low";
93
93
  };
94
- readonly designer: {
94
+ readonly architect: {
95
95
  readonly model: "github-copilot/grok-code-fast-1";
96
96
  readonly variant: "medium";
97
97
  };
98
- readonly fixer: {
98
+ readonly writer: {
99
99
  readonly model: "github-copilot/grok-code-fast-1";
100
100
  readonly variant: "low";
101
101
  };
@@ -104,23 +104,23 @@ export declare const MODEL_MAPPINGS: {
104
104
  readonly orchestrator: {
105
105
  readonly model: "zai-coding-plan/glm-4.7";
106
106
  };
107
- readonly oracle: {
107
+ readonly critic: {
108
108
  readonly model: "zai-coding-plan/glm-4.7";
109
109
  readonly variant: "high";
110
110
  };
111
- readonly librarian: {
111
+ readonly synthesizer: {
112
112
  readonly model: "zai-coding-plan/glm-4.7";
113
113
  readonly variant: "low";
114
114
  };
115
- readonly explorer: {
115
+ readonly surveyor: {
116
116
  readonly model: "zai-coding-plan/glm-4.7";
117
117
  readonly variant: "low";
118
118
  };
119
- readonly designer: {
119
+ readonly architect: {
120
120
  readonly model: "zai-coding-plan/glm-4.7";
121
121
  readonly variant: "medium";
122
122
  };
123
- readonly fixer: {
123
+ readonly writer: {
124
124
  readonly model: "zai-coding-plan/glm-4.7";
125
125
  readonly variant: "low";
126
126
  };
@@ -129,22 +129,22 @@ export declare const MODEL_MAPPINGS: {
129
129
  readonly orchestrator: {
130
130
  readonly model: "google/antigravity-gemini-3-flash";
131
131
  };
132
- readonly oracle: {
132
+ readonly critic: {
133
133
  readonly model: "google/antigravity-gemini-3.1-pro";
134
134
  };
135
- readonly librarian: {
135
+ readonly synthesizer: {
136
136
  readonly model: "google/antigravity-gemini-3-flash";
137
137
  readonly variant: "low";
138
138
  };
139
- readonly explorer: {
139
+ readonly surveyor: {
140
140
  readonly model: "google/antigravity-gemini-3-flash";
141
141
  readonly variant: "low";
142
142
  };
143
- readonly designer: {
143
+ readonly architect: {
144
144
  readonly model: "google/antigravity-gemini-3-flash";
145
145
  readonly variant: "medium";
146
146
  };
147
- readonly fixer: {
147
+ readonly writer: {
148
148
  readonly model: "google/antigravity-gemini-3-flash";
149
149
  readonly variant: "low";
150
150
  };
@@ -153,23 +153,23 @@ export declare const MODEL_MAPPINGS: {
153
153
  readonly orchestrator: {
154
154
  readonly model: "chutes/kimi-k2.5";
155
155
  };
156
- readonly oracle: {
156
+ readonly critic: {
157
157
  readonly model: "chutes/kimi-k2.5";
158
158
  readonly variant: "high";
159
159
  };
160
- readonly librarian: {
160
+ readonly synthesizer: {
161
161
  readonly model: "chutes/minimax-m2.1";
162
162
  readonly variant: "low";
163
163
  };
164
- readonly explorer: {
164
+ readonly surveyor: {
165
165
  readonly model: "chutes/minimax-m2.1";
166
166
  readonly variant: "low";
167
167
  };
168
- readonly designer: {
168
+ readonly architect: {
169
169
  readonly model: "chutes/kimi-k2.5";
170
170
  readonly variant: "medium";
171
171
  };
172
- readonly fixer: {
172
+ readonly writer: {
173
173
  readonly model: "chutes/minimax-m2.1";
174
174
  readonly variant: "low";
175
175
  };
@@ -178,23 +178,23 @@ export declare const MODEL_MAPPINGS: {
178
178
  readonly orchestrator: {
179
179
  readonly model: "opencode/big-pickle";
180
180
  };
181
- readonly oracle: {
181
+ readonly critic: {
182
182
  readonly model: "opencode/big-pickle";
183
183
  readonly variant: "high";
184
184
  };
185
- readonly librarian: {
185
+ readonly synthesizer: {
186
186
  readonly model: "opencode/big-pickle";
187
187
  readonly variant: "low";
188
188
  };
189
- readonly explorer: {
189
+ readonly surveyor: {
190
190
  readonly model: "opencode/big-pickle";
191
191
  readonly variant: "low";
192
192
  };
193
- readonly designer: {
193
+ readonly architect: {
194
194
  readonly model: "opencode/big-pickle";
195
195
  readonly variant: "medium";
196
196
  };
197
- readonly fixer: {
197
+ readonly writer: {
198
198
  readonly model: "opencode/big-pickle";
199
199
  readonly variant: "low";
200
200
  };
@@ -2,7 +2,7 @@ import type { DiscoveredModel, ExternalSignalMap } from '../types';
2
2
  export type ScoreFeatureName = 'status' | 'context' | 'output' | 'versionBonus' | 'reasoning' | 'toolcall' | 'attachment' | 'quality' | 'coding' | 'latencyPenalty' | 'pricePenalty';
3
3
  export type FeatureVector = Record<ScoreFeatureName, number>;
4
4
  export type FeatureWeights = Record<ScoreFeatureName, number>;
5
- export type ScoringAgentName = 'orchestrator' | 'oracle' | 'designer' | 'explorer' | 'librarian' | 'fixer';
5
+ export type ScoringAgentName = 'orchestrator' | 'critic' | 'architect' | 'surveyor' | 'synthesizer' | 'writer';
6
6
  export interface ScoringContext {
7
7
  agent: ScoringAgentName;
8
8
  externalSignals?: ExternalSignalMap;
@@ -20,7 +20,7 @@ export declare function loadPluginConfig(directory: string): PluginConfig;
20
20
  * If preset is provided and safe for paths, it first checks {preset}/ subdirectory,
21
21
  * then falls back to the root prompts directory.
22
22
  *
23
- * @param agentName - Name of the agent (e.g., "orchestrator", "explorer")
23
+ * @param agentName - Name of the agent (e.g., "orchestrator", "surveyor")
24
24
  * @param preset - Optional preset name for preset-scoped prompt lookup
25
25
  * @returns Object with prompt and/or appendPrompt if files exist
26
26
  */
package/dist/index.js CHANGED
@@ -16,50 +16,63 @@ var __export = (target, all) => {
16
16
 
17
17
  // src/cli/custom-skills.ts
18
18
  var CUSTOM_SKILLS = [
19
- {
20
- name: "cartography",
21
- description: "Repository understanding and hierarchical codemap generation",
22
- allowedAgents: ["orchestrator", "explorer"],
23
- sourcePath: "src/skills/cartography"
24
- }
25
- ];
26
-
27
- // src/cli/skills.ts
28
- var RECOMMENDED_SKILLS = [
29
19
  {
30
20
  name: "literature-review",
31
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
32
- skillName: "literature-review",
21
+ description: "Structured literature survey workflow",
33
22
  allowedAgents: ["orchestrator", "surveyor", "synthesizer"],
34
- description: "Structured literature survey workflow"
23
+ sourcePath: "src/skills/literature-review"
35
24
  },
36
25
  {
37
26
  name: "hypothesis-generation",
38
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
39
- skillName: "hypothesis-generation",
27
+ description: "Gap-driven hypothesis generation workflow",
40
28
  allowedAgents: ["orchestrator", "synthesizer"],
41
- description: "Gap-driven hypothesis generation workflow"
29
+ sourcePath: "src/skills/hypothesis-generation"
42
30
  },
43
31
  {
44
32
  name: "idea-critique",
45
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
46
- skillName: "idea-critique",
33
+ description: "Multi-round adversarial idea review workflow",
47
34
  allowedAgents: ["orchestrator", "critic"],
48
- description: "Multi-round adversarial idea review workflow"
35
+ sourcePath: "src/skills/idea-critique"
49
36
  },
50
37
  {
51
38
  name: "experiment-design",
52
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
53
- skillName: "experiment-design",
39
+ description: "Experimental plan design workflow",
54
40
  allowedAgents: ["orchestrator", "architect"],
55
- description: "Experimental plan design workflow"
41
+ sourcePath: "src/skills/experiment-design"
56
42
  },
57
43
  {
58
44
  name: "paper-outline",
59
- repo: "https://github.com/ZeguanXiao/oh-my-openidea",
60
- skillName: "paper-outline",
45
+ description: "Paper outline generation workflow",
61
46
  allowedAgents: ["orchestrator", "writer"],
62
- description: "Paper outline generation workflow"
47
+ sourcePath: "src/skills/paper-outline"
48
+ },
49
+ {
50
+ name: "cartography",
51
+ description: "Repository understanding and hierarchical codemap generation",
52
+ allowedAgents: ["orchestrator"],
53
+ sourcePath: "src/skills/cartography"
54
+ }
55
+ ];
56
+
57
+ // src/cli/skills.ts
58
+ var RECOMMENDED_SKILLS = [
59
+ {
60
+ name: "simplify",
61
+ repo: "https://github.com/brianlovin/claude-config",
62
+ skillName: "simplify",
63
+ allowedAgents: ["orchestrator"],
64
+ description: "YAGNI code simplification expert"
65
+ },
66
+ {
67
+ name: "agent-browser",
68
+ repo: "https://github.com/vercel-labs/agent-browser",
69
+ skillName: "agent-browser",
70
+ allowedAgents: ["architect"],
71
+ description: "High-performance browser automation",
72
+ postInstallCommands: [
73
+ "npm install -g agent-browser",
74
+ "agent-browser install"
75
+ ]
63
76
  }
64
77
  ];
65
78
  var PERMISSION_ONLY_SKILLS = [];
@@ -15830,12 +15843,12 @@ var DELEGATE_TASK_ERROR_PATTERNS = [
15830
15843
  {
15831
15844
  pattern: "category OR subagent_type",
15832
15845
  errorType: "mutual_exclusion",
15833
- fixHint: 'Provide only one: category (e.g., "unspecified-low") OR subagent_type (e.g., "explorer").'
15846
+ fixHint: 'Provide only one: category (e.g., "unspecified-low") OR subagent_type (e.g., "surveyor").'
15834
15847
  },
15835
15848
  {
15836
15849
  pattern: "Must provide either category or subagent_type",
15837
15850
  errorType: "missing_category_or_agent",
15838
- fixHint: 'Add either category="unspecified-low" or subagent_type="explorer".'
15851
+ fixHint: 'Add either category="unspecified-low" or subagent_type="surveyor".'
15839
15852
  },
15840
15853
  {
15841
15854
  pattern: "Unknown category",
@@ -2,11 +2,11 @@ import type { PluginConfig } from '../config';
2
2
  /**
3
3
  * Normalizes an agent name by trimming whitespace and removing the optional @ prefix.
4
4
  *
5
- * @param agentName - The agent name to normalize (e.g., "@oracle" or "oracle")
5
+ * @param agentName - The agent name to normalize (e.g., "@critic" or "critic")
6
6
  * @returns The normalized agent name without @ prefix and trimmed of whitespace
7
7
  *
8
8
  * @example
9
- * normalizeAgentName("@oracle") // returns "oracle"
9
+ * normalizeAgentName("@critic") // returns "critic"
10
10
  * normalizeAgentName(" explore ") // returns "explore"
11
11
  */
12
12
  export declare function normalizeAgentName(agentName: string): string;
@@ -24,7 +24,7 @@ export declare function normalizeAgentName(agentName: string): string;
24
24
  * @returns The trimmed variant string, or undefined if no valid variant is found
25
25
  *
26
26
  * @example
27
- * resolveAgentVariant(config, "@oracle") // returns "high" if configured
27
+ * resolveAgentVariant(config, "@critic") // returns "high" if configured
28
28
  */
29
29
  export declare function resolveAgentVariant(config: PluginConfig | undefined, agentName: string): string | undefined;
30
30
  /**
@@ -39,8 +39,8 @@ export declare function resolveAgentVariant(config: PluginConfig | undefined, ag
39
39
  * @returns The body with the variant applied (new object) or the original body unchanged
40
40
  *
41
41
  * @example
42
- * applyAgentVariant("high", { agent: "oracle" }) // returns { agent: "oracle", variant: "high" }
43
- * applyAgentVariant("high", { agent: "oracle", variant: "low" }) // returns original body with variant: "low"
42
+ * applyAgentVariant("high", { agent: "critic" }) // returns { agent: "critic", variant: "high" }
43
+ * applyAgentVariant("high", { agent: "critic", variant: "low" }) // returns original body with variant: "low"
44
44
  */
45
45
  export declare function applyAgentVariant<T extends {
46
46
  variant?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-openidea",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Multi-agent framework for CS/ML research idea generation — literature survey, hypothesis generation, novelty checking, methodology design, and paper outlining",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: cartography
3
+ description: Repository understanding and hierarchical codemap generation — maps project structure, generates codemap.md files, and tracks changes via .slim/cartography.json.
4
+ ---
5
+
6
+ # Cartography Skill
7
+
8
+ This skill provides **repository understanding and hierarchical codemap generation** for projects managed by the orchestrator.
9
+
10
+ ## When to Use
11
+
12
+ Use this skill when:
13
+ - Starting work on an unfamiliar codebase and need a high-level map
14
+ - Generating or updating `codemap.md` files after significant refactors
15
+ - Creating `.slim/cartography.json` for change tracking
16
+ - Answering questions about project structure and file organization
17
+
18
+ ## Workflow
19
+
20
+ ### Step 1: Explore Repository Structure
21
+ Traverse the repository tree and identify top-level modules, entry points, and key directories.
22
+
23
+ ### Step 2: Generate Codemaps
24
+ For each significant directory, produce a `codemap.md` summarizing its purpose, key files, and their roles.
25
+
26
+ ### Step 3: Update Tracking File
27
+ Write or update `.slim/cartography.json` with the current map, file hashes, and last-modified timestamps.
28
+
29
+ ## Output
30
+
31
+ - `codemap.md` files in each mapped directory
32
+ - `.slim/cartography.json` with the full repository map