Skip to content

Conversation

@code-yeongyu
Copy link
Owner

@code-yeongyu code-yeongyu commented Jan 30, 2026

Summary

Introduces Hephaestus, a new autonomous deep worker agent powered by GPT 5.2 Codex Medium.

What's New

  • New Agent: Hephaestus - goal-oriented autonomous execution inspired by AmpCode's deep mode
  • Agent Characteristics:
    • Thorough research before action (2-5 parallel explore/librarian agents)
    • No step-by-step instructions needed - give goals, get results
    • 100% completion with verification evidence
  • Documentation: Full README sections in 4 languages (EN, KO, JA, ZH-CN)
  • Banner Image: Custom Hephaestus artwork for README

Why "Legitimate Craftsman"?

A playful nod to the community meme about "legitimate" usage after Anthropic's third-party access changes. Hephaestus builds things the right way - methodically and thoroughly.

Commits

  • 818f8008 feat(agents): add hephaestus agent - autonomous deep worker with GPT 5.2 Codex
  • 95445e8c feat(agents): optimize hephaestus prompt for GPT 5.2 with dynamic sections
  • 72fdcff9 docs(agents): add hephaestus agent documentation and image

Summary by cubic

Adds Hephaestus, an autonomous deep‑worker agent powered by GPT‑5.2 Codex, focused on goal‑oriented execution with deep exploration and strict verification. Integrates model gating, updated fallbacks, schema updates, and orders core agents as sisyphus → hephaestus → prometheus → atlas.

  • New Features

    • New agent: Hephaestus (GPT‑5.2 Codex, medium reasoning). Autonomous execution, parallel explore/librarian, end‑to‑end with evidence, code pattern matching.
    • Dynamic prompt and mode routing: intent gate, constraint‑first flow, delegation/verification guides, output contract; adds GPT‑5.2/planner‑aware ultrawork router and split keyword detectors (analyze/search/ultrawork).
    • Core agent order enforced in config handler: sisyphus → hephaestus → prometheus → atlas.
    • Schema and requirements: added to enums and AGENT_MODEL_REQUIREMENTS; Sisyphus now uses OR‑based availability (activates if any fallback model exists, chain updated), CLI snapshots and tests updated across utils, config, and fallback paths.
    • Docs: added sections in EN/KO/JA/ZH, features table updates, AGENTS.md updates, and banner image.
  • Migration

    • Hephaestus only activates when a provider exposes gpt‑5.2‑codex; otherwise it is omitted. Fallback chain applies automatically.
    • Sisyphus now activates when at least one model in its fallback chain is available; if none are, it is omitted. Explicit config for agents or categories bypasses availability checks.

Written for commit c8b802f. Summary will update on new commits.

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

6 issues found across 20 files

Confidence score: 2/5

  • Hephaestus may not function because delegate_task defaults to deny in src/plugin-handlers/config-handler.ts despite it requiring delegation to subagents, which is a likely runtime break for that agent.
  • User overrides for Hephaestus are blocked by the missing hephaestus key in AgentOverridesSchema (src/config/schema.ts), preventing configuration changes like disabling or tuning it.
  • Several docs/wording inconsistencies (e.g., fallback chain in docs/features.md, misplaced section in README.ko.md, AGENTS.md table) add confusion but are lower impact than the functional config issues.
  • Pay close attention to src/plugin-handlers/config-handler.ts and src/config/schema.ts - Hephaestus permission defaults and override schema gaps.
Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="src/config/schema.ts">

<violation number="1" location="src/config/schema.ts:21">
P2: Hephaestus is listed as overridable, but `AgentOverridesSchema` is missing the `hephaestus` key. This will prevent users from overriding its configuration (e.g. disabling it or changing parameters).

Add `hephaestus: AgentOverrideConfigSchema.optional(),` to `AgentOverridesSchema` (around line 135).</violation>
</file>

<file name="src/agents/hephaestus.ts">

<violation number="1" location="src/agents/hephaestus.ts:257">
P3: Fix grammatical errors in delegation verification instructions.</violation>
</file>

<file name="README.ko.md">

