oh-my-openidea 0.1.4 → 0.1.6

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
@@ -20,9 +20,7 @@ bunx oh-my-openidea@latest install
20
20
  Non-interactive mode with API keys:
21
21
 
22
22
  ```bash
23
- bunx oh-my-openidea@latest install --no-tui --openai=yes --anthropic=yes --tmux=no --skills=yes \
24
- --serpapi-key=YOUR_SERPAPI_KEY \
25
- --semantic-scholar-key=YOUR_S2_KEY
23
+ bunx oh-my-openidea@latest install --no-tui --openai=yes --anthropic=no --antigravity=yes --copilot=no --zai-plan=no --chutes=no --kimi=yes --tmux=no --skills=yes --serpapi-key=YOUR_SERPAPI_KEY --semantic-scholar-key=YOUR_S2_KEY
26
24
  ```
27
25
 
28
26
  Then authenticate:
@@ -57,61 +55,205 @@ Additional guides:
57
55
 
58
56
  ### 01. Orchestrator: The Architect of Discovery
59
57
 
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
- | --- | --- |
62
- | Role: Strategic research coordination and idea synthesis |
63
- | Prompt: orchestrator.ts |
64
- | Recommended Models: kimi-for-coding/k2p5   openai/gpt-5.2-codex |
58
+ <table>
59
+ <tr>
60
+ <td width="240" align="center" valign="top">
61
+ <img src="img/orchestrator.png" alt="Orchestrator" width="220" />
62
+ </td>
63
+ <td valign="top">
64
+ <strong>The one who sees all paths.</strong> The Orchestrator is
65
+ the lead coordinator for the whole research workflow. Give it a
66
+ problem, and it decides which agents should work next, what
67
+ information is still missing, and how the pieces should come
68
+ together into a strong research direction. In practice, it runs
69
+ the full pipeline: clarifies the problem, dispatches parallel
70
+ literature searches to <code>@surveyor</code>, hands the corpus
71
+ to <code>@synthesizer</code> for gap extraction, generates
72
+ 3-5 concrete hypotheses itself, sends the strongest candidates
73
+ to <code>@critic</code> for novelty/feasibility review, then
74
+ calls <code>@architect</code> and <code>@writer</code> to turn
75
+ the winning idea into an executable plan and paper outline. It
76
+ is the only agent with full delegation authority and is
77
+ responsible for deciding when to branch in parallel and when to
78
+ keep steps sequential.
79
+ </td>
80
+ </tr>
81
+ <tr>
82
+ <td colspan="2">
83
+ <strong>Role:</strong> Strategic research coordination and idea synthesis<br/>
84
+ <strong>How it works:</strong> Multi-stage planner with explicit subagent routing, limited refinement loops, and final synthesis across all intermediate outputs<br/>
85
+ <strong>Best Model Traits:</strong> Strong long-horizon planning, reliable tool/subagent orchestration, stable structured reasoning, and the ability to compress many intermediate results into clear decisions<br/>
86
+ <strong>Prompt:</strong> <code>orchestrator.ts</code><br/>
87
+ </td>
88
+ </tr>
89
+ </table>
65
90
 
66
91
  ---
67
92
 
68
93
  ### 02. Surveyor: The Cartographer of Knowledge
