7021 Commits

Author SHA1 Message Date
YeonGyu-Kim d994abee5d test(omo-claude): add real-install cache QA harness + publish no-auto-trigger invariant
qa-real-install.mjs builds the plugin, copies it to a node_modules-free cache, and
exercises every hook + boots both MCP servers (F3 gate). publish-claude-invariant
test pins the no-accidental-publish guardrails (workflow_dispatch-only, identity
guard, missing-secret hard-fail) and is wired into test:claude.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 14:17:32 +09:00
YeonGyu-Kim 2c176eb2ab test(cli): allow claudecode installer spy 2026-05-29 14:14:30 +09:00
YeonGyu-Kim e99ab80de9 fix(omo-codex): use vendored lsp mcp backend 2026-05-29 14:14:08 +09:00
YeonGyu-Kim 645da66ee7 fix(team-mode): update tool context ask mock 2026-05-29 14:13:42 +09:00
YeonGyu-Kim 9ddb2b9819 test(omo-claude): make sync-mcp self-healing and test:claude order-independent
sync-mcp rebuilds the lsp component if a prior sync wiped its dist; sync-mcp.test
builds in a before hook; checkVendored flags only real unbundled imports (a guarded
require.resolve fallback is allowed); test:claude runs the destructive sync-components
test in its own node --test pass so it never races the build-checking tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 14:11:57 +09:00
YeonGyu-Kim 027c543340 chore(omo-claude): re-sync lsp to cache-safe vendored-mcp path resolution
Upstream lazy-lsp-mcp resolves the lsp server via new URL('../../../mcp/lsp/cli.js',
import.meta.url) -> the vendored plugin/mcp/lsp/cli.js, so the bundled hook boots
from a node_modules-free cache without require.resolve.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 14:11:57 +09:00
YeonGyu-Kim 79ec1c23c1 feat(cli): add claudecode install platform + runner + lazyclaudecode routing
--platform=claudecode (alias cc normalized in resolveInstallArgs); hasClaudeCode;
runClaudeCodeInstaller shells to claude plugin marketplace add/install, prints
/plugin commands + errors (no ~/.claude write) when claude absent; install
telemetry via @oh-my-opencode/omo-claude/telemetry; lazyclaudecode invocation
routes to claudecode. 26 target tests + 23 dependent tests green; both unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:50:17 +09:00
YeonGyu-Kim c6bfc14268 feat(omo-claude): vendor telemetry component with claude identity
SessionStart daily-active component: omo_claude_daily_active, omo-claude: salt,
platform derived from PRODUCT_NAME, shared PostHog key/host. model/permission_mode
optional in validator. Equivalence + distinctness tests pass; SessionStart smoke
exits 0 with OMO_DISABLE_POSTHOG=1 (no send). Builds; F3 cache boot verified.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:50:17 +09:00
YeonGyu-Kim 6f9dfb080d chore(omo-claude): re-sync vendored lsp with upstream lazy-mcp backend
sync-components pulled the upstream codex-lsp lazy-start MCP backend (lazy-*
modules + cli.ts) into the vendored lsp component. Rebuilds + F3 cache boot verified.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:50:17 +09:00
YeonGyu-Kim a548707699 chore(omo-claude): add omo-claude workspace to bun.lock
Keeps package.json workspaces and bun.lock consistent so CI bun install
--frozen-lockfile resolves @oh-my-opencode/omo-claude.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim 5b35673f0e chore(omo-claude): wire omo-claude into root workspace, files, bin, scripts
Add packages/omo-claude to workspaces + files; lazyclaudecode bin alias;
typecheck:packages covers omo-claude; new test:claude script. test:codex stays
green (no regression), test:claude green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim b68b6be2ff feat(omo-claude): aggregate 14 skills + author root hooks.json and plugin test
sync-skills aggregates 4 component skills + 10 shared; 6 harness-tool skills get
the Claude Code Harness Tool Compatibility block; start-work's embedded Codex
section is demoted. Root hooks.json uses ${CLAUDE_PLUGIN_ROOT}, widens PostToolUse
to Write|Edit|MultiEdit, and registers no create_goal PreToolUse (D4). Plugin
aggregate test pins hooks/skills/mcp shape.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim 71e4e2a6d0 feat(omo-claude): port ultragoal to per-session file-based goals
Goal content under ./.omo/ultragoal/sessions/claude-<id>/ keyed by Claude Code
session_id (claude: prefix); UltragoalScope struct threaded; plan version 2 +
index.json registry with read-only v1 forward-migration (never deletes v1);
create_goal/get_goal/update_goal dependency dropped (file/steering-based); the
PreToolUse create_goal budget guard kept compiled+unit-tested but its hooks.json
registration removed (inert in CC). 26 tests pass. ultragoal removed from
sync-components HANDLED set — it is a hand-fork, not patch-synced.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim 6123fd8a43 ci: add claudecode-compatibility job + gated publish-claude workflow
ci.yml claudecode-compatibility (3-OS, runs test:claude) wired into build.needs.
publish-claude.yml: workflow_dispatch-only, identity guard, missing-secret hard-fail
(off by default), syncs to lazyclaudecode, bumps 3 omo-claude version locations.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim f5a2fa1cf6 feat(omo-claude): add 6 CC subagent definitions
reviewer/metis/explorer/librarian/planner/momus converted TOML->MD; Codex
spawn_agent re-described as the Task tool; read-only agents lack Write/Task.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim c284d8cf6b feat(omo-claude): vendor start-work-continuation with claude session prefix
codex:->claude: session prefix; model/turn_id optional in Stop validator. QA: no-op without boulder.json, no crash.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim 743671b43f feat(omo-claude): vendor ultrawork component
Keyword detector injects directive.md on ulw/ultrawork; silent otherwise. QA: directive injects, no crash.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim 3272037c3e feat(omo-claude): vendor rules component with CC patches
model/turn_id optional (SessionStart keeps model), CLAUDE_PLUGIN_ROOT/DATA env
fallback, .claude-plugin manifest path, PostToolUse matcher Write|Edit|MultiEdit,
OMO_CLAUDE_RULES_* env aliases, bundled-rules vendored. Injects w/o turn_id (QA).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim e20c51c77f feat(omo-claude): re-vendor MCP servers self-contained with CLAUDE_PLUGIN_ROOT
ast_grep + lsp servers vendored under plugin/mcp via sync-mcp.mjs; .mcp.json uses
${CLAUDE_PLUGIN_ROOT} (no ../). Both boot from a node_modules-free tree (verified
JSON-RPC initialize handshakes). lsp hook bundled to inline lsp-tools-mcp. mcp/
dist is gitignored (regenerated by build).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim 186fade2e5 feat(omo-claude): vendor lsp component
Builds to dist/cli.js; hook bundled self-contained by sync-mcp. dist/ ignored.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:11 +09:00
YeonGyu-Kim b61010e942 feat(omo-claude): vendor lsp scripts, directive.md, bundled-rules in sync-components
Per-component COPY_DIRS_BY_COMPONENT (lsp:scripts, rules:bundled-rules) and
directive.md in COPY_FILES — ultrawork/start-work-continuation read directive.md
from the component root at runtime; rules needs its bundled-rules.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 69bca167fa feat(omo-claude): vendor comment-checker component with CC patches
Vendored from omo-codex via sync-components: model/turn_id optional in the
PostToolUse validator (permission_mode kept), CLAUDE_PLUGIN_ROOT hook path.
Builds clean; runs without crash on a CC-shaped PostToolUse payload (no turn_id).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 64d5c77a27 fix(omo-claude): copy base tsconfig.json + ignore build artifacts in sync-components
tsconfig.build.json extends ./tsconfig.json (types:[node], strict); without the
base, vendored components lost @types/node and strict config. Also exclude
dist/ and node_modules/ from the --check comparison (they are build artifacts,
not synced source).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 7590c7df04 feat(script): add lazyclaudecode marketplace syncer with CC paths and filter
Forks sync-lazycodex-marketplace: reads .claude-plugin/plugin.json, writes
.claude-plugin/marketplace.json + plugins/omo, asserts sisyphuslabs/omo
identity, excludes src/test/tsconfig*/.omo from the shipped tree. RED->GREEN
test (6 pass).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 5d72506836 feat(omo-claude): add CC sync-skills script
Mirrors the codex sync-skills structure; injects a Claude Code Harness Tool
Compatibility block (maps task()/call_omo_agent()/spawn_agent()/background_output/
team_* -> the Task + Skill tools), extends the detection regex to Codex-native
verbs, and demotes any embedded Codex compat heading to (superseded).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 024788c823 feat(omo-claude): fork telemetry with distinct identity and derived literals
omo_claude_daily_active event + omo-claude: distinct-id salt; PostHog key/host/
LEGACY_PARENT_PACKAGE kept identical (shared project). platform + tmp-fallback
derived from constants (no literals). 4-flag opt-out incl inherited OMO_*.
cross-package-equivalence + cross-product distinctness tests (RED->GREEN).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim c39d16c378 feat(omo-claude): copy telemetry component sync script
Product-agnostic sync-telemetry-component.mjs (verbatim from omo-codex) +
test; generates the telemetry component's atomic-write/data-path/env-flags/
posthog-activity-state from src/telemetry. product-identity is authored
per-package, not synced.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 234429737a feat(omo-claude): add sync-components vendoring script with --check drift gate
Copies 6 omo-codex components (rules, comment-checker, lsp, ultrawork,
ultragoal, start-work-continuation) into the CC plugin tree and applies a
declarative patch manifest: relax model/turn_id validators, CLAUDE_PLUGIN_ROOT/
DATA env fallbacks, .codex-plugin->.claude-plugin, rules matcher widened to
Write|Edit|MultiEdit, start-work-continuation claude: session prefix. ultragoal
copied verbatim (deep refactor is a later task). --check detects vendor drift.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 21a80de3bc feat(omo-claude): add marketplace manifest with CC owner schema
Marketplace 'sisyphuslabs' / plugin 'omo' reused verbatim; CC native
{name,owner,plugins[]} schema with explicit source ./plugins/omo (no
metadata.pluginRoot, no Codex interface block).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 53a1c633a5 feat(omo-claude): add CC plugin manifest
Distinct omo-claude branding (brandColor #D97757, Claude Code copy), same
plugin name 'omo'. Declares skills/hooks/mcpServers paths; homepage/repository
point at code-yeongyu/lazyclaudecode.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 9ecbbd443f feat(omo-claude): scaffold package skeleton
Mirror packages/omo-codex layout for the Claude Code port: package.json
(@oh-my-opencode/omo-claude), tsconfig, index.d.ts, src/ + src/telemetry
stubs, and the plugin/ tree (.claude-plugin, components, agents, hooks,
scripts, skills, test, mcp) with a CC-worded plugin README + placeholder
package.json.

Plan: .omo/plans/omo-claude-plugin-port.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:40:10 +09:00
YeonGyu-Kim 26ec219bcd test(codex-lsp): cover lazy metadata fallback 2026-05-29 13:18:46 +09:00
YeonGyu-Kim 8896db9806 fix(codex): install lsp from local cache 2026-05-29 12:41:54 +09:00
YeonGyu-Kim 8c6e8e4986 refactor(omo-codex): rename ultragoal component to ulw-loop
Fully rename the ultragoal component to ulw-loop so the identifier
matches the ulw-loop skill it powers. Renames the component directory,
nested skill, TS identifiers (UlwLoop / ULW_LOOP_* / ulwLoop*), the
omo ulw-loop CLI subcommand, the .omo/ulw-loop state directory, the
OMO_ULW_LOOP_STEER directive token, and the @code-yeongyu/codex-ulw-loop
package. Also threads Atlas-style right-sized parallel worker delegation
and a Prometheus-style QA + maximum-parallelism plan into the ulw-loop
skill, with a critical post-subagent QA gate.

Updates aggregate wiring (plugin package components, hooks.json,
sync-skills), the install-codex agent-link test fixture, and user docs.
2026-05-29 12:38:22 +09:00
YeonGyu-Kim 0edf087117 ci(lazycodex): gate publish and install 2026-05-29 12:18:42 +09:00
YeonGyu-Kim 4bf9095456 feat(codex-lsp): lazy-start mcp backend 2026-05-29 12:18:24 +09:00
YeonGyu-Kim 5030a116f3 feat(omo-codex): rework skill set around ulw-loop and planner agents
Rename ultragoal skill to ulw-loop with a CLI bootstrap fallback and
openai.yaml hint metadata, while keeping ultragoal as a discoverable
alias. Drop the metis and momus skills in favor of bundled ultrawork
planner agents and rewrite the planing-prometheustic skill. Update
aggregate and sync-skills tests to match.
2026-05-29 11:19:00 +09:00
YeonGyu-Kim a49acecc3a feat(omo-codex): link bundled component agents into codex home
Discover component .toml agent files and symlink (or copy on Windows)
them into the Codex agents dir during install, recording an installed
agent manifest and wiring agent config_file entries into config.toml.
Add CodexAgentConfig type and support local marketplace source.
2026-05-29 11:18:01 +09:00
YeonGyu-Kim bb8ef30bbe feat(omo-codex): add post-compact rule budget to codex hook
Trim rule and result char budgets after compaction via new
postCompactMaxRuleChars/postCompactMaxResultChars config, applied
through withPostCompactBudget. Extract codex-hook helpers into
dynamic-target-fingerprints, hook-output, path-utils,
rules-engine-factory, and transcript-rule-filter modules.
2026-05-29 11:17:24 +09:00
YeonGyu-Kim 58871c4301 feat(shared-skills): move init-deep to shared skill 2026-05-28 17:03:33 +09:00
YeonGyu-Kim 5662144283 feat(omo-codex): add start-work skill markdown
Ports the OpenCode /start-work flow onto Codex as a discoverable skill.
The skill drives plan selection, Boulder state with codex:<session_id>
prefixed ids, worktree binding, parallel spawn_agent sub-tasks with
6-section prompts, 4-channel Manual-QA evidence (HTTP / tmux / browser /
computer use), ledger append at .omo/start-work/ledger.jsonl, and a
4-phase verification gate. Pairs with the start-work-continuation Codex
Stop / SubagentStop hook component that re-injects continuation while
boulder.json shows incomplete work for the active codex: session.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-28 17:03:33 +09:00
YeonGyu-Kim 67930c1598 chore(omo-codex): wire start-work continuation hooks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-28 17:03:33 +09:00
YeonGyu-Kim ced472dedf feat(omo-codex): add start-work continuation component
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-28 17:03:33 +09:00
YeonGyu-Kim 38265c5993 fix(omo-codex): use sisyphuslabs plugin identity 2026-05-28 15:45:21 +09:00
YeonGyu-Kim 1c5e251a62 feat(boulder-state): add platform-prefixed session ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-28 15:45:13 +09:00
YeonGyu-Kim 615ed40ba3 fix(omo-codex): reuse shared lsp mcp 2026-05-28 15:30:24 +09:00
YeonGyu-Kim 4f75a56ce5 feat(omo-codex): embed ast-grep MCP for Codex 2026-05-28 15:26:18 +09:00
YeonGyu-Kim 091550b94d refactor(omo-codex): port ultrawork hook to typescript 2026-05-28 15:07:51 +09:00
YeonGyu-Kim 0f0c6d0850 test(package): harden layout exclusion fixtures 2026-05-28 15:04:59 +09:00
YeonGyu-Kim ae757005a3 refactor(omo-codex): move metis/momus from skills to agent TOMLs, rewrite prometheustic
metis/momus are Codex subagents, not skills. Move them to
components/ultrawork/agents/ as TOML agent role files:

- metis.toml: gpt-5.5 high, pre-planning analyst that detects
  contradictions, ambiguity, missing constraints, and execution risks.
  Ouroboros/ralplan-inspired gap analysis. Read-only.

- momus.toml: gpt-5.5 xhigh, plan reviewer with OKAY/ITERATE/REJECT
  three-verdict system. Blocker-finder with approval bias. Read-only.

planing-prometheustic SKILL.md rewritten to match the structure of
packages/prompts-core/prompts/prometheus/gpt.md (the omo Prometheus
GPT-5.5 prompt):
- Same XML-tagged sections: identity, mission, core_principles,
  output_verbosity_spec, scope_constraints, phases, plan_template,
  critical_rules, stop_rules
- Same phase flow: Classify Intent -> Ground -> Interview -> Plan
  Generation (with Metis) -> High Accuracy Review (with Momus)
- Metis called via spawn_agent(agent_type="metis") not skill load
- Momus called via spawn_agent(agent_type="momus") not skill load
- "Rigorous Review" renamed to "High Accuracy Review"
- Removed shared-skills/skills/metis/ and momus/ (deleted)
- sync-skills.mjs no longer copies metis/momus into plugin/skills/
2026-05-28 14:57:05 +09:00