<violation number="1" location="README.ko.md:215">
P2: The Hephaestus section is inserted inside the Sisyphus section, causing the "Just install it" (그냥 설치하세요) subsection—which describes Sisyphus features—to be incorrectly nested under Hephaestus. This misattributes the Sisyphus documentation and breaks the document structure. The Hephaestus section should be moved after the "Just install it" section.</violation>
</file>

<file name="AGENTS.md">

<violation number="1" location="AGENTS.md:21">
P3: The agent count was updated to 11, but the `STRUCTURE` section (line 26) still references "10 AI agents", and the `AGENT MODELS` table (line 132) is missing the new `Hephaestus` agent.</violation>
</file>

<file name="docs/features.md">

<violation number="1" location="docs/features.md:14">
P2: The documentation claims Hephaestus falls back to "kimi-k2.5 → glm-4.7 → gemini-3-pro", but the code configuration (`fallbackChain`) only includes `gpt-5.2-codex` and strictly requires it. This will mislead users about availability.</violation>
</file>

<file name="src/plugin-handlers/config-handler.ts">

<violation number="1" location="src/plugin-handlers/config-handler.ts:52">
P1: Hephaestus requires `delegate_task: "allow"` to function (it uses explore/librarian subagents), but the default permission is `deny`.

Other agents like Sisyphus and Prometheus have their permissions explicitly configured in `createConfigHandler` (around line 430), but Hephaestus is missing from that block.

You should add a permission configuration block for Hephaestus:
```typescript
if (agentResult.hephaestus) {
  const agent = agentResult.hephaestus as AgentWithPermission;
  agent.permission = { ...agent.permission, call_omo_agent: "deny", delegate_task: "allow", question: "allow" };
}
```</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

@code-yeongyu code-yeongyu force-pushed the feat/hephaestus-agent branch 3 times, most recently from a74d0f1 to dd5fb3f Compare January 30, 2026 15:57
Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 14 files (changes from recent commits).

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="src/shared/agent-variant.test.ts">

<violation number="1" location="src/shared/agent-variant.test.ts:98">
P2: This test case duplicates the existing test "returns correct variant for oracle agent with openai" found later in the file (lines 173-183). 

Since this PR introduces the `hephaestus` agent, this test should be updated to verify `hephaestus` model resolution instead of redundantly testing `oracle`.</violation>
</file>

<file name="src/cli/model-fallback.test.ts">

<violation number="1" location="src/cli/model-fallback.test.ts:407">
P1: Missing unit tests for the new 'Hephaestus' agent.

The agent has specific logic (only active if `gpt-5.2-codex` is available), which should be verified.

(Note: The implementation for this logic also appears to be missing in `src/cli/model-fallback.ts` - `requiresModel` property is defined in requirements but ignored in config generation).</violation>
</file>

<file name="src/shared/model-requirements.ts">

<violation number="1" location="src/shared/model-requirements.ts:21">
P1: Removing `gpt-5.2-codex` and `gemini-3-pro` from Sisyphus's fallback chain, combined with `requiresAnyModel: true`, creates a breaking change for users who rely solely on OpenAI or Google providers. These users will lose access to the default Sisyphus agent, as it will no longer be created.

This contradicts the "No breaking changes" claim in the PR description. Additionally, the `AGENTS.md` documentation still lists the removed models in the Sisyphus fallback chain, making it outdated.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

@code-yeongyu code-yeongyu force-pushed the feat/hephaestus-agent branch 2 times, most recently from 250a63a to 9e64484 Compare January 31, 2026 04:21
@code-yeongyu
Copy link
Owner Author

@cubic-dev-ai please re-run review to verify all issues have been addressed

@cubic-dev-ai
Copy link

cubic-dev-ai bot commented Jan 31, 2026

@cubic-dev-ai please re-run review to verify all issues have been addressed

@code-yeongyu I have started the AI code review. It will take a few minutes to complete.

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

6 issues found across 26 files