69
94
 
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
- | --- | --- |
72
- | Role: Literature search and paper retrieval |
73
- | Prompt: surveyor.ts |
74
- | Recommended Models: openai/gpt-5.1-codex-mini &nbsp; google/gemini-3-flash |
95
+ <table>
96
+ <tr>
97
+ <td width="240" align="center" valign="top">
98
+ <img src="img/explorer.png" alt="Surveyor" width="220" />
99
+ </td>
100
+ <td valign="top">
101
+ <strong>The one who maps the unknown.</strong> The Surveyor finds
102
+ and collects the most relevant papers for your topic. It helps
103
+ you quickly understand what has already been done, which papers
104
+ matter most, and where the current limits of the literature are.
105
+ Its job is deliberately narrow and read-only: search, retrieve,
106
+ and organize. It runs parallel queries across arXiv, Semantic
107
+ Scholar, Google Scholar, and the web; prefers recent work by
108
+ default; separates foundational papers from recent advances; and
109
+ always returns traceable identifiers such as arXiv IDs or
110
+ Semantic Scholar IDs so later agents can verify claims instead
111
+ of relying on vague summaries.
112
+ </td>
113
+ </tr>
114
+ <tr>
115
+ <td colspan="2">
116
+ <strong>Role:</strong> Literature search and paper retrieval<br/>
117
+ <strong>How it works:</strong> Read-only retrieval agent that fans out across multiple academic sources, compares query variants, and builds a paper corpus with metadata for downstream use<br/>
118
+ <strong>Best Model Traits:</strong> Fast tool calling, high extraction precision, low hallucination rate on bibliographic details, and good breadth-first search behavior under ambiguous queries<br/>
119
+ <strong>Prompt:</strong> <code>surveyor.ts</code><br/>
120
+ </td>
121
+ </tr>
122
+ </table>
75
123
 
76
124
  ---
77
125
 
78
126
  ### 03. Synthesizer: The Weaver of Understanding
79
127
 
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
- | --- | --- |
82
- | Role: Gap analysis and knowledge synthesis |
83
- | Prompt: synthesizer.ts |
84
- | Recommended Models: kimi-for-coding/k2p5 &nbsp; google/gemini-3-flash |
128
+ <table>
129
+ <tr>
130
+ <td width="240" align="center" valign="top">
131
+ <img src="img/librarian.png" alt="Synthesizer" width="220" />
132
+ </td>
133
+ <td valign="top">
134
+ <strong>The one who connects the dots.</strong> The Synthesizer
135
+ turns a pile of papers into a clear understanding of the field.
136
+ It groups results, highlights patterns and disagreements, and
137
+ points out open problems that can lead to new research ideas.
138
+ Instead of merely summarizing, it builds a research landscape:
139
+ themes, trends, recurring limitations, and evidence-backed gaps.
140
+ It reads key sections of papers, cross-references claims across
141
+ the corpus, and distinguishes between gaps that are unaddressed
142
+ because they are genuinely hard and gaps that have simply been
143
+ overlooked. If the corpus is missing an important branch, it can
144
+ trigger a targeted follow-up search via <code>@surveyor</code>.
145
+ </td>
146
+ </tr>
147
+ <tr>
148
+ <td colspan="2">
149
+ <strong>Role:</strong> Gap analysis and knowledge synthesis<br/>
150
+ <strong>How it works:</strong> Corpus-level analyzer that reads paper sections, clusters ideas into themes, surfaces contradictions and blind spots, and outputs evidence-linked research gaps<br/>
151
+ <strong>Best Model Traits:</strong> Long-context reading, cross-document comparison, disciplined citation use, and strong abstraction ability without drifting away from source evidence<br/>
152
+ <strong>Prompt:</strong> <code>synthesizer.ts</code><br/>
153
+ </td>
154
+ </tr>
155
+ </table>
85
156
 
86
157
  ---
87
158
 
88
159
  ### 04. Critic: The Guardian of Truth
