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
16 changes: 8 additions & 8 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
},
"metadata": {
"description": "Go-specific and general-purpose AI coding assistant plugins - by Gopher Guides",
"version": "1.7.1"
"version": "1.7.2"
},
"plugins": [
{
"name": "go-workflow",
"source": "./plugins/go-workflow",
"description": "Issue-to-PR workflow automation with worktree management",
"version": "1.7.1",
"version": "1.7.2",
"keywords": [
"workflow",
"github",
Expand All @@ -26,7 +26,7 @@
"name": "go-dev",
"source": "./plugins/go-dev",
"description": "Go-specific development tools with best practices",
"version": "1.7.1",
"version": "1.7.2",
"keywords": [
"go",
"testing",
Expand All @@ -39,7 +39,7 @@
"name": "productivity",
"source": "./plugins/productivity",
"description": "Standup reports and git productivity helpers",
"version": "1.7.1",
"version": "1.7.2",
"keywords": [
"standup",
"changelog",
Expand All @@ -52,7 +52,7 @@
"name": "gopher-guides",
"source": "./plugins/gopher-guides",
"description": "Go best practices guidance powered by Gopher Guides training materials",
"version": "1.7.1",
"version": "1.7.2",
"keywords": [
"go",
"training",
Expand All @@ -64,7 +64,7 @@
"name": "llm-tools",
"source": "./plugins/llm-tools",
"description": "Multi-LLM integration for second opinions and task delegation",
"version": "1.7.1",
"version": "1.7.2",
"keywords": [
"llm",
"openai",
Expand All @@ -81,7 +81,7 @@
"name": "go-web",
"source": "./plugins/go-web",
"description": "Opinionated Go web app scaffolding with Templ + HTMX + Alpine.js + Tailwind",
"version": "1.7.1",
"version": "1.7.2",
"keywords": [
"go",
"web",
Expand All @@ -97,7 +97,7 @@
"name": "tailwind",
"source": "./plugins/tailwind",
"description": "Tailwind CSS v4 tools for initialization, auditing, migration, and optimization",
"version": "1.7.1",
"version": "1.7.2",
"keywords": [
"tailwind",
"css",
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ For Codex, "global" means installing plugins through the Codex marketplace cache
./scripts/install-codex.sh --user
```

`--user` stages each new commit-hash root before activating it and retains previously published roots so active Codex sessions keep working through an update.
`--user` registers or upgrades the marketplace and runs `codex plugin add` for each Codex-capable plugin. Codex owns config updates and publishes immutable versioned roots, retaining prior versions for active sessions.

The universal installer handles every detected platform in one step:

Expand All @@ -86,7 +86,7 @@ After all Codex sessions have exited, stale marketplace cache roots can be remov
./scripts/install-codex.sh --prune-cache
```

Do not prune while a Codex session is active. Running sessions retain absolute hook and skill paths into their original cache roots. The prune command keeps the latest installed commit.
Do not prune while a Codex session is active. Running sessions retain absolute hook and skill paths into their original cache roots. The prune command keeps the current plugin version.

### Migration

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,9 +305,9 @@ Plugins are distributed via the [Codex plugin system](https://developers.openai.

**Install into another repo:** `./scripts/install-codex.sh --repo /path/to/your-repo` copies the current plugin set and merges entries into that repo's `.agents/plugins/marketplace.json` without removing unrelated plugin entries.

**GitHub one-liner:** `bash -c "$(curl -fsSL https://raw.githubusercontent.com/gopherguides/gopher-ai/main/scripts/install-all.sh)"` auto-detects all platforms — installs Claude Code and Gemini, and installs Codex plugins globally via Codex's marketplace mechanism (so skills load in every Codex session). The Codex install runs `codex plugin marketplace add gopherguides/gopher-ai`, populates `~/.codex/plugins/cache/gopher-ai/<plugin>/<commit>/` from the marketplace clone, and writes `[plugins."<name>@gopher-ai"]\nenabled = true` entries to `~/.codex/config.toml`. The marketplace cache is the only path Codex actually loads from — direct copies to `~/.codex/plugins/<name>/` are silently ignored.
**GitHub one-liner:** `bash -c "$(curl -fsSL https://raw.githubusercontent.com/gopherguides/gopher-ai/main/scripts/install-all.sh)"` auto-detects all platforms — installs Claude Code and Gemini, and installs Codex plugins globally so skills load in every Codex session. The Codex install registers or upgrades the gopher-ai marketplace, then runs `codex plugin add <plugin>@gopher-ai` for all six Codex-capable plugins. Codex owns the cache publication and plugin enablement; the installer does not write private cache roots or `config.toml` plugin entries.

**Cache lifecycle:** `install-codex.sh --user` stages each new commit-hash root before activating it and leaves older roots available to Codex sessions that started before the update. After all Codex sessions have exited, remove superseded roots with `./scripts/install-codex.sh --prune-cache`. Do not prune while Codex is running; active sessions retain absolute hook and skill paths into their original roots. The prune command keeps the latest installed commit and requires confirmation unless `--yes` is supplied.
**Cache lifecycle:** Codex publishes each plugin under its manifest version and leaves older roots available to sessions that started before an update. After all Codex sessions have exited, remove superseded roots with `./scripts/install-codex.sh --prune-cache`. Do not prune while Codex is running; active sessions retain absolute hook and skill paths into their original roots. The prune command keeps the current version and requires confirmation unless `--yes` is supplied.

**Migration from older versions:** Three earlier states needed cleanup, all handled automatically by the SessionStart hook (no command required) plus by `install-codex.sh --user` whenever you run install-all:
- Flat skills at `~/.codex/skills/<name>/` from the original (broken) `--user` mode — overflowed Codex's [skill metadata budget](https://developers.openai.com/codex/skills).
Expand Down
2 changes: 1 addition & 1 deletion plugins/go-dev/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "go-dev",
"description": "Go-specific development tools with idiomatic best practices",
"version": "1.7.1",
"version": "1.7.2",
"author": {
"name": "Gopher Guides",
"email": "support@gopherguides.com"
Expand Down
2 changes: 1 addition & 1 deletion plugins/go-dev/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "go-dev",
"version": "1.7.1",
"version": "1.7.2",
"description": "Go-specific development tools with idiomatic best practices",
"author": {
"name": "Gopher Guides",
Expand Down
2 changes: 1 addition & 1 deletion plugins/go-web/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "go-web",
"description": "Opinionated Go web app scaffolding with Templ + HTMX + Alpine.js + Tailwind",
"version": "1.7.1",
"version": "1.7.2",
"author": {
"name": "Gopher Guides",
"email": "support@gopherguides.com"
Expand Down
2 changes: 1 addition & 1 deletion plugins/go-web/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "go-web",
"version": "1.7.1",
"version": "1.7.2",
"description": "Opinionated Go web app scaffolding with Templ + HTMX + Alpine.js + Tailwind",
"author": {
"name": "Gopher Guides",
Expand Down
2 changes: 1 addition & 1 deletion plugins/go-workflow/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "go-workflow",
"description": "Issue-to-PR workflow automation with git worktree management",
"version": "1.7.1",
"version": "1.7.2",
"author": {
"name": "Gopher Guides",
"email": "support@gopherguides.com"
Expand Down
2 changes: 1 addition & 1 deletion plugins/go-workflow/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "go-workflow",
"version": "1.7.1",
"version": "1.7.2",
"description": "Issue-to-PR workflow automation with git worktree management",
"author": {
"name": "Gopher Guides",
Expand Down
6 changes: 3 additions & 3 deletions plugins/go-workflow/hooks/codex-cleanup-on-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -256,9 +256,9 @@ json_author_email() {
#
# A directory at ~/.codex/plugins/<plugin-name>/ is ALWAYS stale (regardless
# of marker) — we just learned that Codex never actually loaded plugins from
# there. The legitimate install path is the marketplace cache at
# ~/.codex/plugins/cache/gopher-ai/<plugin>/<commit-hash>/, populated by
# install-codex.sh --user. Earlier `--user` versions wrote a marker file
# there. The legitimate install path is the versioned marketplace cache at
# ~/.codex/plugins/cache/gopher-ai/<plugin>/<version>/, populated by the public
# Codex plugin CLI. Earlier `--user` versions wrote a marker file
# alongside a direct install; that direct install was inert, so removing it
# only eliminates clutter and frees the directory name for the user.
if [[ -d "$PLUGINS_HOME" ]]; then
Expand Down
2 changes: 1 addition & 1 deletion plugins/gopher-guides/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "gopher-guides",
"description": "Gopher Guides training materials integrated into Claude",
"version": "1.7.1",
"version": "1.7.2",
"author": {
"name": "Gopher Guides",
"email": "support@gopherguides.com"
Expand Down
2 changes: 1 addition & 1 deletion plugins/gopher-guides/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "gopher-guides",
"version": "1.7.1",
"version": "1.7.2",
"description": "Gopher Guides training materials integration",
"author": {
"name": "Gopher Guides",
Expand Down
2 changes: 1 addition & 1 deletion plugins/llm-tools/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "llm-tools",
"description": "Multi-LLM integration for second opinions and task delegation",
"version": "1.7.1",
"version": "1.7.2",
"author": {
"name": "Gopher Guides",
"email": "support@gopherguides.com"
Expand Down
2 changes: 1 addition & 1 deletion plugins/llm-tools/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "llm-tools",
"version": "1.7.1",
"version": "1.7.2",
"description": "Multi-LLM integration for second opinions and task delegation",
"author": {
"name": "Gopher Guides",
Expand Down
2 changes: 1 addition & 1 deletion plugins/productivity/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "productivity",
"description": "Standup reports, changelogs, and git productivity helpers",
"version": "1.7.1",
"version": "1.7.2",
"author": {
"name": "Gopher Guides",
"email": "support@gopherguides.com"
Expand Down
2 changes: 1 addition & 1 deletion plugins/tailwind/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "tailwind",
"description": "Tailwind CSS v4 tools for initialization, auditing, migration, and optimization",
"version": "1.7.1",
"version": "1.7.2",
"author": {
"name": "Gopher Guides",
"email": "support@gopherguides.com"
Expand Down
2 changes: 1 addition & 1 deletion plugins/tailwind/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tailwind",
"version": "1.7.1",
"version": "1.7.2",
"description": "Tailwind CSS v4 tools for initialization, auditing, migration, and optimization",
"author": {
"name": "Gopher Guides",
Expand Down
14 changes: 10 additions & 4 deletions scripts/build-universal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -139,15 +139,21 @@ To add these plugins to another repo:

### Global (Personal) Use

For Codex, "global" means cloning this repo and running Codex inside it — Codex auto-discovers `.agents/plugins/marketplace.json` and offers the plugins through `/plugins`. There is no flat-skills install path; the previous `--user` mode was removed because it double-loaded skills alongside the marketplace and overflowed Codex's skill metadata budget.
For Codex, "global" means installing plugins through the public Codex plugin CLI so they load in every session, regardless of the working directory.

If you previously ran `--user`, clean up the legacy entries once:
```bash
./scripts/install-codex.sh --user
```

`--user` registers or upgrades the gopher-ai marketplace and runs `codex plugin add` for each Codex-capable plugin. Codex owns config updates and versioned cache publication.

After all Codex sessions have exited, stale version roots can be removed explicitly:

```bash
./scripts/install-codex.sh --cleanup
./scripts/install-codex.sh --prune-cache
```

Restart Codex after cleanup. Use `/plugins` to verify.
Do not prune while a Codex session is active. Restart Codex after installation and use `/plugins` to verify.

## Architecture

Expand Down
2 changes: 1 addition & 1 deletion scripts/install-all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ check_prerequisites() {
local missing=()

# jq is needed by build-universal.sh (Claude/Gemini) and by install-codex.sh
# for marketplace.json manipulation when installing globally.
# for public marketplace discovery and plugin manifest parsing.
if $HAVE_CLAUDE || $HAVE_GEMINI || $HAVE_CODEX; then
if ! command -v jq >/dev/null 2>&1; then
missing+=("jq (brew install jq / apt install jq)")
Expand Down
Loading
Loading