Confidence score: 3/5

  • Tests in src/cli/config-manager.test.ts now assert Sisyphus is unavailable for OpenAI/Gemini-only users, which contradicts AGENTS.md and the stated fallback support—this could block expected usage.
  • src/shared/model-availability.ts enforces strict provider availability and may ignore cross-provider fallbacks, risking regressions in model resolution behavior.
  • Overall risk is moderate due to concrete behavior changes around fallbacks and availability, though most issues are configuration/consistency rather than code crashes.
  • Pay close attention to src/cli/config-manager.test.ts, src/shared/model-availability.ts, src/shared/agent-variant.test.ts, src/cli/model-fallback.ts, README.md, src/agents/hephaestus.ts - mismatched fallback/availability logic and documentation alignment.
Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="README.md">

<violation number="1" location="README.md:214">
P2: The "Just Install This" section contains content specifically about Sisyphus (e.g., "1. Sisyphus doesn't waste time..."), but inserting the Hephaestus section here (as an H3) makes "Just Install This" (an H4) a subsection of Hephaestus.

This creates a structural inconsistency where Sisyphus documentation appears under the Hephaestus header.

**Recommendation:** Move the entire "For Those Who Want Autonomy: Meet Hephaestus" section to appear *after* the "Just Install This" section (or at the end of the Sisyphus section).</violation>
</file>

<file name="src/shared/agent-variant.test.ts">

<violation number="1" location="src/shared/agent-variant.test.ts:104">
P2: The Hephaestus agent configuration uses the same providers (e.g., `opencode`, `github-copilot`) across multiple fallback entries with different variants (`medium` vs `max`).

However, the underlying `resolveVariantForModel` logic (in `src/shared/agent-variant.ts`) resolves based on provider ID only, ignoring the model ID. This will cause incorrect variant resolution (e.g., returning 'medium' instead of 'max') when using fallback models on shared providers.

Consider updating `resolveVariantForModel` to match on both provider and model, and adding a test case for a fallback model (e.g. `opencode/claude-opus-4-5`) to verify this.</violation>
</file>

<file name="src/cli/config-manager.test.ts">

