Skip to content

Repository files navigation

gnapi-ai-plugins

Gnapi team's Claude Code plugin marketplace — shared skills, commands, and agents. Add it once and every team member gets the same house-rule tooling inside Claude Code.

Install

Claude Code

In any Claude Code session:

/plugin marketplace add gnapi-tech/gnapi-ai-plugins
/plugin install gnapi-scaffolding@gnapi-ai-plugins

Pull future updates with:

/plugin marketplace update gnapi-ai-plugins
/plugin update gnapi-scaffolding

OpenAI Codex

Codex has no plugin marketplace — it reads AGENTS.md (and .codex/AGENTS.md) from the repo it's working in. So install = copy the generated shims into the target repo:

git clone https://github.com/gnapi-tech/gnapi-ai-plugins /tmp/gnapi-ai-plugins
cd /path/to/your-repo
cp /tmp/gnapi-ai-plugins/AGENTS.md .            # playbook + inlined standards
cp -R /tmp/gnapi-ai-plugins/.codex .            # .codex/AGENTS.md + reference config.toml

If the repo already has an AGENTS.md, keep yours and append the Gnapi one instead of overwriting:

cat /tmp/gnapi-ai-plugins/AGENTS.md >> AGENTS.md

.codex/config.toml is a reference config (approval_policy, sandbox_mode, web_search) — keep it project-local or copy it to ~/.codex/config.toml for every project. Start Codex in the repo root and it picks the instructions up automatically:

codex

Pull updates by re-running the copy after git pull in the clone. Two caveats off Claude: no auto-trigger (ask for the scaffold explicitly) and no PreToolUse hook (the standards are inlined into AGENTS.md instead). Other harnesses — Cursor, opencode, Antigravity, Gemini CLI — see Using on other agents.

Plugins

Plugin Description Provides
gnapi-scaffolding Bakes Gnapi house rules (TDD, gts/Google lint + prettier, husky pre-commit, zod env validation, structured logging + tracing, error catalog, i18n, CI coverage gate) into new services from day one. skill scaffold-nestjs-service
gnapi-standards Injects Gnapi coding standards into context before Claude writes source files. PreToolUse hook

gnapi-scaffolding

After installing, invoke a skill directly or let Claude pick it up by task:

/gnapi-scaffolding:scaffold-nestjs-service

scaffold-nestjs-service — params service_name (kebab-case), github_org. Scaffolds a production-grade NestJS service compliant with every house rule.

gnapi-standards

No command to run — once installed it works automatically. On the first source-file write of a session (Write/Edit/MultiEdit/NotebookEdit on a .ts/.js/.py/.go/... file) a PreToolUse hook injects the Gnapi coding standards into Claude's context:

  • TDD — test-first (RED → GREEN → refactor), no production code without a test; keep coverage > 85%.
  • SOLID & DRY — single-responsibility, depend on abstractions, no copy-paste.
  • Naming — meaningful, intent-revealing; no cryptic abbreviations.
  • Comments — capture the hidden why and how, not the obvious what.
  • No hard-coded literals — extract to named constants in their own files.
  • Structured logging & tracing — project logger only, with trace correlation.
  • Error management — error-numbered errors, no unhandled exceptions, and catch blocks that take a real action + fallback (never log-and-swallow).

The hook is non-blocking (it only injects guidance) and fires once per session to stay quiet. It needs node on PATH; if absent it no-ops.

The machine-checkable subset (naming format, no-console, no-magic-numbers, no-floating-promises, coverage) is additionally enforced at commit/CI by gnapi-scaffolding's lint overlay and pre-commit hook. The review gate (code-reviewer + QA agents before merge) is enforced server-side by branch protection + required CI status checks, not by a local hook.

Using on other agents (Codex, Cursor, opencode, Antigravity, Gemini)

The plugin format (marketplace, Skill tool, PreToolUse hook) is Claude-specific, but the playbook content is portable. portable/build-shims.mjs fans out the same two sources into each harness's native config — the ECC strategy (per-harness trees), except generated from one source of truth instead of hand-maintained, so they never drift.

node portable/build-shims.mjs   # regenerate every shim from SKILL.md + portable/STANDARDS.md
Harness Generated artifact
Claude Code native plugin (plugins/…) + CLAUDE.md pointer
OpenAI Codex AGENTS.md, .codex/AGENTS.md, .codex/config.toml
Cursor .cursor/rules/gnapi.mdc
opencode .opencode/opencode.jsonAGENTS.md
Google Antigravity .agent/AGENTS.md
Gemini CLI GEMINI.mdAGENTS.md
Other SKILL.md loaders .agents/skills/<name>/SKILL.md

Off-Claude there's no auto-trigger and no hook: the agent invokes the playbook manually (the skill description is embedded so it recognises the intent) and the standards are inlined instead of hook-injected. Shims are generated — edit the sources, never the output; CI fails on drift. Per-harness install and what does/doesn't carry over: see portable/README.md.

Repository layout

.
├── .claude-plugin/
│   └── marketplace.json              # marketplace catalog (lists all plugins)
├── .github/workflows/
│   └── shims.yml                     # fails if any generated shim is out of date
├── plugins/
│   ├── gnapi-scaffolding/
│   │   ├── .claude-plugin/
│   │   │   └── plugin.json            # plugin manifest
│   │   └── skills/
│   │       └── scaffold-nestjs-service/
│   │           └── SKILL.md           # the skill (source of truth)
│   └── gnapi-standards/
│       ├── .claude-plugin/
│       │   └── plugin.json            # plugin manifest
│       ├── hooks/
│       │   └── hooks.json             # PreToolUse matchers → scripts
│       └── scripts/
│           ├── precode-standards.sh   # node guard / launcher (Write/Edit)
│           └── precode-standards.js   # injects standards as additionalContext
├── portable/
│   ├── STANDARDS.md                   # canonical standards (mirror of the hook text)
│   ├── build-shims.mjs                # generator: sources → all harness shims
│   └── README.md                      # per-harness install + porting notes
│
│   # ── GENERATED by portable/build-shims.mjs (do not hand-edit) ──
├── AGENTS.md                          # universal entry (Codex/opencode/Cursor/Amp/Zed…)
├── CLAUDE.md                          # Claude pointer → native plugin
├── GEMINI.md                          # Gemini CLI pointer → AGENTS.md
├── .codex/                            # Codex: AGENTS.md + config.toml
├── .cursor/rules/gnapi.mdc            # Cursor always-apply rule
├── .opencode/opencode.json            # opencode instructions → AGENTS.md
├── .agent/AGENTS.md                   # Google Antigravity
├── .agents/skills/…/SKILL.md          # generic SKILL.md loaders (verbatim skill)
└── README.md

Adding a new skill

  1. Drop it under an existing plugin: plugins/<plugin>/skills/<skill-name>/SKILL.md. The SKILL.md needs YAML frontmatter with name and description.
  2. Or add a whole new plugin: create plugins/<new-plugin>/.claude-plugin/plugin.json plus its skills/, then append an entry to .claude-plugin/marketplace.json.
  3. Bump the version in the affected plugin.json and the marketplace entry so /plugin update actually ships it to the team.
  4. Open a PR to develop.

Contributing

Work on a branch off develop; open a PR back to develop. main is the released marketplace state that team sessions install from.

About

Claude Code plugin marketplace for the Gnapi team — shareable skills, commands, and agents. Add with /plugin marketplace add gnapi-tech/vzone-shared-utils.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages