Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,11 @@
"category": "Productivity"
},
{
"name": "speak-swiftly-server",
"name": "speak-swiftly",
"source": {
"source": "local",
"path": "./plugins/SpeakSwiftlyServer"
"source": "url",
"url": "https://github.com/gaelic-ghost/SpeakSwiftlyServer.git",
"ref": "main"
},
"policy": {
"installation": "AVAILABLE",
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ Use this file for durable repo-local guidance that Codex should follow before ch
- Use a feature branch or worktree when the change needs isolation for safety, review, or overlapping parallel work, but do not force that path for ordinary `socket` maintenance.
- Prefer small, focused commits over broad mixed changes.
- For ordinary fixes in monorepo-owned child directories, edit the relevant copy under `plugins/` directly in `socket`.
- For `apple-dev-skills` and `SpeakSwiftlyServer`, keep subtree sync operations explicit and isolated from unrelated edits.
- Treat `plugins/SpeakSwiftlyServer` as a downstream mirror of the standalone SpeakSwiftlyServer checkout. Build, validate, tag, release, and live-refresh SpeakSwiftlyServer from its own checkout, then subtree-pull the merged child state into `socket`; do not subtree-push SpeakSwiftlyServer changes from `socket` unless Gale explicitly overrides that one-off rule.
- For `apple-dev-skills`, keep subtree sync operations explicit and isolated from unrelated edits.
- Treat `plugins/SpeakSwiftlyServer` as a downstream source mirror of the standalone SpeakSwiftlyServer checkout, not as the Socket plugin payload. Speak Swiftly plugin payload edits belong in the standalone checkout and reach Socket users through the Git-backed marketplace entry. Subtree-pull `SpeakSwiftlyServer` into `socket` only when the superproject intentionally needs the standalone source state for release or accounting work; do not subtree-push SpeakSwiftlyServer changes from `socket` unless Gale explicitly overrides that one-off rule.
- When a child repo gains, removes, or moves plugin packaging, update [`.agents/plugins/marketplace.json`](./.agents/plugins/marketplace.json), [README.md](./README.md), and the root maintainer docs in the same pass.

### Subtree Sync And Branch Accounting Gates
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ If the change is really about one child repository's own skills, packaging, test

### Making Changes

Keep changes bounded to one coherent root concern at a time, such as docs-only root alignment, marketplace-path or manifest-alignment fixes, root validation improvements, or root subtree-workflow documentation updates. For ordinary work in monorepo-owned child directories, edit the copy in the relevant directory under `plugins/` directly from this checkout. For `apple-dev-skills`, keep subtree pull and push operations explicit and separate from unrelated edits. For `SpeakSwiftlyServer`, treat `socket` as a pull-only mirror of the standalone release checkout unless maintainers explicitly approve a one-off push from `socket`.
Keep changes bounded to one coherent root concern at a time, such as docs-only root alignment, marketplace-path or manifest-alignment fixes, root validation improvements, or root subtree-workflow documentation updates. For ordinary work in monorepo-owned child directories, edit the copy in the relevant directory under `plugins/` directly from this checkout. For `apple-dev-skills`, keep subtree pull and push operations explicit and separate from unrelated edits. For Speak Swiftly plugin payload changes, work in the standalone `SpeakSwiftlyServer` checkout; `socket` lists that payload by Git-backed marketplace reference. Treat `plugins/SpeakSwiftlyServer` as a pull-only source mirror, and refresh it only when the superproject intentionally needs the standalone source state.

When changing user-facing plugin install or update docs, make the Git-backed marketplace path the default. Use `codex plugin marketplace add <owner>/<repo>` for install setup and `codex plugin marketplace upgrade <marketplace-name>` for updates; keep explicit refs such as `<owner>/<repo>@vX.Y.Z` scoped to pinned reproducible installs, and keep manual local marketplace roots scoped to development, unpublished testing, or fallback instructions.

Expand Down
18 changes: 13 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ Only `apple-dev-skills` and `SpeakSwiftlyServer` still use subtree sync workflow

Treat Gale's local `socket` checkout as the normal day-to-day checkout on `main`. Work in the monorepo copy first, and use the relevant directory under [`plugins/`](./plugins/) for child-repository changes unless the task is explicitly about the root marketplace or root maintainer docs. Reach for a feature branch or a dedicated worktree only when the change needs extra isolation.

Keep root docs and marketplace wiring in sync with packaging changes in the same pass. For monorepo-owned child directories, edit the relevant directory under [`plugins/`](./plugins/) directly and commit in `socket`. For `apple-dev-skills` and `SpeakSwiftlyServer`, keep subtree sync operations explicit and isolated. `SpeakSwiftlyServer` is pull-only from `socket` by default: release and validate it in its standalone checkout, then pull the released state down here.
Keep root docs and marketplace wiring in sync with packaging changes in the same pass. For monorepo-owned child directories, edit the relevant directory under [`plugins/`](./plugins/) directly and commit in `socket`. For `apple-dev-skills`, keep subtree sync operations explicit and isolated. For Speak Swiftly plugin payload changes, work in the standalone `SpeakSwiftlyServer` checkout; the Socket marketplace points at that Git-backed plugin source and does not need a copied payload update here. Use the `SpeakSwiftlyServer` subtree pull only when `socket` intentionally needs the standalone source mirror refreshed for release or accounting work.

When a guidance change intentionally spans multiple child skill repositories, update the affected child docs and the root `socket` docs in the same pass so the superproject still explains why the coordinated edit belongs here.

Expand All @@ -128,8 +128,9 @@ Use [`docs/maintainers/release-modes.md`](./docs/maintainers/release-modes.md) f
The current root validation surface is structural:

- keep [`.agents/plugins/marketplace.json`](./.agents/plugins/marketplace.json) valid JSON
- verify that every listed `source.path` matches the real child surface that the child repo treats as installable
- verify that every packaged plugin path still exposes a matching `.codex-plugin/plugin.json`
- verify that every local entry's `source.path` matches the real child surface that the child repo treats as installable
- verify that every local packaged plugin path still exposes a matching `.codex-plugin/plugin.json`
- verify that every Git-backed entry uses the documented root-plugin or subdirectory source shape
- review child-repo docs when plugin packaging paths move
- run child-repo-specific validation from the relevant child repo when the change is really about that child repo

Expand Down Expand Up @@ -162,6 +163,7 @@ When a child repository or helper surface grows Python-backed validation beyond
│ ├── media/
│ │ └── codex-plugin-directory-socket-productivity-skills.png
│ └── maintainers/
│ ├── plugin-install-testing.md
│ ├── plugin-packaging-strategy.md
│ ├── release-modes.md
│ └── subtree-workflow.md
Expand Down Expand Up @@ -191,6 +193,7 @@ The root superproject docs are:
- [ROADMAP.md](./ROADMAP.md) for root planning and milestone tracking
- [ACCESSIBILITY.md](./ACCESSIBILITY.md) for the root accessibility contract around docs, metadata, and maintainer automation
- [`docs/maintainers/`](./docs/maintainers/) for the deeper maintainer references behind the mixed-monorepo and subtree model
- [`docs/maintainers/plugin-install-testing.md`](./docs/maintainers/plugin-install-testing.md) for isolated local and Git-backed marketplace install tests that leave personal production installs untouched
- [`docs/maintainers/release-modes.md`](./docs/maintainers/release-modes.md) for the `standard` and `subtrees` release modes
- [`docs/media/`](./docs/media/) for README screenshots and other root documentation media assets

Expand All @@ -200,11 +203,12 @@ Treat `socket` as the canonical home for the monorepo-owned child directories an

- `agent-plugin-skills`, `cardhop-app`, `dotnet-skills`, `productivity-skills`, `rust-skills`, `spotify`, `things-app`, and `web-dev-skills` are monorepo-owned here.
- `apple-dev-skills` and `SpeakSwiftlyServer` preserve explicit subtree sync paths.
- `SpeakSwiftlyServer` is synchronized into `socket` by subtree pull after the standalone child release lands; do not subtree-push it from `socket` unless Gale explicitly asks for that exception.
- `SpeakSwiftlyServer` may be synchronized into `socket` by subtree pull after standalone source or release work lands, but routine Speak Swiftly plugin payload edits do not need a subtree pull because the Socket catalog installs from the Git-backed standalone repository.
- `python-skills` is monorepo-owned here with no separate upstream GitHub release target.
- Child repos may expose plugin packaging from their own repo roots whether they are monorepo-owned here or still preserve subtree sync.
- `apple-dev-skills` packages from its child-repo root at `./plugins/apple-dev-skills`, and its Codex plugin manifest registers Xcode's built-in MCP bridge through a root `.mcp.json`.
- `apple-dev-skills` and `SpeakSwiftlyServer` also carry their own repo-local `.agents/plugins/marketplace.json` files so Codex can track either child repository as a Git-backed standalone marketplace without cloning `socket`.
- `SpeakSwiftlyServer` owns the canonical `speak-swiftly` plugin payload. The Socket marketplace exposes that payload by Git-backed reference so users can enable `Speak Swiftly` from the Socket catalog without `socket` carrying a second copied plugin directory.
- `things-app` packages from its child-repo root at `./plugins/things-app`, and its bundled MCP server lives directly under that child repo's top-level `mcp/` directory.
- `cardhop-app` packages from its child-repo root at `./plugins/cardhop-app`, and its bundled MCP server lives directly under that child repo's top-level `mcp/` directory.

Expand All @@ -219,7 +223,7 @@ That marketplace points at the actual plugin root each child repository treats a
- `./plugins/cardhop-app`
- `./plugins/dotnet-skills`
- `./plugins/productivity-skills`
- `./plugins/SpeakSwiftlyServer`
- `gaelic-ghost/SpeakSwiftlyServer` for `speak-swiftly`, displayed as `Speak Swiftly`
- `./plugins/python-skills`
- `./plugins/rust-skills`
- `./plugins/spotify`
Expand All @@ -230,6 +234,8 @@ For `things-app`, that marketplace path stays `./plugins/things-app` because the

For `cardhop-app`, that marketplace path stays `./plugins/cardhop-app` because the installable plugin root is the child repo root while the bundled Cardhop MCP server now lives at top-level `mcp/` inside that child repo.

For Speak Swiftly, the marketplace points at the canonical `SpeakSwiftlyServer` repository as a Git-backed plugin source named `speak-swiftly`, with the UI display name `Speak Swiftly`. That keeps the standalone `SpeakSwiftlyServer` marketplace fully functional while avoiding two plugin payload copies that can drift.

The mixed shape is intentional for now. `socket` does not try to flatten those child repo packaging models into one fake uniform layout, and it does not define a second aggregate Codex plugin root above the child repos.

Current [OpenAI Codex plugin docs](https://developers.openai.com/codex/plugins/build) support Git-backed marketplace sources and the [`codex plugin marketplace add`](https://developers.openai.com/codex/plugins/build#add-a-marketplace-from-the-cli) command. That makes the Git-backed marketplace the preferred install and update path for `socket`:
Expand All @@ -241,6 +247,8 @@ codex plugin marketplace upgrade socket

Use the `socket` marketplace when you want one catalog for Gale's plugin set. From that marketplace, users can install or enable individual entries such as `apple-dev-skills`, `productivity-skills`, `agent-plugin-skills`, `python-skills`, `things-app`, and the other listed child plugins. This is especially useful for workflows that need companion skills, such as Apple bootstrap or guidance-sync workflows that rely on both `apple-dev-skills` and `productivity-skills`.

When both the Socket marketplace and the standalone SpeakSwiftlyServer marketplace are configured, prefer enabling `speak-swiftly` from the Socket catalog and disabling duplicate standalone enablement. The Speak Swiftly doctor should detect duplicate installs or enablement and offer a repair path that keeps the Socket entry active.

Standalone child repositories that carry their own repo marketplace should use the same pattern against their own Git repository:

```bash
Expand Down
Loading