<violation number="1" location="src/cli/config-manager.test.ts:323">
P1: This change confirms Sisyphus is unavailable for users with only OpenAI or Gemini, contradicting `AGENTS.md` (and the PR description's fallback list) which states Sisyphus supports `gpt-5.2-codex` and `gemini-3-pro` as fallbacks.

The removal of these fallback options in the implementation (verified by this test expecting `undefined`) creates a discrepancy between documentation and behavior, potentially breaking workflows for non-Claude users.</violation>
</file>

<file name="src/cli/model-fallback.ts">

<violation number="1" location="src/cli/model-fallback.ts:183">
P2: Configuration for Hephaestus contains unreachable fallbacks.

Hephaestus requires `gpt-5.2-codex` (`requiresModel`), which is also the first entry in its fallback chain.
1. If `gpt-5.2-codex` is available, `requiresModel` passes, and `resolveModelFromChain` picks it (as it's first).
2. If `gpt-5.2-codex` is unavailable, `requiresModel` fails, and the agent is omitted.
The fallback entries (Opus, Gemini) are never reachable. Either remove `requiresModel` to allow fallbacks, or remove the fallbacks if strict requirement is intended.</violation>
</file>

<file name="src/agents/hephaestus.ts">

<violation number="1" location="src/agents/hephaestus.ts:289">
P3: Duplicate and grammatically incorrect verification steps in the prompt.
Lines 290-292 appear to be an earlier draft with grammar errors ("DOES IT FOLLOWED", "DID THE AGENT FOLLOWED") that were replaced by the corrected and indented lines 293-295, but the old lines were not removed.

(Grammar issues: "DOES IT FOLLOWED" → "DOES IT FOLLOW", "DID THE AGENT FOLLOWED" → "DID THE AGENT FOLLOW")</violation>
</file>

<file name="src/shared/model-availability.ts">

<violation number="1" location="src/shared/model-availability.ts:270">
P2: This loop enforces strict provider availability, ignoring cross-provider fallbacks supported by `resolveModelWithFallback`. It also generates excessive log noise by calling `fuzzyMatchModel` multiple times per entry.

Use `isModelAvailable` to check availability consistently with resolution logic (allowing cross-provider matches) and reduce logging overhead.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

// #then Sisyphus is omitted (requires all fallback providers)
expect(result.$schema).toBe("https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json")
expect((result.agents as Record<string, { model: string }>).sisyphus.model).toBe("opencode/glm-4.7-free")
expect((result.agents as Record<string, { model: string }>).sisyphus).toBeUndefined()
Copy link

@cubic-dev-ai cubic-dev-ai bot Jan 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: This change confirms Sisyphus is unavailable for users with only OpenAI or Gemini, contradicting AGENTS.md (and the PR description's fallback list) which states Sisyphus supports gpt-5.2-codex and gemini-3-pro as fallbacks.

The removal of these fallback options in the implementation (verified by this test expecting undefined) creates a discrepancy between documentation and behavior, potentially breaking workflows for non-Claude users.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/cli/config-manager.test.ts, line 323:

<comment>This change confirms Sisyphus is unavailable for users with only OpenAI or Gemini, contradicting `AGENTS.md` (and the PR description's fallback list) which states Sisyphus supports `gpt-5.2-codex` and `gemini-3-pro` as fallbacks.

The removal of these fallback options in the implementation (verified by this test expecting `undefined`) creates a discrepancy between documentation and behavior, potentially breaking workflows for non-Claude users.</comment>

<file context>
@@ -318,9 +318,9 @@ describe("generateOmoConfig - model fallback system", () => {
+    // #then Sisyphus is omitted (requires all fallback providers)
     expect(result.$schema).toBe("https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json")
-    expect((result.agents as Record<string, { model: string }>).sisyphus.model).toBe("opencode/glm-4.7-free")
+    expect((result.agents as Record<string, { model: string }>).sisyphus).toBeUndefined()
   })
 
</file context>
Fix with Cubic


// #when
const variant = resolveVariantForModel(config, "sisyphus", model)
const variant = resolveVariantForModel(config, "hephaestus", model)
Copy link

@cubic-dev-ai cubic-dev-ai bot Jan 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The Hephaestus agent configuration uses the same providers (e.g., opencode, github-copilot) across multiple fallback entries with different variants (medium vs max).

However, the underlying resolveVariantForModel logic (in src/shared/agent-variant.ts) resolves based on provider ID only, ignoring the model ID. This will cause incorrect variant resolution (e.g., returning 'medium' instead of 'max') when using fallback models on shared providers.

Consider updating resolveVariantForModel to match on both provider and model, and adding a test case for a fallback model (e.g. opencode/claude-opus-4-5) to verify this.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/shared/agent-variant.test.ts, line 104:

<comment>The Hephaestus agent configuration uses the same providers (e.g., `opencode`, `github-copilot`) across multiple fallback entries with different variants (`medium` vs `max`).

However, the underlying `resolveVariantForModel` logic (in `src/shared/agent-variant.ts`) resolves based on provider ID only, ignoring the model ID. This will cause incorrect variant resolution (e.g., returning 'medium' instead of 'max') when using fallback models on shared providers.

Consider updating `resolveVariantForModel` to match on both provider and model, and adding a test case for a fallback model (e.g. `opencode/claude-opus-4-5`) to verify this.</comment>

<file context>
@@ -95,22 +95,22 @@ describe("resolveVariantForModel", () => {
 
     // #when
-    const variant = resolveVariantForModel(config, "sisyphus", model)
+    const variant = resolveVariantForModel(config, "hephaestus", model)
 
     // #then
</file context>
Fix with Cubic

@code-yeongyu code-yeongyu force-pushed the feat/hephaestus-agent branch 2 times, most recently from c6b3764 to 7b1f30e Compare January 31, 2026 06:51
…ilities

Add requiresAnyModel field to ModelRequirement type for agents that require
at least one model from their fallback chain to be available.

- Add requiresAnyModel to sisyphus config (requires at least one fallback model)
- Add glm-4.7-free as final fallback in sisyphus chain
- Add isAnyFallbackModelAvailable() function for OR-logic model checking
- Update tests for sisyphus requiresAnyModel gating behavior

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Add 'hephaestus' as a new builtin agent name type.

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Add hephaestus to BuiltinAgentNameSchema, OverridableAgentNameSchema,
and AgentOverridesSchema for full configuration support.

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Add Hephaestus agent - The Legitimate Craftsman.

Named after the Greek god of forge, fire, metalworking, and craftsmanship.
Inspired by AmpCode's deep mode for autonomous problem-solving with
thorough research before decisive action.

Key characteristics:
- Goal-oriented execution (objectives, not recipes)
- Explores 2-5 agents before writing any code
- End-to-end completion with verification evidence
- Pattern matching to existing codebase style
- Powered by GPT 5.2 Codex with medium reasoning effort

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Register Hephaestus in agent system with model availability gating:
- Import and add to agentSources
- Add sisyphus requiresAnyModel gating (OR-logic model check)
- Add hephaestus requiresModel gating (requires gpt-5.2-codex)
- Reorder agent processing (sisyphus → hephaestus → others)
- Add comprehensive tests for model gating behavior

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Update tests to reflect hephaestus having openai/gpt-5.2-codex in its
fallback chain with 'medium' variant. Clarify that openai is not in
sisyphus fallback chain.

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
- Add hephaestus to CORE_AGENT_ORDER constant (sisyphus → hephaestus → prometheus → atlas)
- Add reorderAgentsByPriority() to maintain agent registration order
- Configure hephaestus permissions (delegate_task: allow, question: allow)
- Update prometheus color to #9D4EDD (Amethyst Purple - wisdom/foresight)
- Add tests for agent ordering and permission configuration

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Add hephaestus model resolution in CLI installer:
- Add isAnyFallbackEntryAvailable() for OR-logic model checking
- Add isRequiredModelAvailable() for single model requirement
- Update generateModelConfig to handle sisyphus requiresAnyModel
- Update generateModelConfig to handle hephaestus requiresModel
- Hephaestus created when gpt-5.2-codex available (OpenAI/Copilot/OpenCode)
- Sisyphus omitted when no fallback provider available
- Add comprehensive tests for hephaestus/sisyphus model gating
- Update config-manager tests for new sisyphus behavior

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Fix resolveCategoryConfig to allow explicit user configuration to bypass
model availability checks. Users who explicitly configure a category
should be able to use it regardless of model availability.

- Check for explicit config before requiresModel validation
- Return null only when no explicit config AND model unavailable
- Add tests for explicit config bypass behavior

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Modularize keyword-detector constants.ts by extracting large message
templates into dedicated submodules for better maintainability:

- Extract ultrawork messages to ultrawork/ submodule with:
  - utils.ts (isPlannerAgent, isGptModel, getUltraworkSource)
  - planner.ts (planner-specific ultrawork message)
  - gpt5.2.ts (GPT-specific ultrawork message)
  - default.ts (Claude-optimized default message)
  - index.ts (router based on agent/model context)
- Extract search pattern/message to search/ submodule
- Extract analyze pattern/message to analyze/ submodule
- Update constants.ts to re-export from submodules
- Add KeywordDetector type export

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Document Hephaestus agent across all README translations and feature docs:
- Add Hephaestus to agent list (GPT 5.2 Codex Medium - The Legitimate Craftsman)
- Add 'For Those Who Want Autonomy: Meet Hephaestus' section
- Explain the 'Legitimate' naming irony (ToS controversy reference)
- Document AmpCode deep mode inspiration
- List key characteristics: goal-oriented, explore-first, end-to-end, pattern-matching
- Add Hephaestus to core agents table in features.md

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Update all AGENTS.md files to reflect Hephaestus addition:
- Root AGENTS.md: Update metadata, add Hephaestus to agent models table
- src/agents/AGENTS.md: Add Hephaestus to structure and models
- src/hooks/AGENTS.md: Update hook count to 34, add new hooks
- src/features/AGENTS.md: Update module count to 18
- src/tools/AGENTS.md: Update tool categorization
- src/shared/AGENTS.md: Update model-requirements line count
- src/cli/AGENTS.md: Update file counts, add mcp-oauth

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Add hero image for Hephaestus agent section in README. Shows the divine
blacksmith concept representing the autonomous deep worker.

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
Regenerate oh-my-opencode.schema.json to include hephaestus in
BuiltinAgentNameSchema and AgentOverridesSchema.

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
@code-yeongyu code-yeongyu force-pushed the feat/hephaestus-agent branch from 7b1f30e to c8b802f Compare January 31, 2026 07:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants