| namespace | aiwg |
| name | package-plugin |
| platforms | ["all"] |
| description | Package a built-in or standalone project-local AIWG plugin wrapper for marketplace distribution |
| triggers | ["standalone plugin repository","publish project-local plugin","package project-local plugin","community plugin repository"] |
Package Plugin
You validate and package either a built-in marketplace wrapper or a standalone
project-local wrapper. Standalone wrappers are auto-discovered under
.aiwg/plugins/<name>/ and emitted as deterministic provider archives.
Triggers
Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):
- "bundle the voice plugin for release" → package voice plugin
- "prepare the SDLC plugin for distribution" → package sdlc plugin
- "create the plugin wrapper" → package the generated provider wrapper
- "publish project-local plugin" → validate and package the repository-local wrapper
- "standalone plugin repository" → use the community/team repository workflow
Trigger Patterns Reference
| Pattern | Example | Action |
|---|
| Package plugin | "package plugin sdlc" | Run aiwg package-plugin sdlc |
| Bundle plugin | "bundle plugin voice" | Run aiwg package-plugin voice |
| Create package | "create plugin package utils" | Run aiwg package-plugin utils |
| Dry run | "validate sdlc plugin before packaging" | Run aiwg package-plugin sdlc --dry-run |
| Standalone wrapper | "package project-local plugin team-tools" | Run aiwg package-plugin team-tools --dry-run |
| Explicit source | "package wrapper from wrappers/team-tools" | Run aiwg package-plugin team-tools --source wrappers/team-tools |
Behavior
When triggered:
-
Extract intent:
- Which delivery wrapper is being packaged?
- Which provider wrapper is needed?
- Should existing generated output be cleaned first?
- Is this a validation dry run?
-
Run the appropriate command:
aiwg package-plugin sdlc
aiwg package-plugin voice
aiwg package-plugin marketing
aiwg package-plugin sdlc --dry-run
aiwg package-plugin sdlc --provider codex
aiwg package-plugin sdlc --clean
aiwg package-plugin team-tools --provider all --output dist/plugins
aiwg package-plugin team-tools --source wrappers/team-tools --provider codex
-
Report the result — confirm generated wrapper path and included file counts.
What the Package Contains
A generated plugin wrapper includes provider metadata plus the selected payload files:
| Contents | Path in Archive |
|---|
| Agent definitions | agents/ |
| Command definitions | commands/ |
| Skill definitions | skills/ |
| Rule definitions | rules/ |
| Delivery manifest | plugin.json |
| Changelog | CHANGELOG.md (if present) |
Files excluded from packages: .aiwg/working/, test fixtures, development-only configs.
Pre-Package Validation
Before creating the archive, the command automatically runs:
aiwg validate-metadata — all extension definitions must pass
- Version format check — must be valid CalVer
- Delivery manifest completeness —
id, name, description, version required
Packaging fails if any validation step fails.
Examples
Example 1: Package for release
User: "Package the voice plugin for release"
Extraction: Package voice plugin, no publish
Action:
aiwg package-plugin voice
Response: "Generated the voice marketplace wrapper under agentic/code/plugins/voice."
Example 2: Validate before packaging
User: "Check if the SDLC plugin is ready to package"
Extraction: Dry-run validation
Action:
aiwg package-plugin sdlc --dry-run
Response: "Dry run: sdlc plugin metadata passed (58 agents, 42 commands, 12 skills, 33 rules validated). Ready to package. 1 warning: CHANGELOG.md not found — package will be created without it."
Example 3: Package for Codex
User: "Build the marketing plugin for Codex"
Extraction: Package marketing for the Codex provider
Action:
aiwg package-plugin marketing --provider codex
Response: "Generated the Codex marketing wrapper under agentic/code/plugins/marketing."
Example 4: Clean rebuild
User: "Clean and rebuild the utils plugin"
Extraction: Remove prior generated output, then package
Action:
aiwg package-plugin utils --clean
Response: "Cleaned and regenerated the utils wrapper."
Standalone repository contract
The wrapper must contain manifest.json with type: plugin and a
pluginConfig declaring payloadType and traversal-safe payloadPath. The
payload requires its own matching manifest. Sources must remain inside the
current repository; symlink escapes and output collisions are rejected.
Payload files are copied byte-for-byte into deterministic Claude and/or Codex
archives.
See docs/customization/standalone-plugin-repository.md for the complete
scaffold, validation, install-smoke, versioning, licensing, and publication
workflow.
Unsupported legacy examples
--publish and --bump remain intentionally unsupported. Publish generated
archives through the repository's release workflow and change versions in the
authoritative wrapper/payload manifests before packaging.
References
- @$AIWG_ROOT/src/cli/handlers/subcommands.ts — Command handler
- @$AIWG_ROOT/docs/cli-reference.md — CLI reference
- @$AIWG_ROOT/docs/contributing/versioning.md — CalVer versioning rules