feat(codex): dev-mode local marketplace + live skill symlink#122
Merged
Conversation
From a source checkout, `agentbox install codex` now points the Codex marketplace at the local repo (`source_type = "local"`) instead of the `madarco/agentbox` GitHub slug, re-syncs the bundle skill copy, stages the plugin from the working tree, then symlinks the staged per-skill SKILL.md back to the repo so skill edits go live on the next Codex restart. A published npm install is unaffected (no `plugins/`/`.agents/` ships, so it always uses GitHub). - New `apps/cli/src/lib/source-checkout.ts`: shared `isSourceCheckout`, `resolveHostSkillsDir`, and `resolveDevRepoRoot` (repo root only in a checkout carrying the Codex sources, else null). `install.ts` now imports these. - `--no-dev` forces the published GitHub path even inside a checkout; a source-type conflict (local <-> git) is handled by remove-then-add. - Symlink the skill *files* only — a whole-dir symlink makes Codex report the plugin "not installed". - Tests for the source-checkout helpers and `marketplaceSource`; docs in docs/development.md. Claude-Session: https://claude.ai/code/session_01An9tT8HqjQoGKKVWuYg4bb
…mpts Tell the in-box agent that `agentbox.yaml` services/containers start automatically (check with `agentbox-ctl status`) and that web services are reachable at https://<AGENTBOX_BOX_HOST> from both box and host. Wording is tailored per provider (local proxy for docker, cloud URL for the cloud ones). Claude-Session: https://claude.ai/code/session_01An9tT8HqjQoGKKVWuYg4bb
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
- Attempt the dev skill symlink whenever a staged dir exists, not only when `codex plugin add` exits 0: a non-zero exit is treated as "already installed" and continues, leaving a staged cache we still want live-symlinked. - Never symlink into a non-existent manifest-version path: if the manifest version dir is absent and the cache doesn't hold exactly one child, bail with "staged plugin dir not found" instead of mkdir-ing an orphan tree Codex ignores. Claude-Session: https://claude.ai/code/session_01An9tT8HqjQoGKKVWuYg4bb
Owner
Author
|
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit e6964d3. Configure here.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Makes the Codex plugin reflect working-tree edits in dev (source checkout) without a publish/re-fetch round-trip, mirroring how the Claude host skills already symlink in dev. A published npm install is unchanged — it still installs from the
madarco/agentboxGitHub marketplace.Dev (
agentbox install codexfrom a checkout)[marketplaces.agentbox]at the local repo (source_type = "local") instead of the GitHub slug, socodex plugin addstages from the working tree.scripts/check-plugin-skill-sync.mjs --fix).SKILL.mdback to the repo → skill edits go live on the next Codex restart, no re-stage.--no-devforces the published GitHub path; a source-type flip (local ↔ git) is handled by remove-then-add in both directions.Shared helper
apps/cli/src/lib/source-checkout.ts:isSourceCheckout,resolveHostSkillsDir,resolveDevRepoRoot(returns the repo root only in a checkout carrying.agents/plugins/marketplace.json+plugins/agentbox, elsenull).install.tsnow imports these (Claude path unchanged).Also
agentbox.yamlservices/containers auto-start (agentbox-ctl status) and web services are reachable athttps://<AGENTBOX_BOX_HOST>.Verification
SKILL.mdis a symlink;codex plugin listshowsinstalled, enabled; canonical edit →--fix→ visible at the path Codex reads.--no-devflips cleanly back to git.pnpm -C apps/cli test(648 pass), lint, typecheck, andpnpm check:plugin-skillall green.docs/development.md.https://claude.ai/code/session_01An9tT8HqjQoGKKVWuYg4bb
Note
Low Risk
Changes are mostly dev-install ergonomics and docs; published npm installs still use GitHub, with best-effort Codex CLI and filesystem side effects gated on Codex being present.
Overview
Codex install in a source checkout now mirrors Claude host skills:
agentbox install codexregisters a local marketplace (source_type = "local") instead ofmadarco/agentbox, re-syncs the bundle skill viacheck-plugin-skill-sync.mjs --fix, re-stages from the working tree, and replaces stagedskills/*/SKILL.mdwith symlinks to the repo (whole-dir symlinks break Codex “installed” detection).--no-devforces GitHub; local ↔ git flips use marketplace remove-then-add because Codex rejects mixed source types.Shared
source-checkout.tscentralizesresolveHostSkillsDir,isSourceCheckout, andresolveDevRepoRoot;install.tsimports it (Claude symlink behavior unchanged).docs/development.mddocuments the dev workflow.Sandbox system prompts (all providers) now mention
agentbox.yamlauto-start,agentbox-ctl status, and web UI athttps://<AGENTBOX_BOX_HOST>. Codex plugin icon (icon.svg) is replaced with a simpler mark.Reviewed by Cursor Bugbot for commit e6964d3. Configure here.