89
160
 
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
- | --- | --- |
92
- | Role: Novelty validation and adversarial review |
93
- | Prompt: critic.ts |
94
- | Recommended Models: openai/gpt-5.2-codex &nbsp; kimi-for-coding/k2p5 |
161
+ <table>
162
+ <tr>
163
+ <td width="240" align="center" valign="top">
164
+ <img src="img/oracle.png" alt="Critic" width="220" />
165
+ </td>
166
+ <td valign="top">
167
+ <strong>The voice of rigorous doubt.</strong> The Critic
168
+ stress-tests your idea before you invest too much in it. It
169
+ looks for weak assumptions, missing baselines, overlap with
170
+ prior work, and other reasons the idea might fail novelty or
171
+ review standards. Operationally, it behaves like an adversarial
172
+ program committee reviewer: it searches for overlapping prior
173
+ work, reads candidate papers to verify whether the overlap is
174
+ superficial or real, and scores each idea on novelty,
175
+ feasibility, significance, clarity, and overall quality. When
176
+ needed, it can trigger targeted follow-up literature checks via
177
+ <code>@surveyor</code>, but it does not redesign the idea
178
+ itself; its purpose is to reject weak directions early and make
179
+ promising ones harder to fool yourself about.
180
+ </td>
181
+ </tr>
182
+ <tr>
183
+ <td colspan="2">
184
+ <strong>Role:</strong> Novelty validation and adversarial review<br/>
185
+ <strong>How it works:</strong> Evidence-first evaluator that combines prior-work search, paper-level overlap verification, and structured review scoring in a NeurIPS/ICML-style format<br/>
186
+ <strong>Best Model Traits:</strong> Skeptical reasoning, careful distinction between related and duplicate ideas, strong comparative judgment, and consistency when turning evidence into explicit scores and verdicts<br/>
187
+ <strong>Prompt:</strong> <code>critic.ts</code><br/>
188
+ </td>
189
+ </tr>
190
+ </table>
95
191
 
96
192
  ---
97
193
 
98
194
  ### 05. Architect: The Builder of Methods
99
195
 
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
- | --- | --- |
102
- | Role: Methodology and experiment design |
103
- | Prompt: architect.ts |
104
- | Recommended Models: kimi-for-coding/k2p5 &nbsp; openai/gpt-5.1-codex-mini |
196
+ <table>
197
+ <tr>
198
+ <td width="240" align="center" valign="top">
199
+ <img src="img/designer.png" alt="Architect" width="220" />
200
+ </td>
201
+ <td valign="top">
202
+ <strong>The one who turns vision into plan.</strong> The
203
+ Architect converts an idea into a concrete experiment plan. It
204
+ defines datasets, baselines, metrics, ablations, failure cases,
205
+ and resource needs so you know exactly how to test whether the
206
+ idea works. It takes a hypothesis that has already survived
207
+ critique and expands it into an executable methodology: method
208
+ overview, baseline stack, dataset choices, statistical tests,
209
+ ablation plan, implementation notes, and realistic compute
210
+ estimates. It is a leaf agent by design, which means it focuses
211
+ on turning validated ideas into concrete experimental decisions
212
+ rather than delegating further.
213
+ </td>
214
+ </tr>
215
+ <tr>
216
+ <td colspan="2">
217
+ <strong>Role:</strong> Methodology and experiment design<br/>
218
+ <strong>How it works:</strong> Execution planner that translates validated ideas into benchmarkable experiments with concrete baselines, datasets, metrics, ablations, and compute budgets<br/>
219
+ <strong>Best Model Traits:</strong> High specificity, strong methodological priors, good benchmark literacy, realistic resource estimation, and low tolerance for vague implementation advice<br/>
220
+ <strong>Prompt:</strong> <code>architect.ts</code><br/>
221
+ </td>
222
+ </tr>
223
+ </table>
105
224
 
106
225
  ---
107
226
 
108
227
  ### 06. Writer: The Voice of Science
109
228
 
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
- | --- | --- |
112
- | Role: Research writing and paper structure |
113
- | Prompt: writer.ts |
114
- | Recommended Models: openai/gpt-5.1-codex-mini &nbsp; google/gemini-3-flash |
229
+ <table>
230
+ <tr>
231
+ <td width="240" align="center" valign="top">
232
+ <img src="img/fixer.png" alt="Writer" width="220" />
233
+ </td>
234
+ <td valign="top">
235
+ <strong>The one who makes it legible to the world.</strong> The
236
+ Writer turns your research into a clear paper draft. It helps
237
+ organize the story, sharpen the main message, and present the
238
+ method and results in a way that is easy for readers and
239
+ reviewers to follow. Unlike the other agents, it is intentionally
240
+ execution-only: no external search, no tool-driven fact hunting,
241
+ and no subagent delegation. It assumes the research content has
242
+ already been established upstream and focuses on turning that
243
+ content into paper structure, abstract, introduction, related
244
+ work narrative, and section-level draft text that follows
245
+ mainstream ML conference conventions.
246
+ </td>
247
+ </tr>
248
+ <tr>
249
+ <td colspan="2">
250
+ <strong>Role:</strong> Research writing and paper structure<br/>
251
+ <strong>How it works:</strong> Context-conditioned writer that receives finalized idea and methodology, then produces publication-style outlines and drafts without inventing unsupported claims<br/>
252
+ <strong>Best Model Traits:</strong> Strong academic writing quality, good discourse organization, precise controllability, and discipline about staying within provided evidence instead of fabricating results<br/>
253
+ <strong>Prompt:</strong> <code>writer.ts</code><br/>
254
+ </td>
255
+ </tr>
256
+ </table>
115
257
 
116
258
  ---
117
259
 
package/dist/cli/index.js CHANGED
@@ -13736,7 +13736,7 @@ var TmuxConfigSchema = exports_external.object({
13736
13736
  main_pane_size: exports_external.number().min(20).max(80).default(60)
13737
13737
  });
13738
13738
  var PresetSchema = exports_external.record(exports_external.string(), AgentOverrideConfigSchema);
13739
- var McpNameSchema = exports_external.enum(["websearch", "arxiv", "semantic_scholar", "google_scholar"]);
13739
+ var McpNameSchema = exports_external.enum(["websearch"]);
13740
13740
  var BackgroundTaskConfigSchema = exports_external.object({
13741
13741
  maxConcurrentStarts: exports_external.number().min(1).max(50).default(10)
13742
13742
  });
@@ -13760,10 +13760,10 @@ var PluginConfigSchema = exports_external.object({
13760
13760
  // src/config/agent-mcps.ts
13761
13761
  var DEFAULT_AGENT_MCPS = {
13762
13762
  orchestrator: ["websearch"],
13763
- surveyor: ["websearch", "arxiv", "semantic_scholar", "google_scholar"],
13764
- synthesizer: ["websearch", "arxiv", "semantic_scholar"],
13765
- critic: ["arxiv", "semantic_scholar", "google_scholar"],
13766
- architect: ["websearch", "arxiv"],
13763
+ surveyor: ["websearch"],
13764
+ synthesizer: ["websearch"],
13765
+ critic: [],
13766
+ architect: ["websearch"],
13767
13767
  writer: ["websearch"]
13768
13768
  };
13769
13769
 
@@ -13817,6 +13817,18 @@ var CUSTOM_SKILLS = [
13817
13817
  description: "Repository understanding and hierarchical codemap generation",
13818
13818
  allowedAgents: ["orchestrator"],
13819
13819
  sourcePath: "src/skills/cartography"
13820
+ },
13821
+ {
13822
+ name: "alphaxiv-paper-lookup",
13823
+ description: "Look up arXiv papers via AlphaXiv structured overview",
13824
+ allowedAgents: [
13825
+ "orchestrator",
13826
+ "surveyor",
13827
+ "synthesizer",
13828
+ "critic",
13829
+ "architect"
13830
+ ],
13831
+ sourcePath: "src/skills/alphaxiv-paper-lookup"
13820
13832
  }
13821
13833
  ];
13822
13834
  function getCustomSkillsDir() {
@@ -16253,6 +16265,8 @@ function argsToConfig(args) {
16253
16265
  preferredOpenCodeModel: args.opencodeFreeModel && args.opencodeFreeModel !== "auto" ? args.opencodeFreeModel : undefined,
16254
16266
  artificialAnalysisApiKey: args.aaKey,
16255
16267
  openRouterApiKey: args.openrouterKey,
16268
+ serpApiKey: args.serpApiKey,
16269
+ semanticScholarKey: args.semanticScholarKey,
16256
16270
  balanceProviderUsage: args.balancedSpend === "yes",
16257
16271
  hasTmux: args.tmux === "yes",
16258
16272
  installSkills: args.skills === "yes",
@@ -16573,9 +16587,11 @@ async function runInteractiveMode(detected, modelsOnly = false) {
16573
16587
  rl.close();
16574
16588
  return config2;
16575
16589
  }
16576
- const totalQuestions = 11;
16590
+ const totalQuestions = 13;
16577
16591
  const existingAaKey = getEnv("ARTIFICIAL_ANALYSIS_API_KEY");
16578
16592
  const existingOpenRouterKey = getEnv("OPENROUTER_API_KEY");
16593
+ const existingSerpApiKey = getEnv("SERPAPI_KEY");
16594
+ const existingSemanticScholarKey = getEnv("SEMANTIC_SCHOLAR_API_KEY");
16579
16595
  console.log(`${BOLD}Question 1/${totalQuestions}:${RESET}`);
16580
16596
  const artificialAnalysisApiKey = await askOptionalApiKey(rl, "Artificial Analysis API key for better ranking signals", existingAaKey);
16581
16597
  if (existingAaKey && !artificialAnalysisApiKey) {
@@ -16589,6 +16605,18 @@ async function runInteractiveMode(detected, modelsOnly = false) {
16589
16605
  }
16590
16606
  console.log();
16591
16607
  console.log(`${BOLD}Question 3/${totalQuestions}:${RESET}`);
16608
+ const serpApiKey = await askOptionalApiKey(rl, "SerpAPI key for Google Scholar search (enables academic Google Scholar results)", existingSerpApiKey);
16609
+ if (existingSerpApiKey && !serpApiKey) {
16610
+ printInfo("Using existing SERPAPI_KEY from environment.");
16611
+ }
16612
+ console.log();
16613
+ console.log(`${BOLD}Question 4/${totalQuestions}:${RESET}`);
16614
+ const semanticScholarKey = await askOptionalApiKey(rl, "Semantic Scholar API key for higher rate limits (optional, free tier works without it)", existingSemanticScholarKey);
16615
+ if (existingSemanticScholarKey && !semanticScholarKey) {
16616
+ printInfo("Using existing SEMANTIC_SCHOLAR_API_KEY from environment.");
16617
+ }
16618
+ console.log();
16619
+ console.log(`${BOLD}Question 5/${totalQuestions}:${RESET}`);
16592
16620
  const useOpenCodeFree = await askYesNo(rl, "Use Opencode Free models (opencode/*)?", "yes");
16593
16621
  console.log();
16594
16622
  let availableOpenCodeFreeModels;
@@ -16619,25 +16647,25 @@ async function runInteractiveMode(detected, modelsOnly = false) {
16619
16647
  console.log();
16620
16648
  }
16621
16649
  }
16622
- console.log(`${BOLD}Question 4/${totalQuestions}:${RESET}`);
16650
+ console.log(`${BOLD}Question 6/${totalQuestions}:${RESET}`);
16623
16651
  const kimi = await askYesNo(rl, "Enable Kimi provider?", detected.hasKimi ? "yes" : "no");
16624
16652
  console.log();
16625
- console.log(`${BOLD}Question 5/${totalQuestions}:${RESET}`);
16653
+ console.log(`${BOLD}Question 7/${totalQuestions}:${RESET}`);
16626
16654
  const openai = await askYesNo(rl, "Enable OpenAI provider?", detected.hasOpenAI ? "yes" : "no");
16627
16655
  console.log();
16628
- console.log(`${BOLD}Question 6/${totalQuestions}:${RESET}`);
16656
+ console.log(`${BOLD}Question 8/${totalQuestions}:${RESET}`);
16629
16657
  const anthropic = await askYesNo(rl, "Enable Anthropic provider?", detected.hasAnthropic ? "yes" : "no");
16630
16658
  console.log();
16631
- console.log(`${BOLD}Question 7/${totalQuestions}:${RESET}`);
16659
+ console.log(`${BOLD}Question 9/${totalQuestions}:${RESET}`);
16632
16660
  const copilot = await askYesNo(rl, "Enable GitHub Copilot provider?", detected.hasCopilot ? "yes" : "no");
16633
16661
  console.log();
16634
- console.log(`${BOLD}Question 8/${totalQuestions}:${RESET}`);
16662
+ console.log(`${BOLD}Question 10/${totalQuestions}:${RESET}`);
16635
16663
  const zaiPlan = await askYesNo(rl, "Enable ZAI Coding Plan provider?", detected.hasZaiPlan ? "yes" : "no");
16636
16664
  console.log();
16637
- console.log(`${BOLD}Question 9/${totalQuestions}:${RESET}`);
16665
+ console.log(`${BOLD}Question 11/${totalQuestions}:${RESET}`);
16638
16666
  const antigravity = await askYesNo(rl, "Enable Antigravity (Google) provider?", detected.hasAntigravity ? "yes" : "no");
16639
16667
  console.log();
16640
- console.log(`${BOLD}Question 10/${totalQuestions}:${RESET}`);
16668
+ console.log(`${BOLD}Question 12/${totalQuestions}:${RESET}`);
16641
16669
  const chutes = await askYesNo(rl, "Enable Chutes provider?", detected.hasChutes ? "yes" : "no");
16642
16670
  console.log();
16643
16671
  if (chutes === "yes") {
@@ -16661,7 +16689,7 @@ async function runInteractiveMode(detected, modelsOnly = false) {
16661
16689
  console.log();
16662
16690
  }
16663
16691
  }
16664
- console.log(`${BOLD}Question 11/${totalQuestions}:${RESET}`);
16692
+ console.log(`${BOLD}Question 13/${totalQuestions}:${RESET}`);
16665
16693
  const balancedSpend = await askYesNo(rl, "Do you have subscriptions or pay per API? If yes, we will distribute assignments evenly across selected providers so your subscriptions last longer.", "no");
16666
16694
  console.log();
16667
16695
  let skills = "no";
@@ -16703,6 +16731,8 @@ async function runInteractiveMode(detected, modelsOnly = false) {
16703
16731
  availableChutesModels,
16704
16732
  artificialAnalysisApiKey,
16705
16733
  openRouterApiKey,
16734
+ serpApiKey,
16735
+ semanticScholarKey,
16706
16736
  balanceProviderUsage: balancedSpend === "yes",
16707
16737
  hasTmux: false,
16708
16738
  installSkills: skills === "yes",
@@ -112,6 +112,8 @@ export interface InstallConfig {
112
112
  scoringEngineVersion?: ScoringEngineVersion;
113
113
  artificialAnalysisApiKey?: string;
114
114
  openRouterApiKey?: string;
115
+ serpApiKey?: string;
116
+ semanticScholarKey?: string;
115
117
  balanceProviderUsage?: boolean;
116
118
  hasTmux: boolean;
117
119
  installSkills: boolean;
@@ -98,9 +98,6 @@ export declare const PresetSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
98
98
  export type Preset = z.infer<typeof PresetSchema>;
99
99
  export declare const McpNameSchema: z.ZodEnum<{
100
100
  websearch: "websearch";
101
- arxiv: "arxiv";
102
- semantic_scholar: "semantic_scholar";
103
- google_scholar: "google_scholar";
104
101
  }>;
105
102
  export type McpName = z.infer<typeof McpNameSchema>;
106
103
  export declare const BackgroundTaskConfigSchema: z.ZodObject<{