From 5e232503c45b0e98664d2626a5f667ed96f47586 Mon Sep 17 00:00:00 2001 From: Defame1297 Date: Wed, 12 Aug 2026 18:09:37 +0000 Subject: [PATCH 01/49] feat(kyberforge): execute plugin-to-apm marketplace conversion Why: ADR-0015 established that Microsoft APM (apm.yml + .apm/) should replace this repo's hand-authored plugin.json/marketplace.json model, with those files becoming compiled output of `apm pack` instead of files edited by hand via the (now-retired) plugin-author/marketplace-author skills. Issue #90 was the deferred execution of that decision, gated on #88 (apm tooling) and #89 (apm-native agent-author/skill-author routing). Implementation notes: - All six plugins (bin, core, git, gitea, kyberforge, lint) now carry apm.yml + .apm/{skills,agents,hooks} as their authoring source. Skills moved with a plain git mv (content-identical across targets). Agents were re-authored, not moved: per ADR-0016, .apm/agents/*.agent.md compiles verbatim to both Claude and Copilot, so plugin-scope agents now carry only name/description/model/source_keys -- no tools: field, no Claude-only knobs (isolation, maxTurns, effort, memory, permissionMode). - Root apm.yml registers all 7 marketplace packages (6 local plus mattpocock-skills as a remote entry) under versioning: per_package, matching this repo's existing independent-plugin-versioning practice. - .claude-plugin/marketplace.json and every plugin's plugin.json are now apm-pack-compiled output, verified against the prior hand-maintained content: same names/descriptions/versions/licenses/authors, only cosmetic serialization differences (JSON key order, owner email vs. url, Unicode escaping). - plugin-author and marketplace-author are retired now that apm-based authoring fully replaces their job; kyberforge bumped 1.3.1 -> 1.4.0 for that removal, and the root marketplace catalog bumped 0.3.1 -> 0.3.2 to match, per the version-bump convention now documented in apm-workflow's reference docs instead of a dedicated script (apm has no native version-bump automation). - Fixed hardcoded pre-.apm/ path assumptions across .pre-commit-config.yaml, .pre-commit-hooks.yaml, scripts/check-scope-walkup-sync.sh, scripts/sync-vale-styles.sh, scripts/check-vale-style-sync.sh, six plugins' root plugin.json (stale skills/hooks/agents pointer fields that check-manifests.sh validates), and several tests/*.bats and tests/*.sh fixtures -- including a bats REPO_ROOT relative-path depth bug (10 files, one extra .apm/ directory level to walk up) and a vale probe-path isolation regression introduced mid-fix. - Corrected empirically-wrong assumptions surfaced this session in apm-workflow/apm-install's own reference docs: `apm marketplace package add` does not accept local paths (only owner/repo remote shorthand -- local packages are registered by editing apm.yml's marketplace.packages[] directly); `apm compile` is a consumer-side AGENTS.md/CLAUDE.md generator, not the plugin.json producer, and hard-fails on skill/agent-only packages without --clean; `apm plugin init ` nests a stray subdirectory when run with a positional name arg from inside a same-named directory; no native Copilot marketplace output profile exists; .mcp.json is merged into the compiled plugin.json content-aware and target-scoped, with no dependencies.mcp entry needed for simple passthrough; pipx is the correct pip fallback on externally-managed Python environments. - Renamed agent-author's copilot.agent.md template asset to copilot.agent.md.template so apm compile's recursive *.agent.md glob stops misparsing the placeholder template as a real agent primitive. Impact: plugin.json and marketplace.json are compiled artifacts from here on -- editing them by hand is no longer the workflow; edit apm.yml/.apm/ and run apm pack. CONTEXT.md's Plugin/Plugin marketplace glossary entries reflect this. ADR-0001 is marked superseded, ADR-0006 moot, and ADR-0010 updated for the new .apm/agents/ path (project/user scope unaffected, per ADR-0016). Full local verification: claude plugin validate --strict on all 6 plugins, apm audit --ci, apm marketplace check, check-manifests.sh, and the full test suite (165/165 bats, 13/13 shell scripts) all pass clean. Fixes: #90 Refs: #88, #89 ADR: 0015 ADR: 0016 Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Ub96PyaSRD9BHPktotj1pC --- .claude-plugin/marketplace.json | 29 ++- .github/plugin/marketplace.json | 29 ++- .pre-commit-config.yaml | 10 +- .pre-commit-hooks.yaml | 4 +- AGENTS.md | 2 +- CONTEXT.md | 4 +- apm.yml | 71 +++++ docs/adr/0001-skills-in-agents-dir.md | 11 + docs/adr/0006-plugin-version-parity.md | 13 + ...nt-sources-relocated-outside-agents-dir.md | 15 ++ ...m-replaces-plugin-marketplace-authoring.md | 76 +++--- .../bin/{ => .apm}/skills/caveman/SKILL.md | 0 .../bin/{ => .apm}/skills/diagnose/SKILL.md | 0 .../diagnose/scripts/hitl-loop.template.sh | 0 .../bin/{ => .apm}/skills/grill-me/SKILL.md | 0 .../skills/grill-with-docs/ADR-FORMAT.md | 0 .../skills/grill-with-docs/CONTEXT-FORMAT.md | 0 .../skills/grill-with-docs/SKILL.md | 0 .../DEEPENING.md | 0 .../INTERFACE-DESIGN.md | 0 .../improve-codebase-architecture/LANGUAGE.md | 0 .../improve-codebase-architecture/SKILL.md | 0 .../bin/{ => .apm}/skills/prototype/LOGIC.md | 0 .../bin/{ => .apm}/skills/prototype/SKILL.md | 0 plugins/bin/{ => .apm}/skills/prototype/UI.md | 0 .../bin/{ => .apm}/skills/research/META.md | 0 .../bin/{ => .apm}/skills/research/SKILL.md | 0 .../skills/research/references/file-format.md | 0 .../skills/research/references/topics.md | 0 plugins/bin/{ => .apm}/skills/tdd/SKILL.md | 0 .../bin/{ => .apm}/skills/tdd/deep-modules.md | 0 .../{ => .apm}/skills/tdd/interface-design.md | 0 plugins/bin/{ => .apm}/skills/tdd/mocking.md | 0 .../bin/{ => .apm}/skills/tdd/refactoring.md | 0 plugins/bin/{ => .apm}/skills/tdd/tests.md | 0 .../{ => .apm}/skills/triage/AGENT-BRIEF.md | 0 .../{ => .apm}/skills/triage/OUT-OF-SCOPE.md | 0 plugins/bin/{ => .apm}/skills/triage/SKILL.md | 0 .../bin/{ => .apm}/skills/write-docs/SKILL.md | 0 .../bin/{ => .apm}/skills/zoom-out/SKILL.md | 0 plugins/bin/.claude-plugin/plugin.json | 13 +- plugins/bin/.github/plugin/plugin.json | 11 + plugins/bin/apm.yml | 26 ++ plugins/bin/plugin.json | 7 +- .../skills/agentsmd-audit/README.md | 0 .../{ => .apm}/skills/agentsmd-audit/SKILL.md | 0 .../agentsmd-audit/references/sources.md | 0 .../skills/agentsmd-audit/scripts/README.md | 0 .../agentsmd-audit/scripts/validate-drift.sh | 0 .../scripts/validate-secrets.sh | 0 .../scripts/validate-structure.sh | 0 .../skills/agentsmd-audit/tests/README.md | 2 +- .../agentsmd-audit/tests/validate-drift.bats | 2 +- .../tests/validate-secrets.bats | 2 +- .../tests/validate-structure.bats | 2 +- .../skills/agentsmd-author/README.md | 0 .../skills/agentsmd-author/SKILL.md | 0 .../references/content-guide.md | 0 .../agentsmd-author/references/sources.md | 0 .../skills/provider-adapter-author/README.md | 0 .../skills/provider-adapter-author/SKILL.md | 0 .../references/sources.md | 0 .../provider-adapter-author/scripts/README.md | 0 .../scripts/validate-adapter.sh | 0 .../provider-adapter-author/tests/README.md | 2 +- .../tests/validate-adapter.bats | 2 +- plugins/core/.claude-plugin/plugin.json | 2 +- plugins/core/.github/plugin/plugin.json | 18 ++ plugins/core/apm.yml | 32 +++ plugins/core/plugin.json | 8 +- .../agents/git-orchestrate.agent.md | 25 +- .../{ => .apm}/skills/git-branches/README.md | 0 .../{ => .apm}/skills/git-branches/SKILL.md | 0 .../skills/git-branches/references/sources.md | 0 .../{ => .apm}/skills/git-commits/README.md | 0 .../{ => .apm}/skills/git-commits/SKILL.md | 0 .../git-commits/references/commit-template.md | 0 .../references/conventional-commits-spec.md | 0 .../skills/git-commits/references/sources.md | 0 .../{ => .apm}/skills/git-history/README.md | 0 .../{ => .apm}/skills/git-history/SKILL.md | 0 .../skills/git-history/references/README.md | 0 .../git-history/references/git-log-format.md | 0 .../skills/git-history/references/sources.md | 0 .../{ => .apm}/skills/git-remotes/README.md | 0 .../{ => .apm}/skills/git-remotes/SKILL.md | 0 .../skills/git-remotes/references/README.md | 0 .../skills/git-remotes/references/remotes.md | 0 .../skills/git-remotes/references/sources.md | 0 .../skills/git-submodules/README.md | 0 .../{ => .apm}/skills/git-submodules/SKILL.md | 0 .../git-submodules/references/README.md | 0 .../git-submodules/references/sources.md | 0 .../git-submodules/references/submodules.md | 0 .../{ => .apm}/skills/git-workflow/README.md | 0 .../{ => .apm}/skills/git-workflow/SKILL.md | 0 .../skills/git-workflow/references/README.md | 0 .../skills/git-workflow/references/sources.md | 0 .../{ => .apm}/skills/git-worktrees/README.md | 0 .../{ => .apm}/skills/git-worktrees/SKILL.md | 0 .../skills/git-worktrees/references/README.md | 0 .../git-worktrees/references/sources.md | 0 .../git-worktrees/references/worktrees.md | 0 .../git/{ => .apm}/skills/pc-author/README.md | 0 .../git/{ => .apm}/skills/pc-author/SKILL.md | 0 .../skills/pc-author/references/README.md | 0 .../pc-author/references/hooks-by-language.md | 0 .../skills/pc-author/references/sources.md | 0 .../git/{ => .apm}/skills/pc-run/README.md | 0 plugins/git/{ => .apm}/skills/pc-run/SKILL.md | 0 .../skills/pc-run/references/README.md | 0 .../pc-run/references/failure-patterns.md | 0 .../skills/pc-run/references/sources.md | 0 plugins/git/.claude-plugin/plugin.json | 2 +- plugins/git/.github/plugin/plugin.json | 17 ++ plugins/git/agents/git-orchestrate.md | 93 ------- plugins/git/apm.yml | 28 ++ plugins/git/plugin.json | 9 +- plugins/git/sources.md | 12 +- .../agents/gitea-orchestrate.agent.md | 24 +- .../skills/gitea-branches/README.md | 0 .../{ => .apm}/skills/gitea-branches/SKILL.md | 0 .../gitea-branches/references/branches.md | 0 .../gitea-branches/references/commits.md | 0 .../gitea-branches/references/sources.md | 0 .../{ => .apm}/skills/gitea-files/README.md | 0 .../{ => .apm}/skills/gitea-files/SKILL.md | 0 .../skills/gitea-files/references/examples.md | 0 .../skills/gitea-files/references/sources.md | 0 .../{ => .apm}/skills/gitea-issues/README.md | 0 .../{ => .apm}/skills/gitea-issues/SKILL.md | 0 .../gitea-issues/references/enrichments.md | 0 .../skills/gitea-issues/references/issues.md | 0 .../skills/gitea-issues/references/search.md | 0 .../skills/gitea-issues/references/sources.md | 0 .../skills/gitea-labels-milestones/README.md | 0 .../skills/gitea-labels-milestones/SKILL.md | 0 .../references/label-inference.md | 0 .../references/labels.md | 0 .../references/milestones.md | 0 .../references/sources.md | 0 .../{ => .apm}/skills/gitea-prs/README.md | 0 .../{ => .apm}/skills/gitea-prs/SKILL.md | 0 .../skills/gitea-prs/references/merging.md | 0 .../gitea-prs/references/pull-requests.md | 0 .../skills/gitea-prs/references/reviews.md | 0 .../skills/gitea-prs/references/sources.md | 0 .../skills/gitea-releases/README.md | 0 .../{ => .apm}/skills/gitea-releases/SKILL.md | 0 .../references/call-signatures.md | 0 .../gitea-releases/references/conventions.md | 0 .../gitea-releases/references/sources.md | 0 .../skills/gitea-workflow/README.md | 0 .../{ => .apm}/skills/gitea-workflow/SKILL.md | 0 .../gitea-workflow/references/sources.md | 0 plugins/gitea/.claude-plugin/plugin.json | 2 +- plugins/gitea/.github/plugin/plugin.json | 19 ++ plugins/gitea/agents/gitea-orchestrate.md | 95 ------- plugins/gitea/apm.yml | 33 +++ plugins/gitea/plugin.json | 9 +- plugins/gitea/sources.md | 8 +- .../agents/apm-orchestrate.agent.md | 22 +- .../kyberforge/{ => .apm/hooks}/hooks.json | 0 .../{ => .apm}/skills/agent-audit/README.md | 0 .../{ => .apm}/skills/agent-audit/SKILL.md | 0 .../skills/agent-audit/assets/vale/.vale.ini | 0 .../styles/Kyberforge/DescriptionOpener.yml | 0 .../vale/styles/Kyberforge/PaddingPhrase.yml | 0 .../Kyberforge/SentenceOpenerThereIs.yml | 0 .../vale/styles/Kyberforge/VagueWording.yml | 0 .../KyberforgeCopilot/ProactivePhrase.yml | 0 .../skills/agent-audit/references/README.md | 0 .../references/description-quality.md | 0 .../agent-audit/references/field-inventory.md | 0 .../skills/agent-audit/references/sources.md | 0 .../skills/agent-audit/scripts/README.md | 0 .../skills/agent-audit/scripts/vale-wrap.sh | 0 .../scripts/validate-provenance.sh | 0 .../skills/agent-audit/scripts/validate.sh | 0 .../skills/agent-audit/tests/README.md | 0 .../tests/validate-provenance.bats | 2 +- .../skills/agent-audit/tests/validate.bats | 2 +- .../{ => .apm}/skills/agent-author/README.md | 2 +- .../{ => .apm}/skills/agent-author/SKILL.md | 0 .../skills/agent-author/assets/README.md | 2 +- .../assets/templates/apm-agent.md | 0 .../assets/templates/claude-code.md | 0 .../templates/copilot.agent.md.template} | 0 .../skills/agent-author/references/README.md | 0 .../references/deployment-modes.md | 0 .../skills/agent-author/references/scripts.md | 0 .../skills/agent-author/references/sources.md | 0 .../skills/agent-author/scripts/README.md | 0 .../skills/agent-author/scripts/new-agent.sh | 2 +- .../skills/agent-author/tests/README.md | 0 .../skills/agent-author/tests/new-agent.bats | 2 +- .../{ => .apm}/skills/apm-install/README.md | 0 .../{ => .apm}/skills/apm-install/SKILL.md | 2 + .../skills/apm-install/references/sources.md | 0 .../{ => .apm}/skills/apm-workflow/README.md | 0 .../{ => .apm}/skills/apm-workflow/SKILL.md | 6 +- .../skills/apm-workflow/references/audit.md | 0 .../skills/apm-workflow/references/compile.md | 65 +++++ .../apm-workflow/references/configure.md | 10 +- .../skills/apm-workflow/references/install.md | 0 .../apm-workflow/references/marketplace.md | 16 +- .../skills/apm-workflow/references/sources.md | 0 .../{ => .apm}/skills/forge/README.md | 8 +- .../{ => .apm}/skills/forge/SKILL.md | 14 +- .../skills/forge/references/sources.md | 0 .../{ => .apm}/skills/skill-audit/README.md | 0 .../{ => .apm}/skills/skill-audit/SKILL.md | 0 .../skills/skill-audit/assets/vale/.vale.ini | 0 .../styles/Kyberforge/DescriptionOpener.yml | 0 .../vale/styles/Kyberforge/PaddingPhrase.yml | 0 .../Kyberforge/SentenceOpenerThereIs.yml | 0 .../vale/styles/Kyberforge/VagueWording.yml | 0 .../skill-audit/references/body-discipline.md | 0 .../references/description-quality.md | 0 .../skills/skill-audit/references/sources.md | 0 .../skills/skill-audit/scripts/vale-wrap.sh | 0 .../scripts/validate-provenance.sh | 0 .../skills/skill-audit/scripts/validate.sh | 0 .../skills/skill-audit/tests/README.md | 0 .../tests/validate-provenance.bats | 2 +- .../skills/skill-audit/tests/validate.bats | 2 +- .../{ => .apm}/skills/skill-author/README.md | 0 .../{ => .apm}/skills/skill-author/SKILL.md | 0 .../skill-author/assets/templates/README.md | 0 .../skill-author/assets/templates/SKILL.md | 0 .../assets/templates/assets/README.md | 0 .../assets/templates/references/README.md | 0 .../assets/templates/references/sources.md | 0 .../assets/templates/scripts/README.md | 0 .../assets/templates/tests/README.md | 0 .../references/deployment-modes.md | 0 .../skills/skill-author/references/scripts.md | 0 .../skills/skill-author/references/sources.md | 0 .../skills/skill-author/scripts/new-skill.sh | 0 .../skills/skill-author/tests/README.md | 2 +- .../skills/skill-author/tests/new-skill.bats | 2 +- plugins/kyberforge/.claude-plugin/plugin.json | 5 +- plugins/kyberforge/.github/plugin/plugin.json | 11 + plugins/kyberforge/README.md | 2 - plugins/kyberforge/agents/.gitkeep | 0 plugins/kyberforge/agents/apm-orchestrate.md | 78 ------ plugins/kyberforge/apm.yml | 27 ++ plugins/kyberforge/hooks/README.md | 27 -- plugins/kyberforge/plugin.json | 11 +- plugins/kyberforge/skills/README.md | 33 --- .../skills/apm-workflow/references/compile.md | 48 ---- .../skills/marketplace-author/README.md | 35 --- .../skills/marketplace-author/SKILL.md | 246 ------------------ .../marketplace-author/references/README.md | 9 - .../references/manifest-fields.md | 177 ------------- .../marketplace-author/references/sources.md | 147 ----------- .../kyberforge/skills/plugin-author/README.md | 39 --- .../kyberforge/skills/plugin-author/SKILL.md | 191 -------------- .../skills/plugin-author/references/README.md | 9 - .../references/manifest-fields.md | 146 ----------- .../plugin-author/references/sources.md | 158 ----------- .../skills/plugin-author/scripts/README.md | 11 - .../plugin-author/scripts/new-plugin.sh | 148 ----------- plugins/kyberforge/sources.md | 2 +- .../{ => .apm}/agents/lint-runner.agent.md | 3 - .../.apm}/hooks/hooks.json | 0 .../{ => .apm}/skills/vale-config/README.md | 0 .../{ => .apm}/skills/vale-config/SKILL.md | 0 .../references/configuration-reference.md | 0 .../skills/vale-config/references/sources.md | 0 .../lint/{ => .apm}/skills/vale-run/README.md | 0 .../lint/{ => .apm}/skills/vale-run/SKILL.md | 0 .../skills/vale-run/references/sources.md | 0 .../vale-run/references/troubleshooting.md | 0 plugins/lint/.claude-plugin/plugin.json | 2 +- plugins/lint/.github/plugin/plugin.json | 17 ++ plugins/lint/agents/lint-runner.md | 41 --- plugins/lint/apm.yml | 30 +++ plugins/lint/hooks.json | 3 - plugins/lint/plugin.json | 9 +- plugins/lint/sources.md | 2 +- scripts/check-scope-walkup-sync.sh | 16 +- scripts/check-vale-style-sync.sh | 12 +- scripts/sync-vale-styles.sh | 4 +- tests/test-check-scope-walkup-sync.sh | 28 +- tests/test-check-vale-style-sync.sh | 42 +-- tests/test-skill-size-check.sh | 2 +- tests/test-vale-hooks-consumer.sh | 10 +- tests/test-vale-wrap.sh | 2 +- 289 files changed, 741 insertions(+), 1974 deletions(-) create mode 100644 apm.yml rename plugins/bin/{ => .apm}/skills/caveman/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/diagnose/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/diagnose/scripts/hitl-loop.template.sh (100%) rename plugins/bin/{ => .apm}/skills/grill-me/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/grill-with-docs/ADR-FORMAT.md (100%) rename plugins/bin/{ => .apm}/skills/grill-with-docs/CONTEXT-FORMAT.md (100%) rename plugins/bin/{ => .apm}/skills/grill-with-docs/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/improve-codebase-architecture/DEEPENING.md (100%) rename plugins/bin/{ => .apm}/skills/improve-codebase-architecture/INTERFACE-DESIGN.md (100%) rename plugins/bin/{ => .apm}/skills/improve-codebase-architecture/LANGUAGE.md (100%) rename plugins/bin/{ => .apm}/skills/improve-codebase-architecture/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/prototype/LOGIC.md (100%) rename plugins/bin/{ => .apm}/skills/prototype/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/prototype/UI.md (100%) rename plugins/bin/{ => .apm}/skills/research/META.md (100%) rename plugins/bin/{ => .apm}/skills/research/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/research/references/file-format.md (100%) rename plugins/bin/{ => .apm}/skills/research/references/topics.md (100%) rename plugins/bin/{ => .apm}/skills/tdd/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/tdd/deep-modules.md (100%) rename plugins/bin/{ => .apm}/skills/tdd/interface-design.md (100%) rename plugins/bin/{ => .apm}/skills/tdd/mocking.md (100%) rename plugins/bin/{ => .apm}/skills/tdd/refactoring.md (100%) rename plugins/bin/{ => .apm}/skills/tdd/tests.md (100%) rename plugins/bin/{ => .apm}/skills/triage/AGENT-BRIEF.md (100%) rename plugins/bin/{ => .apm}/skills/triage/OUT-OF-SCOPE.md (100%) rename plugins/bin/{ => .apm}/skills/triage/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/write-docs/SKILL.md (100%) rename plugins/bin/{ => .apm}/skills/zoom-out/SKILL.md (100%) create mode 100644 plugins/bin/.github/plugin/plugin.json create mode 100644 plugins/bin/apm.yml rename plugins/core/{ => .apm}/skills/agentsmd-audit/README.md (100%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/SKILL.md (100%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/references/sources.md (100%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/scripts/README.md (100%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/scripts/validate-drift.sh (100%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/scripts/validate-secrets.sh (100%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/scripts/validate-structure.sh (100%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/tests/README.md (94%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/tests/validate-drift.bats (96%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/tests/validate-secrets.bats (96%) rename plugins/core/{ => .apm}/skills/agentsmd-audit/tests/validate-structure.bats (96%) rename plugins/core/{ => .apm}/skills/agentsmd-author/README.md (100%) rename plugins/core/{ => .apm}/skills/agentsmd-author/SKILL.md (100%) rename plugins/core/{ => .apm}/skills/agentsmd-author/references/content-guide.md (100%) rename plugins/core/{ => .apm}/skills/agentsmd-author/references/sources.md (100%) rename plugins/core/{ => .apm}/skills/provider-adapter-author/README.md (100%) rename plugins/core/{ => .apm}/skills/provider-adapter-author/SKILL.md (100%) rename plugins/core/{ => .apm}/skills/provider-adapter-author/references/sources.md (100%) rename plugins/core/{ => .apm}/skills/provider-adapter-author/scripts/README.md (100%) rename plugins/core/{ => .apm}/skills/provider-adapter-author/scripts/validate-adapter.sh (100%) rename plugins/core/{ => .apm}/skills/provider-adapter-author/tests/README.md (91%) rename plugins/core/{ => .apm}/skills/provider-adapter-author/tests/validate-adapter.bats (98%) create mode 100644 plugins/core/.github/plugin/plugin.json create mode 100644 plugins/core/apm.yml rename plugins/git/{ => .apm}/agents/git-orchestrate.agent.md (86%) rename plugins/git/{ => .apm}/skills/git-branches/README.md (100%) rename plugins/git/{ => .apm}/skills/git-branches/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/git-branches/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/git-commits/README.md (100%) rename plugins/git/{ => .apm}/skills/git-commits/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/git-commits/references/commit-template.md (100%) rename plugins/git/{ => .apm}/skills/git-commits/references/conventional-commits-spec.md (100%) rename plugins/git/{ => .apm}/skills/git-commits/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/git-history/README.md (100%) rename plugins/git/{ => .apm}/skills/git-history/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/git-history/references/README.md (100%) rename plugins/git/{ => .apm}/skills/git-history/references/git-log-format.md (100%) rename plugins/git/{ => .apm}/skills/git-history/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/git-remotes/README.md (100%) rename plugins/git/{ => .apm}/skills/git-remotes/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/git-remotes/references/README.md (100%) rename plugins/git/{ => .apm}/skills/git-remotes/references/remotes.md (100%) rename plugins/git/{ => .apm}/skills/git-remotes/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/git-submodules/README.md (100%) rename plugins/git/{ => .apm}/skills/git-submodules/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/git-submodules/references/README.md (100%) rename plugins/git/{ => .apm}/skills/git-submodules/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/git-submodules/references/submodules.md (100%) rename plugins/git/{ => .apm}/skills/git-workflow/README.md (100%) rename plugins/git/{ => .apm}/skills/git-workflow/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/git-workflow/references/README.md (100%) rename plugins/git/{ => .apm}/skills/git-workflow/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/git-worktrees/README.md (100%) rename plugins/git/{ => .apm}/skills/git-worktrees/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/git-worktrees/references/README.md (100%) rename plugins/git/{ => .apm}/skills/git-worktrees/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/git-worktrees/references/worktrees.md (100%) rename plugins/git/{ => .apm}/skills/pc-author/README.md (100%) rename plugins/git/{ => .apm}/skills/pc-author/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/pc-author/references/README.md (100%) rename plugins/git/{ => .apm}/skills/pc-author/references/hooks-by-language.md (100%) rename plugins/git/{ => .apm}/skills/pc-author/references/sources.md (100%) rename plugins/git/{ => .apm}/skills/pc-run/README.md (100%) rename plugins/git/{ => .apm}/skills/pc-run/SKILL.md (100%) rename plugins/git/{ => .apm}/skills/pc-run/references/README.md (100%) rename plugins/git/{ => .apm}/skills/pc-run/references/failure-patterns.md (100%) rename plugins/git/{ => .apm}/skills/pc-run/references/sources.md (100%) create mode 100644 plugins/git/.github/plugin/plugin.json delete mode 100644 plugins/git/agents/git-orchestrate.md create mode 100644 plugins/git/apm.yml rename plugins/gitea/{ => .apm}/agents/gitea-orchestrate.agent.md (90%) rename plugins/gitea/{ => .apm}/skills/gitea-branches/README.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-branches/SKILL.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-branches/references/branches.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-branches/references/commits.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-branches/references/sources.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-files/README.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-files/SKILL.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-files/references/examples.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-files/references/sources.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-issues/README.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-issues/SKILL.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-issues/references/enrichments.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-issues/references/issues.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-issues/references/search.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-issues/references/sources.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-labels-milestones/README.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-labels-milestones/SKILL.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-labels-milestones/references/label-inference.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-labels-milestones/references/labels.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-labels-milestones/references/milestones.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-labels-milestones/references/sources.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-prs/README.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-prs/SKILL.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-prs/references/merging.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-prs/references/pull-requests.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-prs/references/reviews.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-prs/references/sources.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-releases/README.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-releases/SKILL.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-releases/references/call-signatures.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-releases/references/conventions.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-releases/references/sources.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-workflow/README.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-workflow/SKILL.md (100%) rename plugins/gitea/{ => .apm}/skills/gitea-workflow/references/sources.md (100%) create mode 100644 plugins/gitea/.github/plugin/plugin.json delete mode 100644 plugins/gitea/agents/gitea-orchestrate.md create mode 100644 plugins/gitea/apm.yml rename plugins/kyberforge/{ => .apm}/agents/apm-orchestrate.agent.md (91%) rename plugins/kyberforge/{ => .apm/hooks}/hooks.json (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/SKILL.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/assets/vale/.vale.ini (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/assets/vale/styles/Kyberforge/DescriptionOpener.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/assets/vale/styles/Kyberforge/PaddingPhrase.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/assets/vale/styles/Kyberforge/SentenceOpenerThereIs.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/assets/vale/styles/Kyberforge/VagueWording.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/assets/vale/styles/KyberforgeCopilot/ProactivePhrase.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/references/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/references/description-quality.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/references/field-inventory.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/scripts/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/scripts/vale-wrap.sh (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/scripts/validate-provenance.sh (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/scripts/validate.sh (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/tests/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/tests/validate-provenance.bats (99%) rename plugins/kyberforge/{ => .apm}/skills/agent-audit/tests/validate.bats (99%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/README.md (95%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/SKILL.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/assets/README.md (69%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/assets/templates/apm-agent.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/assets/templates/claude-code.md (100%) rename plugins/kyberforge/{skills/agent-author/assets/templates/copilot.agent.md => .apm/skills/agent-author/assets/templates/copilot.agent.md.template} (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/references/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/references/deployment-modes.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/references/scripts.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/scripts/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/scripts/new-agent.sh (99%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/tests/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/agent-author/tests/new-agent.bats (99%) rename plugins/kyberforge/{ => .apm}/skills/apm-install/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/apm-install/SKILL.md (86%) rename plugins/kyberforge/{ => .apm}/skills/apm-install/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/apm-workflow/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/apm-workflow/SKILL.md (79%) rename plugins/kyberforge/{ => .apm}/skills/apm-workflow/references/audit.md (100%) create mode 100644 plugins/kyberforge/.apm/skills/apm-workflow/references/compile.md rename plugins/kyberforge/{ => .apm}/skills/apm-workflow/references/configure.md (65%) rename plugins/kyberforge/{ => .apm}/skills/apm-workflow/references/install.md (100%) rename plugins/kyberforge/{ => .apm}/skills/apm-workflow/references/marketplace.md (72%) rename plugins/kyberforge/{ => .apm}/skills/apm-workflow/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/forge/README.md (81%) rename plugins/kyberforge/{ => .apm}/skills/forge/SKILL.md (82%) rename plugins/kyberforge/{ => .apm}/skills/forge/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/SKILL.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/assets/vale/.vale.ini (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/assets/vale/styles/Kyberforge/DescriptionOpener.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/assets/vale/styles/Kyberforge/PaddingPhrase.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/assets/vale/styles/Kyberforge/SentenceOpenerThereIs.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/assets/vale/styles/Kyberforge/VagueWording.yml (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/references/body-discipline.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/references/description-quality.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/scripts/vale-wrap.sh (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/scripts/validate-provenance.sh (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/scripts/validate.sh (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/tests/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/tests/validate-provenance.bats (99%) rename plugins/kyberforge/{ => .apm}/skills/skill-audit/tests/validate.bats (98%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/SKILL.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/assets/templates/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/assets/templates/SKILL.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/assets/templates/assets/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/assets/templates/references/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/assets/templates/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/assets/templates/scripts/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/assets/templates/tests/README.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/references/deployment-modes.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/references/scripts.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/references/sources.md (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/scripts/new-skill.sh (100%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/tests/README.md (92%) rename plugins/kyberforge/{ => .apm}/skills/skill-author/tests/new-skill.bats (98%) create mode 100644 plugins/kyberforge/.github/plugin/plugin.json delete mode 100644 plugins/kyberforge/agents/.gitkeep delete mode 100644 plugins/kyberforge/agents/apm-orchestrate.md create mode 100644 plugins/kyberforge/apm.yml delete mode 100644 plugins/kyberforge/hooks/README.md delete mode 100644 plugins/kyberforge/skills/README.md delete mode 100644 plugins/kyberforge/skills/apm-workflow/references/compile.md delete mode 100644 plugins/kyberforge/skills/marketplace-author/README.md delete mode 100644 plugins/kyberforge/skills/marketplace-author/SKILL.md delete mode 100644 plugins/kyberforge/skills/marketplace-author/references/README.md delete mode 100644 plugins/kyberforge/skills/marketplace-author/references/manifest-fields.md delete mode 100644 plugins/kyberforge/skills/marketplace-author/references/sources.md delete mode 100644 plugins/kyberforge/skills/plugin-author/README.md delete mode 100644 plugins/kyberforge/skills/plugin-author/SKILL.md delete mode 100644 plugins/kyberforge/skills/plugin-author/references/README.md delete mode 100644 plugins/kyberforge/skills/plugin-author/references/manifest-fields.md delete mode 100644 plugins/kyberforge/skills/plugin-author/references/sources.md delete mode 100644 plugins/kyberforge/skills/plugin-author/scripts/README.md delete mode 100755 plugins/kyberforge/skills/plugin-author/scripts/new-plugin.sh rename plugins/lint/{ => .apm}/agents/lint-runner.agent.md (98%) rename plugins/{kyberforge => lint/.apm}/hooks/hooks.json (100%) rename plugins/lint/{ => .apm}/skills/vale-config/README.md (100%) rename plugins/lint/{ => .apm}/skills/vale-config/SKILL.md (100%) rename plugins/lint/{ => .apm}/skills/vale-config/references/configuration-reference.md (100%) rename plugins/lint/{ => .apm}/skills/vale-config/references/sources.md (100%) rename plugins/lint/{ => .apm}/skills/vale-run/README.md (100%) rename plugins/lint/{ => .apm}/skills/vale-run/SKILL.md (100%) rename plugins/lint/{ => .apm}/skills/vale-run/references/sources.md (100%) rename plugins/lint/{ => .apm}/skills/vale-run/references/troubleshooting.md (100%) create mode 100644 plugins/lint/.github/plugin/plugin.json delete mode 100644 plugins/lint/agents/lint-runner.md create mode 100644 plugins/lint/apm.yml delete mode 100644 plugins/lint/hooks.json diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6ed72bf..816db4d 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -2,48 +2,57 @@ "description": "AI development skills for Claude Code and GitHub Copilot CLI \u2014 factory, design, implement, review, and cross-cutting workflows.", "name": "holocron", "owner": { - "email": "defame1297@rkdr.net", - "name": "Defame1297" + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" }, "plugins": [ { "description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", "name": "kyberforge", - "source": "./plugins/kyberforge" + "source": "./plugins/kyberforge", + "version": "1.4.0" }, { "description": "A place for things to be binned", "name": "bin", - "source": "./plugins/bin" + "source": "./plugins/bin", + "version": "1.1.1" }, { "description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.", "name": "git", - "source": "./plugins/git" + "source": "./plugins/git", + "version": "1.3.2" }, { "description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.", "name": "gitea", - "source": "./plugins/gitea" + "source": "./plugins/gitea", + "version": "1.3.3" }, { "description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.", "name": "core", - "source": "./plugins/core" + "source": "./plugins/core", + "version": "1.1.0" }, { "description": "Skills for Real Engineers \u2014 planning, TDD, architecture, and debugging workflows from Matt Pocock's .claude directory.", "name": "mattpocock-skills", "source": { + "ref": "v1.2.3", "repo": "mattpocock/skills", - "source": "github" + "sha": "835450ef244ab7335f75d95b83e7d979eae22a6d", + "source": "github", + "tag_pattern": "v{version}" } }, { "description": "Skills and agents for configuring and running linters.", "name": "lint", - "source": "./plugins/lint" + "source": "./plugins/lint", + "version": "1.1.5" } ], - "version": "0.3.1" + "version": "0.3.2" } diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index 6ed72bf..816db4d 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -2,48 +2,57 @@ "description": "AI development skills for Claude Code and GitHub Copilot CLI \u2014 factory, design, implement, review, and cross-cutting workflows.", "name": "holocron", "owner": { - "email": "defame1297@rkdr.net", - "name": "Defame1297" + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" }, "plugins": [ { "description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", "name": "kyberforge", - "source": "./plugins/kyberforge" + "source": "./plugins/kyberforge", + "version": "1.4.0" }, { "description": "A place for things to be binned", "name": "bin", - "source": "./plugins/bin" + "source": "./plugins/bin", + "version": "1.1.1" }, { "description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.", "name": "git", - "source": "./plugins/git" + "source": "./plugins/git", + "version": "1.3.2" }, { "description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.", "name": "gitea", - "source": "./plugins/gitea" + "source": "./plugins/gitea", + "version": "1.3.3" }, { "description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.", "name": "core", - "source": "./plugins/core" + "source": "./plugins/core", + "version": "1.1.0" }, { "description": "Skills for Real Engineers \u2014 planning, TDD, architecture, and debugging workflows from Matt Pocock's .claude directory.", "name": "mattpocock-skills", "source": { + "ref": "v1.2.3", "repo": "mattpocock/skills", - "source": "github" + "sha": "835450ef244ab7335f75d95b83e7d979eae22a6d", + "source": "github", + "tag_pattern": "v{version}" } }, { "description": "Skills and agents for configuring and running linters.", "name": "lint", - "source": "./plugins/lint" + "source": "./plugins/lint", + "version": "1.1.5" } ], - "version": "0.3.1" + "version": "0.3.2" } diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ab0d9b4..fb79928 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -131,25 +131,25 @@ repos: description: Enforce agentskills.io's 500-line/5,000-token SKILL.md size ceiling entry: scripts/skill-size-check.sh language: script - files: '^plugins/[^/]+/skills/[^/]+/SKILL\.md$' + files: '^plugins/[^/]+/\.apm/skills/[^/]+/SKILL\.md$' pass_filenames: true - id: vale-audit-prefilter-skill stages: ['pre-commit'] name: Vale audit prefilter (SKILL.md) description: Run Vale against SKILL.md files as a deterministic prefilter for skill-audit, via skill-audit's own bundled copy - entry: plugins/kyberforge/skills/skill-audit/scripts/vale-wrap.sh + entry: plugins/kyberforge/.apm/skills/skill-audit/scripts/vale-wrap.sh language: script - files: '^plugins/[^/]+/skills/[^/]+/SKILL\.md$' + files: '^plugins/[^/]+/\.apm/skills/[^/]+/SKILL\.md$' pass_filenames: true - id: vale-audit-prefilter-agent stages: ['pre-commit'] name: Vale audit prefilter (agent files) description: Run Vale against agent markdown files as a deterministic prefilter for agent-audit, via agent-audit's own bundled copy - entry: plugins/kyberforge/skills/agent-audit/scripts/vale-wrap.sh + entry: plugins/kyberforge/.apm/skills/agent-audit/scripts/vale-wrap.sh language: script - files: '^plugins/[^/]+/agents/[^/]+\.md$' + files: '^plugins/[^/]+/\.apm/agents/[^/]+\.agent\.md$' pass_filenames: true - repo: meta diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index eee3986..479995a 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml @@ -1,14 +1,14 @@ - id: kyberforge-vale-audit-skill name: Kyberforge Vale prose audit (SKILL.md) description: Deterministic prose-pattern prefilter for kyberforge's skill-audit, via its own bundled Vale config/styles - entry: plugins/kyberforge/skills/skill-audit/scripts/vale-wrap.sh + entry: plugins/kyberforge/.apm/skills/skill-audit/scripts/vale-wrap.sh language: script files: '(^|/)SKILL\.md$' - id: kyberforge-vale-audit-agent name: Kyberforge Vale prose audit (agent files) description: Deterministic prose-pattern prefilter for kyberforge's agent-audit, via its own bundled Vale config/styles - entry: plugins/kyberforge/skills/agent-audit/scripts/vale-wrap.sh + entry: plugins/kyberforge/.apm/skills/agent-audit/scripts/vale-wrap.sh language: script files: '(^|/)agents/[^/]+\.md$|\.agent\.md$' diff --git a/AGENTS.md b/AGENTS.md index d169ff3..1231f79 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,7 +22,7 @@ Fall back to raw shell only when no skill covers it. ## Setup and testing - Install git hooks via `git:pc-run`, wiring all three stages — this repo's `.pre-commit-config.yaml` has no `default_install_hook_types`, so a plain install silently skips `commit-msg` (Conventional Commits) and `pre-push` (tests, manifest check). -- Install the `vale` binary — required by the `vale-audit-prefilter-skill`/`-agent` pre-commit hooks, which run on every commit touching a `SKILL.md` or agent `.md` file. Without it the hooks fail with a bare "command not found" and no install pointer. `brew install vale` (macOS), `snap install vale` (Linux), `choco install vale` (Windows), or see https://vale.sh/docs/vale-cli/installation/. No `vale sync` needed — the `Kyberforge` styles are committed under `plugins/kyberforge/skills/{skill-audit,agent-audit}/assets/vale/styles/`, not downloaded packages (see ADR-0014). +- Install the `vale` binary — required by the `vale-audit-prefilter-skill`/`-agent` pre-commit hooks, which run on every commit touching a `SKILL.md` or agent `.md` file. Without it the hooks fail with a bare "command not found" and no install pointer. `brew install vale` (macOS), `snap install vale` (Linux), `choco install vale` (Windows), or see https://vale.sh/docs/vale-cli/installation/. No `vale sync` needed — the `Kyberforge` styles are committed under `plugins/kyberforge/.apm/skills/{skill-audit,agent-audit}/assets/vale/styles/`, not downloaded packages (see ADR-0014). - Run `bash tests/run-tests.sh` before considering any change done — it runs every `test-*.sh` script in the repo plus the bats suite (`--bats-only` for just bats). First run auto-initializes the bats submodules; no manual `git submodule update` needed. - Pushing re-runs the full suite plus `scripts/check-manifests.sh` via the pre-push hook — same commands, so run them locally first. - Author commits with `git:git-commits` — it validates Conventional Commits (enforced at `commit-msg`) for you. diff --git a/CONTEXT.md b/CONTEXT.md index ea48c76..b6c824c 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -27,10 +27,10 @@ A separate product (separate repo) for browsing, editing, and configuring AI dev Reusable slash commands for AI coding tools, defined as `SKILL.md` files following the [Agent Skills open standard](https://agentskills.io). Deployed via plugin — `plugins//skills//SKILL.md`, available after the plugin is installed (`claude plugin install @`). Skills are self-contained — they cannot reference files outside the plugin directory after install-time caching. ### Plugin -The deployable unit in the plugin marketplace. A plugin bundles one or more skills, agents, hooks, prompts, MCP servers, and optionally a `bin/` directory into a single installable directory. Each plugin has two manifests: `.claude-plugin/plugin.json` (Claude Code) and `plugin.json` at the plugin root (Copilot CLI). Plugins are copied to a cache on install — they cannot reference files outside their own directory. In this repo, plugins live under `plugins//`. Install a plugin with `claude plugin install @`. These manifests are hand-authored today but are slated to become APM-compiled output per ADR-0015, pending issue #90 (not yet changed). +The deployable unit in the plugin marketplace. A plugin bundles one or more skills, agents, hooks, prompts, MCP servers, and optionally a `bin/` directory into a single installable directory. In this repo, plugins live under `plugins//`, each with its own `apm.yml` + `.apm/{skills,agents,hooks,...}` — this is the authoring source of truth for the plugin's content (ADR-0015). `.claude-plugin/plugin.json` (Claude Code) and `.github/plugin/plugin.json` (Copilot CLI) are **compiled output** of `apm pack`/`apm compile`, generated from `apm.yml` + `.apm/` — they are not hand-edited. Plugins are copied to a cache on install — they cannot reference files outside their own directory. Install a plugin with `claude plugin install @`. ### Plugin marketplace -A Git repository with a `marketplace.json` manifest listing installable plugins. No backend, registry, or SaaS required — the Git repo is the marketplace. This repo is the `holocron` marketplace. The manifest lives at `.claude-plugin/marketplace.json` (read by both Claude Code and Copilot CLI) and is mirrored to `.github/plugin/marketplace.json`. This manifest is hand-authored today but is slated to become APM-compiled output per ADR-0015, pending issue #90 (not yet changed). +A Git repository with a `marketplace.json` manifest listing installable plugins. No backend, registry, or SaaS required — the Git repo is the marketplace. This repo is the `holocron` marketplace. The manifest at `.claude-plugin/marketplace.json` (read by both Claude Code and Copilot CLI, mirrored to `.github/plugin/marketplace.json`) is **compiled output** of `apm pack`, generated from the root `apm.yml`'s `marketplace:` block (owner, build/output config, versioning strategy, and the `packages:` list of installable plugins) — it is not hand-edited. See ADR-0015. ### HITL (human-in-the-loop) Agent pauses before a consequential action; human approves before execution. Required for irreversible or high-stakes actions (architecture changes, production deployments, security configuration). The agent drafts the change plan and waits — it does not proceed autonomously. Contrast with HOTL. diff --git a/apm.yml b/apm.yml new file mode 100644 index 0000000..6ec4286 --- /dev/null +++ b/apm.yml @@ -0,0 +1,71 @@ +name: holocron +version: 0.3.2 +description: AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows. +license: MIT +marketplace: + # apm's Claude marketplace mapper only emits description:/version: into the + # compiled marketplace.json when set explicitly here (an override) — the + # top-level apm.yml description:/version: above are NOT inherited into the + # compiled output despite being used elsewhere (e.g. by `apm audit`). + description: AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows. + version: 0.3.2 + owner: + name: Defame1297 + url: https://git.dev.rkdr.net/Defame1297/ + + # Default tag pattern used to resolve version ranges for each package. + build: + tagPattern: "v{version}" + + # Output targets (map form). 'claude' is enabled by default; + # uncomment 'codex' below to publish the Codex artifact too. + # Each output writes to its profile default path; add 'path:' + # under a key to override. + outputs: + claude: {} + # codex: {} + # + # Note: enabling codex requires every package below to declare + # 'category:' (e.g. category: Productivity). + + # CI tip: build one or all formats with a machine-readable manifest: + # apm pack --marketplace=claude,codex --json | jq -r '.marketplace.outputs[].path' + + versioning: + strategy: per_package + + packages: + - name: kyberforge + description: Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace. + source: ./plugins/kyberforge + version: 1.4.0 + + - name: bin + description: A place for things to be binned + source: ./plugins/bin + version: 1.1.1 + + - name: git + description: Skills for working with Git — conventional commits, branch management, pull requests, and feature flow. + source: ./plugins/git + version: 1.3.2 + + - name: gitea + description: Skills for managing Gitea repositories — issues, pull requests, milestones, releases, and wikis. + source: ./plugins/gitea + version: 1.3.3 + + - name: core + description: Cross-cutting utility skills for everyday AI-assisted coding — triage, diagnosis, architecture review, and session navigation. + source: ./plugins/core + version: 1.1.0 + + - name: mattpocock-skills + description: Skills for Real Engineers — planning, TDD, architecture, and debugging workflows from Matt Pocock's .claude directory. + source: mattpocock/skills + version: "^1.2.0" + + - name: lint + description: Skills and agents for configuring and running linters. + source: ./plugins/lint + version: 1.1.5 diff --git a/docs/adr/0001-skills-in-agents-dir.md b/docs/adr/0001-skills-in-agents-dir.md index 05ffd41..528d0f6 100644 --- a/docs/adr/0001-skills-in-agents-dir.md +++ b/docs/adr/0001-skills-in-agents-dir.md @@ -1,5 +1,16 @@ # Skills are distributed via plugins, not monolithic repo deployment +**Superseded by:** ADR-0015 (Microsoft APM replaces the hand-authored plugin/marketplace model +as this repo's authoring source of truth) and, for plugin-scope agent files specifically, +ADR-0016 (plugin-scope `.apm/agents/*.agent.md` drops provider-specific fields). Since issue +#90's conversion executed, plugin content is authored under `plugins//apm.yml` + +`.apm/{skills,agents,hooks}/` — not the flat `skills/`/`agents/` layout this ADR describes — +and `.claude-plugin/plugin.json`/`.github/plugin/plugin.json` are compiled output of `apm pack`, +not hand-authored. This ADR's content is kept below as the historical record of the +pre-APM decision; it is no longer the current model. + +--- + Skills (slash commands) are authored and distributed as part of **plugins** — each plugin contains its own `skills/` directory alongside agents and other artifacts. Plugins are installed via `claude plugin install @holocron` rather than deployed from the repo's local tree. This decision decouples skill authoring cadence from core provider deployments and allows independent versioning per plugin. ## Context diff --git a/docs/adr/0006-plugin-version-parity.md b/docs/adr/0006-plugin-version-parity.md index 769da91..e677929 100644 --- a/docs/adr/0006-plugin-version-parity.md +++ b/docs/adr/0006-plugin-version-parity.md @@ -1,5 +1,18 @@ # version field is present in both plugin manifests +**Moot as of ADR-0015.** This ADR addressed drift risk between two independently +*hand-maintained* manifests. Since issue #90's conversion executed, `.claude-plugin/plugin.json` +and `.github/plugin/plugin.json` are both **compiled output** of `apm pack`, generated in the +same pass from a single `apm.yml` per plugin — there is no longer a second hand-authored file +that could drift out of parity. The invariant this ADR required (`version` present and +identical in both manifests) still holds in the compiled output, but structurally, not because +a skill enforces it: both files are derived from the same `apm.yml` `version:` field, so +divergence is no longer possible by construction. `plugin-author`, the skill that enforced this +invariant, is deleted per ADR-0015 rather than adapted. Kept below as the historical record of +the pre-APM decision. + +--- + Each plugin has two manifests: `plugin.json` (Copilot CLI) and `.claude-plugin/plugin.json` (Claude Code). Both tools support a `version` field. Prior to this decision, only the CC manifest carried `version`; the Copilot manifest omitted it. We now require `version` in both manifests, always identical. A reader of `plugin.json` alone should be able to determine the plugin version without consulting the CC manifest. The `plugin-author` skill enforces this invariant on every create, update, and release operation. diff --git a/docs/adr/0010-agent-sources-relocated-outside-agents-dir.md b/docs/adr/0010-agent-sources-relocated-outside-agents-dir.md index 3860472..edbde4d 100644 --- a/docs/adr/0010-agent-sources-relocated-outside-agents-dir.md +++ b/docs/adr/0010-agent-sources-relocated-outside-agents-dir.md @@ -5,6 +5,21 @@ claim that "both files share a single `agents/sources.md` for provenance." The r ADR-0005 (dual-provider generation, scope detection, single-root script interface) is unaffected and remains in force. +**Path update per ADR-0016:** at plugin scope, agent files no longer live at +`/agents/.md`. The authoring source is now +`/.apm/agents/.agent.md` — a single vendor-neutral file (no dual Claude/ +Copilot pair) compiled to both targets via `apm pack`. See ADR-0016 for why (the field-dropping +rationale, `tools:` incompatibility, the compiled-output mechanics) — not restated here. This +ADR's own conclusion is unaffected by that move: the provenance file still belongs at +`/sources.md`, outside any directory `claude plugin validate --strict` +auto-scans, and `.apm/agents/` is, if anything, further removed from plugin-root than the old +flat `agents/` directory was, so the reasoning below still holds. References below to +`/agents/` describe the pre-APM layout in effect when this decision was made. +**Scope boundary (per ADR-0016):** this path change is plugin scope only. Project scope +(`.claude/agents/` + `.github/agents/`) and user scope (`~/.claude/agents/` + +`~/.copilot/agents/`) are unaffected — they are not APM packages and keep the dual-file +Claude+Copilot pair model this ADR originally described. + `claude plugin validate --strict` auto-discovers every `.md` file directly under a plugin's `agents/` directory and treats it as an agent definition requiring YAML frontmatter (`name`, `description`, etc.). A flat provenance file at `agents/sources.md` — no frontmatter, by diff --git a/docs/adr/0015-apm-replaces-plugin-marketplace-authoring.md b/docs/adr/0015-apm-replaces-plugin-marketplace-authoring.md index e64e07d..ac3a42b 100644 --- a/docs/adr/0015-apm-replaces-plugin-marketplace-authoring.md +++ b/docs/adr/0015-apm-replaces-plugin-marketplace-authoring.md @@ -1,7 +1,9 @@ # Microsoft APM replaces the hand-authored plugin/marketplace model as this repo's authoring source of truth -**Will supersede:** ADR-0001 ("Skills are distributed via plugins... each plugin contains its -own `skills/` directory") — once issue #90's conversion actually executes; not yet in effect. +**Status: executed (2026-08-12, issue #90).** All six plugins now carry `apm.yml` + `.apm/` as +their authoring source; `.claude-plugin/marketplace.json` and every plugin's `plugin.json` are +`apm pack`-compiled output. **Supersedes ADR-0001** ("Skills are distributed via plugins... each +plugin contains its own `skills/` directory") — in effect. This repo replaces its hand-maintained Claude Code plugin/marketplace authoring model (`.claude-plugin/marketplace.json` + per-plugin `plugin.json`) with Microsoft APM (`apm.yml` + @@ -31,10 +33,9 @@ new hand-maintained manifest format. and per-provider `plugin.json` files become **compiled output** via `apm compile`/`apm pack`, generated from `apm.yml` + `.apm/` per plugin, extensible to other `apm runtime`-supported providers without hand-maintaining a separate manifest per provider. -- **This will supersede ADR-0001** ("Skills are distributed via plugins... each plugin - contains its own `skills/` directory"), but not yet — supersession is pending on issue #90's - conversion. Once that real conversion executes, skills and agents physically move to - `plugins//.apm/skills/` and `plugins//.apm/agents/*.agent.md`. +- **This supersedes ADR-0001** ("Skills are distributed via plugins... each plugin + contains its own `skills/` directory"). Executed in issue #90: skills and agents physically moved + to `plugins//.apm/skills/` and `plugins//.apm/agents/*.agent.md`. - New operational tooling — `apm-install` (skill), `apm-workflow` (skill), `apm-orchestrate` (agent) — lands in `kyberforge`, tracked in issue #88 (https://git.dev.rkdr.net/Defame1297/holocron/issues/88). @@ -49,13 +50,11 @@ new hand-maintained manifest format. routing: `apm compile`/`apm pack` will generate `.claude-plugin/marketplace.json` and per-provider `plugin.json` directly from `apm.yml` + `.apm/`, so `apm-install`/`apm-workflow`/ `apm-orchestrate` (issue #88, already landed on this branch) fully replace what these two skills - did. Deleting `plugin-author`/`marketplace-author` is part of issue #90's execution, not #89's. -- Actually translating the existing plugins into `apm.yml` + `.apm/` and running the real - conversion is deferred to issue #90 - (https://git.dev.rkdr.net/Defame1297/holocron/issues/90). -- `CONTEXT.md`'s "Plugin"/"Plugin marketplace" glossary entries get a forward-pointer to this - ADR so a session-start read surfaces the pending change; their substantive definitions remain - accurate until issue #90's conversion actually executes — this ADR does not rewrite them. + did. `plugin-author`/`marketplace-author` were deleted in issue #90's execution. +- Translating the existing plugins into `apm.yml` + `.apm/` and running the real conversion was + executed in issue #90 (https://git.dev.rkdr.net/Defame1297/holocron/issues/90, closed). +- `CONTEXT.md`'s "Plugin"/"Plugin marketplace" glossary entries were rewritten in issue #90 to + describe the compiled-output model directly, rather than carrying a forward-pointer to this ADR. ## Considered options @@ -89,27 +88,36 @@ correction) sorted what they document into three buckets: because of hand-authored dual manifests (ADR-0006's version-parity/patch-bump rule, the CC-vs-Copilot field-placement split, dual-file mirroring) are obsolete under `apm.yml`'s single-manifest model and were deliberately dropped. -- **Holocron policy choice — flagged for #90, not resolved here.** `marketplace-author`'s - catalog-version convention (minor bump for package add/remove, patch bump for field-only - updates) isn't an APM mechanic — `apm` doesn't enforce it — but it's still a meaningful holocron - policy worth re-applying to `apm.yml`'s `marketplace.packages[].version` field once #90 wires up - real marketplace authoring. Where/how that gets implemented is #90's decision, not this ADR's. +- **Holocron policy choice — resolved in #90.** `marketplace-author`'s catalog-version convention + (minor bump for package add/remove, patch bump for field-only updates) isn't an APM mechanic — + `apm` doesn't enforce it, and has no native version-bump automation at all — so rather than + building a new script, the convention is now documented as guidance inside `apm-workflow`'s + reference docs (`references/marketplace.md` for the root catalog version rule, + `references/configure.md` for the per-package version-bump-on-content-edit rule), applied + manually by whoever edits `apm.yml`. ## Consequences -- ADR-0001 is superseded once issue #90 executes. -- ADR-0006 (plugin-version-parity) becomes moot once #90 lands: `plugin.json`/`marketplace.json` - become compiled output of a single `apm.yml`, so there's no second hand-authored file left to - keep in parity, and `plugin-author` — the skill that enforced ADR-0006 — is deleted rather than - adapted (see "Content migration" above). Not resolved by this ADR. -- ADR-0010 (agent sources relocated outside agents dir) needs revisiting once agents move to - `plugins//.apm/agents/` — the directory path changes, not the pre-existing `.agent.md` - extension convention (ADR-0005/ADR-0010, unaffected) — not resolved by this ADR. -- ADR-0014 (Vale prefilter ships from the plugin) has hardcoded path regexes assuming - `plugins//skills/...`/`plugins//agents/...`; these will need updating once paths - move under `.apm/` — not resolved by this ADR. -- `kyberforge` gains three new artifacts (issue #88) before any conversion of existing content - happens. -- Two follow-up issues track the remaining work: #89 (`skill-author`/`agent-author` routing - adaptation) and #90 (the actual repo conversion, which also deletes `plugin-author`/ - `marketplace-author`). +- ADR-0001 is superseded (issue #90). +- ADR-0006 (plugin-version-parity) is moot (issue #90): `plugin.json`/`marketplace.json` are now + compiled output of a single `apm.yml`, so there's no second hand-authored file left to keep in + parity, and `plugin-author` — the skill that enforced ADR-0006 — was deleted rather than adapted + (see "Content migration" above). +- ADR-0010 (agent sources relocated outside agents dir) was updated (issue #90) for agents now + living at `plugins//.apm/agents/*.agent.md` — the directory path changed; the pre-existing + `.agent.md` extension convention (ADR-0005/ADR-0010) and project/user scope are unaffected, per + ADR-0016. +- ADR-0014 (Vale prefilter ships from the plugin) had its hardcoded path regexes + (`plugins//skills/...`/`plugins//agents/...`) updated for the `.apm/` nesting as part + of issue #90's execution. +- `kyberforge` gained three new artifacts (issue #88) before any conversion of existing content + happened, then lost two (`plugin-author`/`marketplace-author`, deleted once issue #90 verified + parity) — net version bump 1.3.1 → 1.4.0. The root marketplace catalog bumped 0.3.1 → 0.3.2 to + match. +- ADR-0016 (a narrower decision discovered while designing issue #89) turned out to gate how + issue #90 had to re-author plugin-scope agents: `.apm/agents/*.agent.md` compiles verbatim to + both Claude and Copilot, so those files carry only `name`/`description`/`model`/`source_keys` — + existing dual-file `.md`+`.agent.md` pairs could not be raw-moved, only re-authored. +- Two follow-up issues tracked the remaining work, both done: #89 (`skill-author`/`agent-author` + routing adaptation, merged in #93) and #90 (the actual repo conversion, which also deleted + `plugin-author`/`marketplace-author`). diff --git a/plugins/bin/skills/caveman/SKILL.md b/plugins/bin/.apm/skills/caveman/SKILL.md similarity index 100% rename from plugins/bin/skills/caveman/SKILL.md rename to plugins/bin/.apm/skills/caveman/SKILL.md diff --git a/plugins/bin/skills/diagnose/SKILL.md b/plugins/bin/.apm/skills/diagnose/SKILL.md similarity index 100% rename from plugins/bin/skills/diagnose/SKILL.md rename to plugins/bin/.apm/skills/diagnose/SKILL.md diff --git a/plugins/bin/skills/diagnose/scripts/hitl-loop.template.sh b/plugins/bin/.apm/skills/diagnose/scripts/hitl-loop.template.sh similarity index 100% rename from plugins/bin/skills/diagnose/scripts/hitl-loop.template.sh rename to plugins/bin/.apm/skills/diagnose/scripts/hitl-loop.template.sh diff --git a/plugins/bin/skills/grill-me/SKILL.md b/plugins/bin/.apm/skills/grill-me/SKILL.md similarity index 100% rename from plugins/bin/skills/grill-me/SKILL.md rename to plugins/bin/.apm/skills/grill-me/SKILL.md diff --git a/plugins/bin/skills/grill-with-docs/ADR-FORMAT.md b/plugins/bin/.apm/skills/grill-with-docs/ADR-FORMAT.md similarity index 100% rename from plugins/bin/skills/grill-with-docs/ADR-FORMAT.md rename to plugins/bin/.apm/skills/grill-with-docs/ADR-FORMAT.md diff --git a/plugins/bin/skills/grill-with-docs/CONTEXT-FORMAT.md b/plugins/bin/.apm/skills/grill-with-docs/CONTEXT-FORMAT.md similarity index 100% rename from plugins/bin/skills/grill-with-docs/CONTEXT-FORMAT.md rename to plugins/bin/.apm/skills/grill-with-docs/CONTEXT-FORMAT.md diff --git a/plugins/bin/skills/grill-with-docs/SKILL.md b/plugins/bin/.apm/skills/grill-with-docs/SKILL.md similarity index 100% rename from plugins/bin/skills/grill-with-docs/SKILL.md rename to plugins/bin/.apm/skills/grill-with-docs/SKILL.md diff --git a/plugins/bin/skills/improve-codebase-architecture/DEEPENING.md b/plugins/bin/.apm/skills/improve-codebase-architecture/DEEPENING.md similarity index 100% rename from plugins/bin/skills/improve-codebase-architecture/DEEPENING.md rename to plugins/bin/.apm/skills/improve-codebase-architecture/DEEPENING.md diff --git a/plugins/bin/skills/improve-codebase-architecture/INTERFACE-DESIGN.md b/plugins/bin/.apm/skills/improve-codebase-architecture/INTERFACE-DESIGN.md similarity index 100% rename from plugins/bin/skills/improve-codebase-architecture/INTERFACE-DESIGN.md rename to plugins/bin/.apm/skills/improve-codebase-architecture/INTERFACE-DESIGN.md diff --git a/plugins/bin/skills/improve-codebase-architecture/LANGUAGE.md b/plugins/bin/.apm/skills/improve-codebase-architecture/LANGUAGE.md similarity index 100% rename from plugins/bin/skills/improve-codebase-architecture/LANGUAGE.md rename to plugins/bin/.apm/skills/improve-codebase-architecture/LANGUAGE.md diff --git a/plugins/bin/skills/improve-codebase-architecture/SKILL.md b/plugins/bin/.apm/skills/improve-codebase-architecture/SKILL.md similarity index 100% rename from plugins/bin/skills/improve-codebase-architecture/SKILL.md rename to plugins/bin/.apm/skills/improve-codebase-architecture/SKILL.md diff --git a/plugins/bin/skills/prototype/LOGIC.md b/plugins/bin/.apm/skills/prototype/LOGIC.md similarity index 100% rename from plugins/bin/skills/prototype/LOGIC.md rename to plugins/bin/.apm/skills/prototype/LOGIC.md diff --git a/plugins/bin/skills/prototype/SKILL.md b/plugins/bin/.apm/skills/prototype/SKILL.md similarity index 100% rename from plugins/bin/skills/prototype/SKILL.md rename to plugins/bin/.apm/skills/prototype/SKILL.md diff --git a/plugins/bin/skills/prototype/UI.md b/plugins/bin/.apm/skills/prototype/UI.md similarity index 100% rename from plugins/bin/skills/prototype/UI.md rename to plugins/bin/.apm/skills/prototype/UI.md diff --git a/plugins/bin/skills/research/META.md b/plugins/bin/.apm/skills/research/META.md similarity index 100% rename from plugins/bin/skills/research/META.md rename to plugins/bin/.apm/skills/research/META.md diff --git a/plugins/bin/skills/research/SKILL.md b/plugins/bin/.apm/skills/research/SKILL.md similarity index 100% rename from plugins/bin/skills/research/SKILL.md rename to plugins/bin/.apm/skills/research/SKILL.md diff --git a/plugins/bin/skills/research/references/file-format.md b/plugins/bin/.apm/skills/research/references/file-format.md similarity index 100% rename from plugins/bin/skills/research/references/file-format.md rename to plugins/bin/.apm/skills/research/references/file-format.md diff --git a/plugins/bin/skills/research/references/topics.md b/plugins/bin/.apm/skills/research/references/topics.md similarity index 100% rename from plugins/bin/skills/research/references/topics.md rename to plugins/bin/.apm/skills/research/references/topics.md diff --git a/plugins/bin/skills/tdd/SKILL.md b/plugins/bin/.apm/skills/tdd/SKILL.md similarity index 100% rename from plugins/bin/skills/tdd/SKILL.md rename to plugins/bin/.apm/skills/tdd/SKILL.md diff --git a/plugins/bin/skills/tdd/deep-modules.md b/plugins/bin/.apm/skills/tdd/deep-modules.md similarity index 100% rename from plugins/bin/skills/tdd/deep-modules.md rename to plugins/bin/.apm/skills/tdd/deep-modules.md diff --git a/plugins/bin/skills/tdd/interface-design.md b/plugins/bin/.apm/skills/tdd/interface-design.md similarity index 100% rename from plugins/bin/skills/tdd/interface-design.md rename to plugins/bin/.apm/skills/tdd/interface-design.md diff --git a/plugins/bin/skills/tdd/mocking.md b/plugins/bin/.apm/skills/tdd/mocking.md similarity index 100% rename from plugins/bin/skills/tdd/mocking.md rename to plugins/bin/.apm/skills/tdd/mocking.md diff --git a/plugins/bin/skills/tdd/refactoring.md b/plugins/bin/.apm/skills/tdd/refactoring.md similarity index 100% rename from plugins/bin/skills/tdd/refactoring.md rename to plugins/bin/.apm/skills/tdd/refactoring.md diff --git a/plugins/bin/skills/tdd/tests.md b/plugins/bin/.apm/skills/tdd/tests.md similarity index 100% rename from plugins/bin/skills/tdd/tests.md rename to plugins/bin/.apm/skills/tdd/tests.md diff --git a/plugins/bin/skills/triage/AGENT-BRIEF.md b/plugins/bin/.apm/skills/triage/AGENT-BRIEF.md similarity index 100% rename from plugins/bin/skills/triage/AGENT-BRIEF.md rename to plugins/bin/.apm/skills/triage/AGENT-BRIEF.md diff --git a/plugins/bin/skills/triage/OUT-OF-SCOPE.md b/plugins/bin/.apm/skills/triage/OUT-OF-SCOPE.md similarity index 100% rename from plugins/bin/skills/triage/OUT-OF-SCOPE.md rename to plugins/bin/.apm/skills/triage/OUT-OF-SCOPE.md diff --git a/plugins/bin/skills/triage/SKILL.md b/plugins/bin/.apm/skills/triage/SKILL.md similarity index 100% rename from plugins/bin/skills/triage/SKILL.md rename to plugins/bin/.apm/skills/triage/SKILL.md diff --git a/plugins/bin/skills/write-docs/SKILL.md b/plugins/bin/.apm/skills/write-docs/SKILL.md similarity index 100% rename from plugins/bin/skills/write-docs/SKILL.md rename to plugins/bin/.apm/skills/write-docs/SKILL.md diff --git a/plugins/bin/skills/zoom-out/SKILL.md b/plugins/bin/.apm/skills/zoom-out/SKILL.md similarity index 100% rename from plugins/bin/skills/zoom-out/SKILL.md rename to plugins/bin/.apm/skills/zoom-out/SKILL.md diff --git a/plugins/bin/.claude-plugin/plugin.json b/plugins/bin/.claude-plugin/plugin.json index e2808ac..de968f4 100644 --- a/plugins/bin/.claude-plugin/plugin.json +++ b/plugins/bin/.claude-plugin/plugin.json @@ -1,12 +1,21 @@ { "author": { + "email": "defame1297@rkdr.net", "name": "Defame1297", "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "A place for things to be binned", - "displayName": "bin", - "keywords": [], "license": "MIT", + "mcpServers": { + "obsidian": { + "args": [ + "@bitbonsai/mcpvault@latest", + "docs/" + ], + "command": "npx", + "type": "stdio" + } + }, "name": "bin", "version": "1.1.1" } diff --git a/plugins/bin/.github/plugin/plugin.json b/plugins/bin/.github/plugin/plugin.json new file mode 100644 index 0000000..68f36e6 --- /dev/null +++ b/plugins/bin/.github/plugin/plugin.json @@ -0,0 +1,11 @@ +{ + "author": { + "email": "defame1297@rkdr.net", + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" + }, + "description": "A place for things to be binned", + "license": "MIT", + "name": "bin", + "version": "1.1.1" +} diff --git a/plugins/bin/apm.yml b/plugins/bin/apm.yml new file mode 100644 index 0000000..c3f28c7 --- /dev/null +++ b/plugins/bin/apm.yml @@ -0,0 +1,26 @@ +name: bin +version: 1.1.1 +description: A place for things to be binned +author: + name: Defame1297 + email: defame1297@rkdr.net + url: https://git.dev.rkdr.net/Defame1297/ +license: MIT +keywords: [] + +# Constrains what .apm/ may contain: instructions, skill, hybrid, or prompts +type: skill + +# Which agent platforms to deploy to. +# Resolution order: --target flag > this field > auto-detect from filesystem. +# Accepted values: agent-skills, antigravity, claude, codex, copilot, cursor, gemini, grok-build, kiro, opencode, windsurf +targets: +- claude +- copilot +dependencies: + apm: [] + mcp: [] +includes: auto +devDependencies: + apm: [] +scripts: {} diff --git a/plugins/bin/plugin.json b/plugins/bin/plugin.json index e02f8dd..858b14a 100644 --- a/plugins/bin/plugin.json +++ b/plugins/bin/plugin.json @@ -1,15 +1,12 @@ { "author": { "email": "defame1297@rkdr.net", - "name": "Defame1297" + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "A place for things to be binned", "keywords": [], "license": "MIT", - "mcpServers": ".mcp.json", "name": "bin", - "skills": [ - "skills/" - ], "version": "1.1.1" } diff --git a/plugins/core/skills/agentsmd-audit/README.md b/plugins/core/.apm/skills/agentsmd-audit/README.md similarity index 100% rename from plugins/core/skills/agentsmd-audit/README.md rename to plugins/core/.apm/skills/agentsmd-audit/README.md diff --git a/plugins/core/skills/agentsmd-audit/SKILL.md b/plugins/core/.apm/skills/agentsmd-audit/SKILL.md similarity index 100% rename from plugins/core/skills/agentsmd-audit/SKILL.md rename to plugins/core/.apm/skills/agentsmd-audit/SKILL.md diff --git a/plugins/core/skills/agentsmd-audit/references/sources.md b/plugins/core/.apm/skills/agentsmd-audit/references/sources.md similarity index 100% rename from plugins/core/skills/agentsmd-audit/references/sources.md rename to plugins/core/.apm/skills/agentsmd-audit/references/sources.md diff --git a/plugins/core/skills/agentsmd-audit/scripts/README.md b/plugins/core/.apm/skills/agentsmd-audit/scripts/README.md similarity index 100% rename from plugins/core/skills/agentsmd-audit/scripts/README.md rename to plugins/core/.apm/skills/agentsmd-audit/scripts/README.md diff --git a/plugins/core/skills/agentsmd-audit/scripts/validate-drift.sh b/plugins/core/.apm/skills/agentsmd-audit/scripts/validate-drift.sh similarity index 100% rename from plugins/core/skills/agentsmd-audit/scripts/validate-drift.sh rename to plugins/core/.apm/skills/agentsmd-audit/scripts/validate-drift.sh diff --git a/plugins/core/skills/agentsmd-audit/scripts/validate-secrets.sh b/plugins/core/.apm/skills/agentsmd-audit/scripts/validate-secrets.sh similarity index 100% rename from plugins/core/skills/agentsmd-audit/scripts/validate-secrets.sh rename to plugins/core/.apm/skills/agentsmd-audit/scripts/validate-secrets.sh diff --git a/plugins/core/skills/agentsmd-audit/scripts/validate-structure.sh b/plugins/core/.apm/skills/agentsmd-audit/scripts/validate-structure.sh similarity index 100% rename from plugins/core/skills/agentsmd-audit/scripts/validate-structure.sh rename to plugins/core/.apm/skills/agentsmd-audit/scripts/validate-structure.sh diff --git a/plugins/core/skills/agentsmd-audit/tests/README.md b/plugins/core/.apm/skills/agentsmd-audit/tests/README.md similarity index 94% rename from plugins/core/skills/agentsmd-audit/tests/README.md rename to plugins/core/.apm/skills/agentsmd-audit/tests/README.md index ddbfcfd..10146bc 100644 --- a/plugins/core/skills/agentsmd-audit/tests/README.md +++ b/plugins/core/.apm/skills/agentsmd-audit/tests/README.md @@ -18,7 +18,7 @@ git clone https://github.com/bats-core/bats-assert tests/test_helper/bats-assert Run all tests for this skill (from the repo root): ```bash -bats plugins/core/skills/agentsmd-audit/tests/ +bats plugins/core/.apm/skills/agentsmd-audit/tests/ ``` ## Files diff --git a/plugins/core/skills/agentsmd-audit/tests/validate-drift.bats b/plugins/core/.apm/skills/agentsmd-audit/tests/validate-drift.bats similarity index 96% rename from plugins/core/skills/agentsmd-audit/tests/validate-drift.bats rename to plugins/core/.apm/skills/agentsmd-audit/tests/validate-drift.bats index f76f040..7402a04 100644 --- a/plugins/core/skills/agentsmd-audit/tests/validate-drift.bats +++ b/plugins/core/.apm/skills/agentsmd-audit/tests/validate-drift.bats @@ -1,7 +1,7 @@ #!/usr/bin/env bats setup() { - REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" + REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" diff --git a/plugins/core/skills/agentsmd-audit/tests/validate-secrets.bats b/plugins/core/.apm/skills/agentsmd-audit/tests/validate-secrets.bats similarity index 96% rename from plugins/core/skills/agentsmd-audit/tests/validate-secrets.bats rename to plugins/core/.apm/skills/agentsmd-audit/tests/validate-secrets.bats index 0fcbccb..8ff01a6 100644 --- a/plugins/core/skills/agentsmd-audit/tests/validate-secrets.bats +++ b/plugins/core/.apm/skills/agentsmd-audit/tests/validate-secrets.bats @@ -1,7 +1,7 @@ #!/usr/bin/env bats setup() { - REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" + REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" diff --git a/plugins/core/skills/agentsmd-audit/tests/validate-structure.bats b/plugins/core/.apm/skills/agentsmd-audit/tests/validate-structure.bats similarity index 96% rename from plugins/core/skills/agentsmd-audit/tests/validate-structure.bats rename to plugins/core/.apm/skills/agentsmd-audit/tests/validate-structure.bats index aacb39a..35c44cd 100644 --- a/plugins/core/skills/agentsmd-audit/tests/validate-structure.bats +++ b/plugins/core/.apm/skills/agentsmd-audit/tests/validate-structure.bats @@ -1,7 +1,7 @@ #!/usr/bin/env bats setup() { - REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" + REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" diff --git a/plugins/core/skills/agentsmd-author/README.md b/plugins/core/.apm/skills/agentsmd-author/README.md similarity index 100% rename from plugins/core/skills/agentsmd-author/README.md rename to plugins/core/.apm/skills/agentsmd-author/README.md diff --git a/plugins/core/skills/agentsmd-author/SKILL.md b/plugins/core/.apm/skills/agentsmd-author/SKILL.md similarity index 100% rename from plugins/core/skills/agentsmd-author/SKILL.md rename to plugins/core/.apm/skills/agentsmd-author/SKILL.md diff --git a/plugins/core/skills/agentsmd-author/references/content-guide.md b/plugins/core/.apm/skills/agentsmd-author/references/content-guide.md similarity index 100% rename from plugins/core/skills/agentsmd-author/references/content-guide.md rename to plugins/core/.apm/skills/agentsmd-author/references/content-guide.md diff --git a/plugins/core/skills/agentsmd-author/references/sources.md b/plugins/core/.apm/skills/agentsmd-author/references/sources.md similarity index 100% rename from plugins/core/skills/agentsmd-author/references/sources.md rename to plugins/core/.apm/skills/agentsmd-author/references/sources.md diff --git a/plugins/core/skills/provider-adapter-author/README.md b/plugins/core/.apm/skills/provider-adapter-author/README.md similarity index 100% rename from plugins/core/skills/provider-adapter-author/README.md rename to plugins/core/.apm/skills/provider-adapter-author/README.md diff --git a/plugins/core/skills/provider-adapter-author/SKILL.md b/plugins/core/.apm/skills/provider-adapter-author/SKILL.md similarity index 100% rename from plugins/core/skills/provider-adapter-author/SKILL.md rename to plugins/core/.apm/skills/provider-adapter-author/SKILL.md diff --git a/plugins/core/skills/provider-adapter-author/references/sources.md b/plugins/core/.apm/skills/provider-adapter-author/references/sources.md similarity index 100% rename from plugins/core/skills/provider-adapter-author/references/sources.md rename to plugins/core/.apm/skills/provider-adapter-author/references/sources.md diff --git a/plugins/core/skills/provider-adapter-author/scripts/README.md b/plugins/core/.apm/skills/provider-adapter-author/scripts/README.md similarity index 100% rename from plugins/core/skills/provider-adapter-author/scripts/README.md rename to plugins/core/.apm/skills/provider-adapter-author/scripts/README.md diff --git a/plugins/core/skills/provider-adapter-author/scripts/validate-adapter.sh b/plugins/core/.apm/skills/provider-adapter-author/scripts/validate-adapter.sh similarity index 100% rename from plugins/core/skills/provider-adapter-author/scripts/validate-adapter.sh rename to plugins/core/.apm/skills/provider-adapter-author/scripts/validate-adapter.sh diff --git a/plugins/core/skills/provider-adapter-author/tests/README.md b/plugins/core/.apm/skills/provider-adapter-author/tests/README.md similarity index 91% rename from plugins/core/skills/provider-adapter-author/tests/README.md rename to plugins/core/.apm/skills/provider-adapter-author/tests/README.md index d66b0f8..639e2c1 100644 --- a/plugins/core/skills/provider-adapter-author/tests/README.md +++ b/plugins/core/.apm/skills/provider-adapter-author/tests/README.md @@ -18,7 +18,7 @@ git clone https://github.com/bats-core/bats-assert tests/test_helper/bats-assert Run all tests for this skill (from the repo root): ```bash -bats plugins/core/skills/provider-adapter-author/tests/ +bats plugins/core/.apm/skills/provider-adapter-author/tests/ ``` ## Files diff --git a/plugins/core/skills/provider-adapter-author/tests/validate-adapter.bats b/plugins/core/.apm/skills/provider-adapter-author/tests/validate-adapter.bats similarity index 98% rename from plugins/core/skills/provider-adapter-author/tests/validate-adapter.bats rename to plugins/core/.apm/skills/provider-adapter-author/tests/validate-adapter.bats index 052d0d9..3b5252c 100644 --- a/plugins/core/skills/provider-adapter-author/tests/validate-adapter.bats +++ b/plugins/core/.apm/skills/provider-adapter-author/tests/validate-adapter.bats @@ -1,7 +1,7 @@ #!/usr/bin/env bats setup() { - REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" + REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" diff --git a/plugins/core/.claude-plugin/plugin.json b/plugins/core/.claude-plugin/plugin.json index 2fc0c23..9da39d1 100644 --- a/plugins/core/.claude-plugin/plugin.json +++ b/plugins/core/.claude-plugin/plugin.json @@ -1,10 +1,10 @@ { "author": { + "email": "defame1297@rkdr.net", "name": "Defame1297", "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.", - "displayName": "Core", "keywords": [ "cross-cutting", "triage", diff --git a/plugins/core/.github/plugin/plugin.json b/plugins/core/.github/plugin/plugin.json new file mode 100644 index 0000000..9da39d1 --- /dev/null +++ b/plugins/core/.github/plugin/plugin.json @@ -0,0 +1,18 @@ +{ + "author": { + "email": "defame1297@rkdr.net", + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" + }, + "description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.", + "keywords": [ + "cross-cutting", + "triage", + "diagnose", + "architecture", + "debug" + ], + "license": "MIT", + "name": "core", + "version": "1.1.0" +} diff --git a/plugins/core/apm.yml b/plugins/core/apm.yml new file mode 100644 index 0000000..db83e85 --- /dev/null +++ b/plugins/core/apm.yml @@ -0,0 +1,32 @@ +name: core +version: 1.1.0 +description: Cross-cutting utility skills for everyday AI-assisted coding — triage, diagnosis, architecture review, and session navigation. +author: + name: Defame1297 + email: defame1297@rkdr.net + url: https://git.dev.rkdr.net/Defame1297/ +license: MIT +keywords: + - cross-cutting + - triage + - diagnose + - architecture + - debug + +# Constrains what .apm/ may contain: instructions, skill, hybrid, or prompts +type: skill + +targets: + - claude + - copilot + +# "auto" publishes the authoritative local source layout, or list explicit +# repo paths to define the complete publication set. +includes: auto + +dependencies: + apm: [] + mcp: [] +devDependencies: + apm: [] +scripts: {} diff --git a/plugins/core/plugin.json b/plugins/core/plugin.json index c24ed8e..9da39d1 100644 --- a/plugins/core/plugin.json +++ b/plugins/core/plugin.json @@ -1,10 +1,10 @@ { "author": { "email": "defame1297@rkdr.net", - "name": "Defame1297" + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.", - "hooks": "hooks.json", "keywords": [ "cross-cutting", "triage", @@ -13,10 +13,6 @@ "debug" ], "license": "MIT", - "mcpServers": ".mcp.json", "name": "core", - "skills": [ - "skills/" - ], "version": "1.1.0" } diff --git a/plugins/git/agents/git-orchestrate.agent.md b/plugins/git/.apm/agents/git-orchestrate.agent.md similarity index 86% rename from plugins/git/agents/git-orchestrate.agent.md rename to plugins/git/.apm/agents/git-orchestrate.agent.md index 30fae7a..a847abb 100644 --- a/plugins/git/agents/git-orchestrate.agent.md +++ b/plugins/git/.apm/agents/git-orchestrate.agent.md @@ -3,8 +3,6 @@ name: git-orchestrate description: Orchestrates git workflow operations for other agents. Invoke when a caller needs a multi-step or destructive git operation (rebase, force-push, branch deletion) coordinated across domain skills with safety gates, session context, and structured results. -tools: ["execute", "read", "edit"] - source_keys: - context7-git-htmldocs - git-scm-docs @@ -12,7 +10,6 @@ source_keys: - git-scm-submodule-docs - git-scm-remote-docs - conventional-commits-spec - --- You are the orchestrator for the git plugin—a composable workflow dispatcher designed for other agents to invoke multi-step git operations reliably. Your one job is routing and safety-gating: you do not execute git logic yourself, you delegate to domain skills and enforce confirmation on destructive operations. @@ -44,7 +41,7 @@ Sub-skills carry their own local copies of these rules for humans who invoke the When invoked, you: 1. Parse the incoming workflow request (operation type, parameters, context overrides) 2. Check safety gates: if the operation is destructive (force-push, branch deletion, rebase with history loss, force-checkout) and the request lacks explicit `confirm: true`, fail immediately with "requires explicit confirmation"; force-push to `main`/`master` is refused outright regardless of `confirm` -3. Route to the appropriate domain skill: git-commits, git-branches, git-history, git-submodules, git-worktrees, git-remotes +3. Route to the appropriate domain skill: `git-commits`, `git-branches`, `git-history`, `git-submodules`, `git-worktrees`, `git-remotes` 4. Manage session context: carry forward the current branch, workflow intent, and configuration, passing explicitly to each skill 5. Handle error recovery: for recoverable failures (merge conflicts, push rejections, auth issues), attempt automatic recovery; if unrecoverable, fail gracefully with actionable diagnostics 6. Aggregate results and return structured JSON output suitable for agent chaining @@ -67,11 +64,27 @@ When invoked, you: 2. Check the request against the Hard rules above (no `--no-verify`, no force-push `main`/`master`, atomicity, submodule ordering, etc.) — refuse outright on violation, independent of `confirm` 3. If destructive operation: require `confirm: true`, else fail with structured "requires explicit confirmation" error 4. Read plugin config from `.claude/plugins/git/config.json` if present — see `config.example.json` in the plugin root for the expected shape (`branching_pattern`, `commit_style`, `rebase_strategy`) — or fall back to sensible defaults -5. Invoke the appropriate skill with the operation, parameters, context, and config. For parent-repo git invocations, use `rtk git` rather than bare `git` (per org convention); submodule-specific commands run as bare `git` inside the submodule directory (see Submodule ordering above). +5. Invoke the appropriate skill via `Skill` or direct bash call with the operation, parameters, context, and config. For parent-repo git invocations, use `rtk git` rather than bare `git` (per org convention); submodule-specific commands run as bare `git` inside the submodule directory (see Submodule ordering above). 6. Catch and handle git errors: attempt automatic recovery (offer rebase strategies for conflicts, suggest `--force-with-lease` for rejections) 7. If recovery succeeds, continue; if not, return error structure with diagnostics and suggestions 8. Aggregate all outputs and return as structured JSON ## Output -Returns structured JSON with operation status, result (output, context, applied config), and optional error details with recovery suggestions. +```json +{ + "status": "success" | "error", + "operation": "", + "result": { + "output": "", + "context": { "current_branch": "...", "workflow_intent": "..." }, + "applied_config": { "commit_style": "...", "rebase_strategy": "..." } + }, + "error": { + "message": "", + "code": "", + "recovery_attempted": true | false, + "suggestions": ["", ""] + } +} +``` diff --git a/plugins/git/skills/git-branches/README.md b/plugins/git/.apm/skills/git-branches/README.md similarity index 100% rename from plugins/git/skills/git-branches/README.md rename to plugins/git/.apm/skills/git-branches/README.md diff --git a/plugins/git/skills/git-branches/SKILL.md b/plugins/git/.apm/skills/git-branches/SKILL.md similarity index 100% rename from plugins/git/skills/git-branches/SKILL.md rename to plugins/git/.apm/skills/git-branches/SKILL.md diff --git a/plugins/git/skills/git-branches/references/sources.md b/plugins/git/.apm/skills/git-branches/references/sources.md similarity index 100% rename from plugins/git/skills/git-branches/references/sources.md rename to plugins/git/.apm/skills/git-branches/references/sources.md diff --git a/plugins/git/skills/git-commits/README.md b/plugins/git/.apm/skills/git-commits/README.md similarity index 100% rename from plugins/git/skills/git-commits/README.md rename to plugins/git/.apm/skills/git-commits/README.md diff --git a/plugins/git/skills/git-commits/SKILL.md b/plugins/git/.apm/skills/git-commits/SKILL.md similarity index 100% rename from plugins/git/skills/git-commits/SKILL.md rename to plugins/git/.apm/skills/git-commits/SKILL.md diff --git a/plugins/git/skills/git-commits/references/commit-template.md b/plugins/git/.apm/skills/git-commits/references/commit-template.md similarity index 100% rename from plugins/git/skills/git-commits/references/commit-template.md rename to plugins/git/.apm/skills/git-commits/references/commit-template.md diff --git a/plugins/git/skills/git-commits/references/conventional-commits-spec.md b/plugins/git/.apm/skills/git-commits/references/conventional-commits-spec.md similarity index 100% rename from plugins/git/skills/git-commits/references/conventional-commits-spec.md rename to plugins/git/.apm/skills/git-commits/references/conventional-commits-spec.md diff --git a/plugins/git/skills/git-commits/references/sources.md b/plugins/git/.apm/skills/git-commits/references/sources.md similarity index 100% rename from plugins/git/skills/git-commits/references/sources.md rename to plugins/git/.apm/skills/git-commits/references/sources.md diff --git a/plugins/git/skills/git-history/README.md b/plugins/git/.apm/skills/git-history/README.md similarity index 100% rename from plugins/git/skills/git-history/README.md rename to plugins/git/.apm/skills/git-history/README.md diff --git a/plugins/git/skills/git-history/SKILL.md b/plugins/git/.apm/skills/git-history/SKILL.md similarity index 100% rename from plugins/git/skills/git-history/SKILL.md rename to plugins/git/.apm/skills/git-history/SKILL.md diff --git a/plugins/git/skills/git-history/references/README.md b/plugins/git/.apm/skills/git-history/references/README.md similarity index 100% rename from plugins/git/skills/git-history/references/README.md rename to plugins/git/.apm/skills/git-history/references/README.md diff --git a/plugins/git/skills/git-history/references/git-log-format.md b/plugins/git/.apm/skills/git-history/references/git-log-format.md similarity index 100% rename from plugins/git/skills/git-history/references/git-log-format.md rename to plugins/git/.apm/skills/git-history/references/git-log-format.md diff --git a/plugins/git/skills/git-history/references/sources.md b/plugins/git/.apm/skills/git-history/references/sources.md similarity index 100% rename from plugins/git/skills/git-history/references/sources.md rename to plugins/git/.apm/skills/git-history/references/sources.md diff --git a/plugins/git/skills/git-remotes/README.md b/plugins/git/.apm/skills/git-remotes/README.md similarity index 100% rename from plugins/git/skills/git-remotes/README.md rename to plugins/git/.apm/skills/git-remotes/README.md diff --git a/plugins/git/skills/git-remotes/SKILL.md b/plugins/git/.apm/skills/git-remotes/SKILL.md similarity index 100% rename from plugins/git/skills/git-remotes/SKILL.md rename to plugins/git/.apm/skills/git-remotes/SKILL.md diff --git a/plugins/git/skills/git-remotes/references/README.md b/plugins/git/.apm/skills/git-remotes/references/README.md similarity index 100% rename from plugins/git/skills/git-remotes/references/README.md rename to plugins/git/.apm/skills/git-remotes/references/README.md diff --git a/plugins/git/skills/git-remotes/references/remotes.md b/plugins/git/.apm/skills/git-remotes/references/remotes.md similarity index 100% rename from plugins/git/skills/git-remotes/references/remotes.md rename to plugins/git/.apm/skills/git-remotes/references/remotes.md diff --git a/plugins/git/skills/git-remotes/references/sources.md b/plugins/git/.apm/skills/git-remotes/references/sources.md similarity index 100% rename from plugins/git/skills/git-remotes/references/sources.md rename to plugins/git/.apm/skills/git-remotes/references/sources.md diff --git a/plugins/git/skills/git-submodules/README.md b/plugins/git/.apm/skills/git-submodules/README.md similarity index 100% rename from plugins/git/skills/git-submodules/README.md rename to plugins/git/.apm/skills/git-submodules/README.md diff --git a/plugins/git/skills/git-submodules/SKILL.md b/plugins/git/.apm/skills/git-submodules/SKILL.md similarity index 100% rename from plugins/git/skills/git-submodules/SKILL.md rename to plugins/git/.apm/skills/git-submodules/SKILL.md diff --git a/plugins/git/skills/git-submodules/references/README.md b/plugins/git/.apm/skills/git-submodules/references/README.md similarity index 100% rename from plugins/git/skills/git-submodules/references/README.md rename to plugins/git/.apm/skills/git-submodules/references/README.md diff --git a/plugins/git/skills/git-submodules/references/sources.md b/plugins/git/.apm/skills/git-submodules/references/sources.md similarity index 100% rename from plugins/git/skills/git-submodules/references/sources.md rename to plugins/git/.apm/skills/git-submodules/references/sources.md diff --git a/plugins/git/skills/git-submodules/references/submodules.md b/plugins/git/.apm/skills/git-submodules/references/submodules.md similarity index 100% rename from plugins/git/skills/git-submodules/references/submodules.md rename to plugins/git/.apm/skills/git-submodules/references/submodules.md diff --git a/plugins/git/skills/git-workflow/README.md b/plugins/git/.apm/skills/git-workflow/README.md similarity index 100% rename from plugins/git/skills/git-workflow/README.md rename to plugins/git/.apm/skills/git-workflow/README.md diff --git a/plugins/git/skills/git-workflow/SKILL.md b/plugins/git/.apm/skills/git-workflow/SKILL.md similarity index 100% rename from plugins/git/skills/git-workflow/SKILL.md rename to plugins/git/.apm/skills/git-workflow/SKILL.md diff --git a/plugins/git/skills/git-workflow/references/README.md b/plugins/git/.apm/skills/git-workflow/references/README.md similarity index 100% rename from plugins/git/skills/git-workflow/references/README.md rename to plugins/git/.apm/skills/git-workflow/references/README.md diff --git a/plugins/git/skills/git-workflow/references/sources.md b/plugins/git/.apm/skills/git-workflow/references/sources.md similarity index 100% rename from plugins/git/skills/git-workflow/references/sources.md rename to plugins/git/.apm/skills/git-workflow/references/sources.md diff --git a/plugins/git/skills/git-worktrees/README.md b/plugins/git/.apm/skills/git-worktrees/README.md similarity index 100% rename from plugins/git/skills/git-worktrees/README.md rename to plugins/git/.apm/skills/git-worktrees/README.md diff --git a/plugins/git/skills/git-worktrees/SKILL.md b/plugins/git/.apm/skills/git-worktrees/SKILL.md similarity index 100% rename from plugins/git/skills/git-worktrees/SKILL.md rename to plugins/git/.apm/skills/git-worktrees/SKILL.md diff --git a/plugins/git/skills/git-worktrees/references/README.md b/plugins/git/.apm/skills/git-worktrees/references/README.md similarity index 100% rename from plugins/git/skills/git-worktrees/references/README.md rename to plugins/git/.apm/skills/git-worktrees/references/README.md diff --git a/plugins/git/skills/git-worktrees/references/sources.md b/plugins/git/.apm/skills/git-worktrees/references/sources.md similarity index 100% rename from plugins/git/skills/git-worktrees/references/sources.md rename to plugins/git/.apm/skills/git-worktrees/references/sources.md diff --git a/plugins/git/skills/git-worktrees/references/worktrees.md b/plugins/git/.apm/skills/git-worktrees/references/worktrees.md similarity index 100% rename from plugins/git/skills/git-worktrees/references/worktrees.md rename to plugins/git/.apm/skills/git-worktrees/references/worktrees.md diff --git a/plugins/git/skills/pc-author/README.md b/plugins/git/.apm/skills/pc-author/README.md similarity index 100% rename from plugins/git/skills/pc-author/README.md rename to plugins/git/.apm/skills/pc-author/README.md diff --git a/plugins/git/skills/pc-author/SKILL.md b/plugins/git/.apm/skills/pc-author/SKILL.md similarity index 100% rename from plugins/git/skills/pc-author/SKILL.md rename to plugins/git/.apm/skills/pc-author/SKILL.md diff --git a/plugins/git/skills/pc-author/references/README.md b/plugins/git/.apm/skills/pc-author/references/README.md similarity index 100% rename from plugins/git/skills/pc-author/references/README.md rename to plugins/git/.apm/skills/pc-author/references/README.md diff --git a/plugins/git/skills/pc-author/references/hooks-by-language.md b/plugins/git/.apm/skills/pc-author/references/hooks-by-language.md similarity index 100% rename from plugins/git/skills/pc-author/references/hooks-by-language.md rename to plugins/git/.apm/skills/pc-author/references/hooks-by-language.md diff --git a/plugins/git/skills/pc-author/references/sources.md b/plugins/git/.apm/skills/pc-author/references/sources.md similarity index 100% rename from plugins/git/skills/pc-author/references/sources.md rename to plugins/git/.apm/skills/pc-author/references/sources.md diff --git a/plugins/git/skills/pc-run/README.md b/plugins/git/.apm/skills/pc-run/README.md similarity index 100% rename from plugins/git/skills/pc-run/README.md rename to plugins/git/.apm/skills/pc-run/README.md diff --git a/plugins/git/skills/pc-run/SKILL.md b/plugins/git/.apm/skills/pc-run/SKILL.md similarity index 100% rename from plugins/git/skills/pc-run/SKILL.md rename to plugins/git/.apm/skills/pc-run/SKILL.md diff --git a/plugins/git/skills/pc-run/references/README.md b/plugins/git/.apm/skills/pc-run/references/README.md similarity index 100% rename from plugins/git/skills/pc-run/references/README.md rename to plugins/git/.apm/skills/pc-run/references/README.md diff --git a/plugins/git/skills/pc-run/references/failure-patterns.md b/plugins/git/.apm/skills/pc-run/references/failure-patterns.md similarity index 100% rename from plugins/git/skills/pc-run/references/failure-patterns.md rename to plugins/git/.apm/skills/pc-run/references/failure-patterns.md diff --git a/plugins/git/skills/pc-run/references/sources.md b/plugins/git/.apm/skills/pc-run/references/sources.md similarity index 100% rename from plugins/git/skills/pc-run/references/sources.md rename to plugins/git/.apm/skills/pc-run/references/sources.md diff --git a/plugins/git/.claude-plugin/plugin.json b/plugins/git/.claude-plugin/plugin.json index 64d6d1d..4275c2a 100644 --- a/plugins/git/.claude-plugin/plugin.json +++ b/plugins/git/.claude-plugin/plugin.json @@ -1,10 +1,10 @@ { "author": { + "email": "defame1297@rkdr.net", "name": "Defame1297", "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.", - "displayName": "Git", "keywords": [ "git", "vcs", diff --git a/plugins/git/.github/plugin/plugin.json b/plugins/git/.github/plugin/plugin.json new file mode 100644 index 0000000..4275c2a --- /dev/null +++ b/plugins/git/.github/plugin/plugin.json @@ -0,0 +1,17 @@ +{ + "author": { + "email": "defame1297@rkdr.net", + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" + }, + "description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.", + "keywords": [ + "git", + "vcs", + "commit", + "branch" + ], + "license": "MIT", + "name": "git", + "version": "1.3.2" +} diff --git a/plugins/git/agents/git-orchestrate.md b/plugins/git/agents/git-orchestrate.md deleted file mode 100644 index 5a0c777..0000000 --- a/plugins/git/agents/git-orchestrate.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -name: git-orchestrate - -description: Orchestrates git workflow operations for other agents. Invoke when a caller needs a multi-step or destructive git operation (rebase, force-push, branch deletion) coordinated across domain skills with safety gates, session context, and structured results. - -tools: Bash, Read, Edit, Skill - -source_keys: - - context7-git-htmldocs - - git-scm-docs - - git-scm-worktree-docs - - git-scm-submodule-docs - - git-scm-remote-docs - - conventional-commits-spec - ---- - -You are the orchestrator for the git plugin—a composable workflow dispatcher designed for other agents to invoke multi-step git operations reliably. Your one job is routing and safety-gating: you do not execute git logic yourself, you delegate to domain skills and enforce confirmation on destructive operations. - -You act on the caller's real branch and session context (you explicitly carry forward `current_branch`), not a disposable copy — you do not run in an isolated worktree. - -**Scope:** this orchestrator routes git-object operations only (commits, branches, worktrees, remotes, submodules, history). `pc-author` and `pc-run` (pre-commit config authoring and hook execution) are intentionally not routed here — they operate on `.pre-commit-config.yaml` and hook installation, not git objects. `git-workflow` is also not routed here, but for a different reason than `pc-author`/`pc-run`: it is a human-facing conversational wrapper for all git operation types (commits, branches, history, submodules, worktrees, remotes), and it itself calls this orchestrator internally as its execution backend — its own workflow explicitly invokes the `git-orchestrate` agent as its final step. It is not a peer to invoke instead of this dispatcher, and it explicitly refuses agent callers ("Do not use when the caller is an agent"). Agent callers route git-object operations here directly; direct human users to `git-workflow` when they want guided, conversational git help — it will call back into this orchestrator itself. Invoke `pc-author`/`pc-run` directly rather than through this dispatcher; do not invoke `git-workflow` as an agent caller under any circumstance. - -## Hard rules - -These are non-negotiable regardless of `confirm` or any skill-local override: -- Never skip hooks with `--no-verify`. Hooks are the automated QA gate; bypassing them breaks the pipeline. -- Never force-push `main` or `master`. -- Keep commits atomic — one logical, independently reviewable and reversible change per commit. -- Every commit must leave the repository in a working state (buildable/testable where practical). -- Commit messages explain **why**, not **what** — the diff already documents what changed. -- Use Conventional Commits (`feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, `test:`, etc.). -- Never commit secrets, credentials, or environment-specific config. -- Reference related issues, ADRs, or design documents using git trailers (`Fixes:`, `Refs:`, `ADR:`, `RFC:`, `Design:`) when applicable. - -### Submodule ordering - -- Commit and push the submodule first, then update and push the parent repo. Pushing the parent before the submodule commit exists on the remote breaks `git submodule update` for anyone who pulls. -- Always use `rtk git` for parent-repo operations; drop into the submodule directory and use bare `git` for submodule-specific commands. -- After adding or updating a submodule, check `git status` in both the parent and the submodule — a `-dirty` flag means the submodule has uncommitted local changes that must be committed before the parent pointer updates. - -Sub-skills carry their own local copies of these rules for humans who invoke them directly, bypassing this orchestrator. When a caller routes through you, this section is the enforcement backstop: check every routed operation against it before dispatch, not just the destructive-operation confirm gate below. - -When invoked, you: -1. Parse the incoming workflow request (operation type, parameters, context overrides) -2. Check safety gates: if the operation is destructive (force-push, branch deletion, rebase with history loss, force-checkout) and the request lacks explicit `confirm: true`, fail immediately with "requires explicit confirmation"; force-push to `main`/`master` is refused outright regardless of `confirm` -3. Route to the appropriate domain skill: `git-commits`, `git-branches`, `git-history`, `git-submodules`, `git-worktrees`, `git-remotes` -4. Manage session context: carry forward the current branch, workflow intent, and configuration, passing explicitly to each skill -5. Handle error recovery: for recoverable failures (merge conflicts, push rejections, auth issues), attempt automatic recovery; if unrecoverable, fail gracefully with actionable diagnostics -6. Aggregate results and return structured JSON output suitable for agent chaining - -## Inputs - -- **operation:** string, one of: - - commits/history: commit, amend, cherry-pick, rebase, squash, blame, log - - branches: create-branch, switch-branch, delete-branch, rename-branch, track-branch, list-branches - - worktrees: create-worktree, list-worktrees, lock-worktree, unlock-worktree, move-worktree, remove-worktree, prune-worktree, repair-worktree - - remotes: add-remote, remove-remote, rename-remote, set-remote-url, push, pull, fetch - - submodules: add-submodule, init-submodule, update-submodule, sync-submodule, remove-submodule, submodule-status -- **parameters:** object, operation-specific arguments (branch name, commit message, etc.) -- **context:** object (optional), workflow state to carry forward (current_branch, branch_intent, user_config_overrides) -- **confirm:** boolean (optional), explicit confirmation for destructive operations (required if not set for force-push, branch deletion, rebase with history loss, force-checkout) - -## Process - -1. Validate the request structure and check if operation is known -2. Check the request against the Hard rules above (no `--no-verify`, no force-push `main`/`master`, atomicity, submodule ordering, etc.) — refuse outright on violation, independent of `confirm` -3. If destructive operation: require `confirm: true`, else fail with structured "requires explicit confirmation" error -4. Read plugin config from `.claude/plugins/git/config.json` if present — see `config.example.json` in the plugin root for the expected shape (`branching_pattern`, `commit_style`, `rebase_strategy`) — or fall back to sensible defaults -5. Invoke the appropriate skill via `Skill` or direct bash call with the operation, parameters, context, and config. For parent-repo git invocations, use `rtk git` rather than bare `git` (per org convention); submodule-specific commands run as bare `git` inside the submodule directory (see Submodule ordering above). -6. Catch and handle git errors: attempt automatic recovery (offer rebase strategies for conflicts, suggest `--force-with-lease` for rejections) -7. If recovery succeeds, continue; if not, return error structure with diagnostics and suggestions -8. Aggregate all outputs and return as structured JSON - -## Output - -```json -{ - "status": "success" | "error", - "operation": "", - "result": { - "output": "", - "context": { "current_branch": "...", "workflow_intent": "..." }, - "applied_config": { "commit_style": "...", "rebase_strategy": "..." } - }, - "error": { - "message": "", - "code": "", - "recovery_attempted": true | false, - "suggestions": ["", ""] - } -} -``` diff --git a/plugins/git/apm.yml b/plugins/git/apm.yml new file mode 100644 index 0000000..1f64983 --- /dev/null +++ b/plugins/git/apm.yml @@ -0,0 +1,28 @@ +name: git +version: 1.3.2 +description: Skills for working with Git — conventional commits, branch management, pull requests, and feature flow. +author: + name: Defame1297 + email: defame1297@rkdr.net + url: https://git.dev.rkdr.net/Defame1297/ +license: MIT +keywords: + - git + - vcs + - commit + - branch +# Which agent platforms to deploy to. +# Resolution order: --target flag > this field > auto-detect from filesystem. +# Accepted values: agent-skills, antigravity, claude, codex, copilot, cursor, gemini, grok-build, kiro, opencode, windsurf +targets: + - claude + - copilot +type: hybrid + +dependencies: + apm: [] + mcp: [] +includes: auto +devDependencies: + apm: [] +scripts: {} diff --git a/plugins/git/plugin.json b/plugins/git/plugin.json index 5f4e94c..4275c2a 100644 --- a/plugins/git/plugin.json +++ b/plugins/git/plugin.json @@ -1,11 +1,10 @@ { - "agents": "agents/", "author": { "email": "defame1297@rkdr.net", - "name": "Defame1297" + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.", - "hooks": "hooks.json", "keywords": [ "git", "vcs", @@ -13,10 +12,6 @@ "branch" ], "license": "MIT", - "mcpServers": ".mcp.json", "name": "git", - "skills": [ - "skills/" - ], "version": "1.3.2" } diff --git a/plugins/git/sources.md b/plugins/git/sources.md index fef32b5..c176b7c 100644 --- a/plugins/git/sources.md +++ b/plugins/git/sources.md @@ -5,7 +5,7 @@ - **URL:** context7:/git/htmldocs - **Research doc:** plugins/git/docs/research/docs/git/sources.md - **Description:** Official Git HTML documentation from the git/htmldocs repository — covers all commands, concepts, and internals. -- **Contributing files:** agents/git-orchestrate.md, agents/git-orchestrate.agent.md +- **Contributing files:** .apm/agents/git-orchestrate.agent.md - **Status:** `extracted` ## git-scm-docs @@ -13,7 +13,7 @@ - **URL:** https://git-scm.com/docs/git-config - **Research doc:** plugins/git/docs/research/docs/git/sources.md - **Description:** Official git-scm.com reference pages — git-config manual and CLI reference. -- **Contributing files:** agents/git-orchestrate.md, agents/git-orchestrate.agent.md +- **Contributing files:** .apm/agents/git-orchestrate.agent.md - **Status:** `extracted` ## git-scm-worktree-docs @@ -21,7 +21,7 @@ - **URL:** https://git-scm.com/docs/git-worktree - **Research doc:** plugins/git/docs/research/docs/git/sources.md - **Description:** Official git-scm.com reference for git-worktree — subcommands, flags, ref-sharing rules. -- **Contributing files:** agents/git-orchestrate.md, agents/git-orchestrate.agent.md +- **Contributing files:** .apm/agents/git-orchestrate.agent.md - **Status:** `extracted` ## git-scm-submodule-docs @@ -29,7 +29,7 @@ - **URL:** https://git-scm.com/docs/git-submodule - **Research doc:** plugins/git/docs/research/docs/git/sources.md - **Description:** Official git-scm.com reference for git-submodule — subcommands, flags, configuration keys. -- **Contributing files:** agents/git-orchestrate.md, agents/git-orchestrate.agent.md +- **Contributing files:** .apm/agents/git-orchestrate.agent.md - **Status:** `extracted` ## git-scm-remote-docs @@ -37,7 +37,7 @@ - **URL:** https://git-scm.com/docs/git-remote - **Research doc:** plugins/git/docs/research/docs/git/sources.md - **Description:** Official git-scm.com reference for git-remote — add, remove, rename, set-url, prune. -- **Contributing files:** agents/git-orchestrate.md, agents/git-orchestrate.agent.md +- **Contributing files:** .apm/agents/git-orchestrate.agent.md - **Status:** `extracted` ## conventional-commits-spec @@ -45,5 +45,5 @@ - **URL:** https://www.conventionalcommits.org/en/v1.0.0/ - **Research doc:** plugins/git/docs/research/docs/git/sources.md - **Description:** The Conventional Commits v1.0.0 specification — format rules, breaking change conventions, footer token format. -- **Contributing files:** agents/git-orchestrate.md, agents/git-orchestrate.agent.md +- **Contributing files:** .apm/agents/git-orchestrate.agent.md - **Status:** `extracted` diff --git a/plugins/gitea/agents/gitea-orchestrate.agent.md b/plugins/gitea/.apm/agents/gitea-orchestrate.agent.md similarity index 90% rename from plugins/gitea/agents/gitea-orchestrate.agent.md rename to plugins/gitea/.apm/agents/gitea-orchestrate.agent.md index 2f97749..05ca1c5 100644 --- a/plugins/gitea/agents/gitea-orchestrate.agent.md +++ b/plugins/gitea/.apm/agents/gitea-orchestrate.agent.md @@ -3,8 +3,6 @@ name: gitea-orchestrate description: Orchestrates Gitea operations for other agents. Invoke when a caller needs a multi-step or destructive Gitea operation (merge a PR, delete a branch/release/tag/label/milestone, delete a file) coordinated across domain skills with safety gates, session context, and structured results. -tools: ["execute", "read"] - source_keys: - gitea-mcp-repo - gitea-mcp-slim-go @@ -44,7 +42,7 @@ Sub-skills carry their own local copies of relevant gotchas for humans who invok When invoked, you: 1. Parse the incoming workflow request (operation type, parameters, context overrides) 2. Check safety gates: if the operation is destructive (delete-branch, delete-release, delete-tag, delete-label, delete-milestone, delete-file, merge-pr) and the request lacks explicit `confirm: true`, fail immediately with "requires explicit confirmation"; deleting the default branch is refused outright regardless of `confirm` -3. Route to the appropriate domain skill: gitea-issues, gitea-labels-milestones, gitea-prs, gitea-branches, gitea-files, gitea-releases +3. Route to the appropriate domain skill: `gitea-issues`, `gitea-labels-milestones`, `gitea-prs`, `gitea-branches`, `gitea-files`, `gitea-releases` 4. Manage session context: resolve and carry forward `owner`/`repo` and any cached number-space resolutions, passing them explicitly to each skill 5. Handle error recovery: for recoverable failures (rate limiting, transient 5xx, pagination gaps) retry or complete the operation; for ambiguous 404s, attempt the permission-vs-not-found disambiguation before failing 6. Aggregate results and return structured JSON output suitable for agent chaining @@ -69,11 +67,27 @@ When invoked, you: 3. If destructive operation: require `confirm: true`, else fail with structured "requires explicit confirmation" error 4. Resolve `owner`/`repo` via `git remote -v` on `origin` if not already present in `context`, and reuse the resolution for the remainder of the request 5. If the operation targets a bare number and the domain isn't specified, run Number resolution above before dispatch -6. Invoke the appropriate domain skill with the operation, parameters, and resolved context (`owner`, `repo`) +6. Invoke the appropriate domain skill via `Skill` with the operation, parameters, and resolved context (`owner`, `repo`) 7. Catch and handle Gitea errors: disambiguate 404s (not-found vs. permission-hidden), retry transient failures, loop pagination for `list_releases`/`list_tags` until exhausted 8. If recovery succeeds, continue; if not, return error structure with diagnostics and suggestions 9. Aggregate all outputs and return as structured JSON ## Output -Returns structured JSON with operation status, result (output, resolved owner/repo/number-type context, applied confirm-requirement flag), and optional error details with recovery suggestions. +```json +{ + "status": "success" | "error", + "operation": "", + "result": { + "output": "", + "context": { "owner": "...", "repo": "...", "resolved_number_type": "issue" | "pull" | null }, + "applied_config": { "confirm_required": true | false } + }, + "error": { + "message": "", + "code": "", + "recovery_attempted": true | false, + "suggestions": ["", ""] + } +} +``` diff --git a/plugins/gitea/skills/gitea-branches/README.md b/plugins/gitea/.apm/skills/gitea-branches/README.md similarity index 100% rename from plugins/gitea/skills/gitea-branches/README.md rename to plugins/gitea/.apm/skills/gitea-branches/README.md diff --git a/plugins/gitea/skills/gitea-branches/SKILL.md b/plugins/gitea/.apm/skills/gitea-branches/SKILL.md similarity index 100% rename from plugins/gitea/skills/gitea-branches/SKILL.md rename to plugins/gitea/.apm/skills/gitea-branches/SKILL.md diff --git a/plugins/gitea/skills/gitea-branches/references/branches.md b/plugins/gitea/.apm/skills/gitea-branches/references/branches.md similarity index 100% rename from plugins/gitea/skills/gitea-branches/references/branches.md rename to plugins/gitea/.apm/skills/gitea-branches/references/branches.md diff --git a/plugins/gitea/skills/gitea-branches/references/commits.md b/plugins/gitea/.apm/skills/gitea-branches/references/commits.md similarity index 100% rename from plugins/gitea/skills/gitea-branches/references/commits.md rename to plugins/gitea/.apm/skills/gitea-branches/references/commits.md diff --git a/plugins/gitea/skills/gitea-branches/references/sources.md b/plugins/gitea/.apm/skills/gitea-branches/references/sources.md similarity index 100% rename from plugins/gitea/skills/gitea-branches/references/sources.md rename to plugins/gitea/.apm/skills/gitea-branches/references/sources.md diff --git a/plugins/gitea/skills/gitea-files/README.md b/plugins/gitea/.apm/skills/gitea-files/README.md similarity index 100% rename from plugins/gitea/skills/gitea-files/README.md rename to plugins/gitea/.apm/skills/gitea-files/README.md diff --git a/plugins/gitea/skills/gitea-files/SKILL.md b/plugins/gitea/.apm/skills/gitea-files/SKILL.md similarity index 100% rename from plugins/gitea/skills/gitea-files/SKILL.md rename to plugins/gitea/.apm/skills/gitea-files/SKILL.md diff --git a/plugins/gitea/skills/gitea-files/references/examples.md b/plugins/gitea/.apm/skills/gitea-files/references/examples.md similarity index 100% rename from plugins/gitea/skills/gitea-files/references/examples.md rename to plugins/gitea/.apm/skills/gitea-files/references/examples.md diff --git a/plugins/gitea/skills/gitea-files/references/sources.md b/plugins/gitea/.apm/skills/gitea-files/references/sources.md similarity index 100% rename from plugins/gitea/skills/gitea-files/references/sources.md rename to plugins/gitea/.apm/skills/gitea-files/references/sources.md diff --git a/plugins/gitea/skills/gitea-issues/README.md b/plugins/gitea/.apm/skills/gitea-issues/README.md similarity index 100% rename from plugins/gitea/skills/gitea-issues/README.md rename to plugins/gitea/.apm/skills/gitea-issues/README.md diff --git a/plugins/gitea/skills/gitea-issues/SKILL.md b/plugins/gitea/.apm/skills/gitea-issues/SKILL.md similarity index 100% rename from plugins/gitea/skills/gitea-issues/SKILL.md rename to plugins/gitea/.apm/skills/gitea-issues/SKILL.md diff --git a/plugins/gitea/skills/gitea-issues/references/enrichments.md b/plugins/gitea/.apm/skills/gitea-issues/references/enrichments.md similarity index 100% rename from plugins/gitea/skills/gitea-issues/references/enrichments.md rename to plugins/gitea/.apm/skills/gitea-issues/references/enrichments.md diff --git a/plugins/gitea/skills/gitea-issues/references/issues.md b/plugins/gitea/.apm/skills/gitea-issues/references/issues.md similarity index 100% rename from plugins/gitea/skills/gitea-issues/references/issues.md rename to plugins/gitea/.apm/skills/gitea-issues/references/issues.md diff --git a/plugins/gitea/skills/gitea-issues/references/search.md b/plugins/gitea/.apm/skills/gitea-issues/references/search.md similarity index 100% rename from plugins/gitea/skills/gitea-issues/references/search.md rename to plugins/gitea/.apm/skills/gitea-issues/references/search.md diff --git a/plugins/gitea/skills/gitea-issues/references/sources.md b/plugins/gitea/.apm/skills/gitea-issues/references/sources.md similarity index 100% rename from plugins/gitea/skills/gitea-issues/references/sources.md rename to plugins/gitea/.apm/skills/gitea-issues/references/sources.md diff --git a/plugins/gitea/skills/gitea-labels-milestones/README.md b/plugins/gitea/.apm/skills/gitea-labels-milestones/README.md similarity index 100% rename from plugins/gitea/skills/gitea-labels-milestones/README.md rename to plugins/gitea/.apm/skills/gitea-labels-milestones/README.md diff --git a/plugins/gitea/skills/gitea-labels-milestones/SKILL.md b/plugins/gitea/.apm/skills/gitea-labels-milestones/SKILL.md similarity index 100% rename from plugins/gitea/skills/gitea-labels-milestones/SKILL.md rename to plugins/gitea/.apm/skills/gitea-labels-milestones/SKILL.md diff --git a/plugins/gitea/skills/gitea-labels-milestones/references/label-inference.md b/plugins/gitea/.apm/skills/gitea-labels-milestones/references/label-inference.md similarity index 100% rename from plugins/gitea/skills/gitea-labels-milestones/references/label-inference.md rename to plugins/gitea/.apm/skills/gitea-labels-milestones/references/label-inference.md diff --git a/plugins/gitea/skills/gitea-labels-milestones/references/labels.md b/plugins/gitea/.apm/skills/gitea-labels-milestones/references/labels.md similarity index 100% rename from plugins/gitea/skills/gitea-labels-milestones/references/labels.md rename to plugins/gitea/.apm/skills/gitea-labels-milestones/references/labels.md diff --git a/plugins/gitea/skills/gitea-labels-milestones/references/milestones.md b/plugins/gitea/.apm/skills/gitea-labels-milestones/references/milestones.md similarity index 100% rename from plugins/gitea/skills/gitea-labels-milestones/references/milestones.md rename to plugins/gitea/.apm/skills/gitea-labels-milestones/references/milestones.md diff --git a/plugins/gitea/skills/gitea-labels-milestones/references/sources.md b/plugins/gitea/.apm/skills/gitea-labels-milestones/references/sources.md similarity index 100% rename from plugins/gitea/skills/gitea-labels-milestones/references/sources.md rename to plugins/gitea/.apm/skills/gitea-labels-milestones/references/sources.md diff --git a/plugins/gitea/skills/gitea-prs/README.md b/plugins/gitea/.apm/skills/gitea-prs/README.md similarity index 100% rename from plugins/gitea/skills/gitea-prs/README.md rename to plugins/gitea/.apm/skills/gitea-prs/README.md diff --git a/plugins/gitea/skills/gitea-prs/SKILL.md b/plugins/gitea/.apm/skills/gitea-prs/SKILL.md similarity index 100% rename from plugins/gitea/skills/gitea-prs/SKILL.md rename to plugins/gitea/.apm/skills/gitea-prs/SKILL.md diff --git a/plugins/gitea/skills/gitea-prs/references/merging.md b/plugins/gitea/.apm/skills/gitea-prs/references/merging.md similarity index 100% rename from plugins/gitea/skills/gitea-prs/references/merging.md rename to plugins/gitea/.apm/skills/gitea-prs/references/merging.md diff --git a/plugins/gitea/skills/gitea-prs/references/pull-requests.md b/plugins/gitea/.apm/skills/gitea-prs/references/pull-requests.md similarity index 100% rename from plugins/gitea/skills/gitea-prs/references/pull-requests.md rename to plugins/gitea/.apm/skills/gitea-prs/references/pull-requests.md diff --git a/plugins/gitea/skills/gitea-prs/references/reviews.md b/plugins/gitea/.apm/skills/gitea-prs/references/reviews.md similarity index 100% rename from plugins/gitea/skills/gitea-prs/references/reviews.md rename to plugins/gitea/.apm/skills/gitea-prs/references/reviews.md diff --git a/plugins/gitea/skills/gitea-prs/references/sources.md b/plugins/gitea/.apm/skills/gitea-prs/references/sources.md similarity index 100% rename from plugins/gitea/skills/gitea-prs/references/sources.md rename to plugins/gitea/.apm/skills/gitea-prs/references/sources.md diff --git a/plugins/gitea/skills/gitea-releases/README.md b/plugins/gitea/.apm/skills/gitea-releases/README.md similarity index 100% rename from plugins/gitea/skills/gitea-releases/README.md rename to plugins/gitea/.apm/skills/gitea-releases/README.md diff --git a/plugins/gitea/skills/gitea-releases/SKILL.md b/plugins/gitea/.apm/skills/gitea-releases/SKILL.md similarity index 100% rename from plugins/gitea/skills/gitea-releases/SKILL.md rename to plugins/gitea/.apm/skills/gitea-releases/SKILL.md diff --git a/plugins/gitea/skills/gitea-releases/references/call-signatures.md b/plugins/gitea/.apm/skills/gitea-releases/references/call-signatures.md similarity index 100% rename from plugins/gitea/skills/gitea-releases/references/call-signatures.md rename to plugins/gitea/.apm/skills/gitea-releases/references/call-signatures.md diff --git a/plugins/gitea/skills/gitea-releases/references/conventions.md b/plugins/gitea/.apm/skills/gitea-releases/references/conventions.md similarity index 100% rename from plugins/gitea/skills/gitea-releases/references/conventions.md rename to plugins/gitea/.apm/skills/gitea-releases/references/conventions.md diff --git a/plugins/gitea/skills/gitea-releases/references/sources.md b/plugins/gitea/.apm/skills/gitea-releases/references/sources.md similarity index 100% rename from plugins/gitea/skills/gitea-releases/references/sources.md rename to plugins/gitea/.apm/skills/gitea-releases/references/sources.md diff --git a/plugins/gitea/skills/gitea-workflow/README.md b/plugins/gitea/.apm/skills/gitea-workflow/README.md similarity index 100% rename from plugins/gitea/skills/gitea-workflow/README.md rename to plugins/gitea/.apm/skills/gitea-workflow/README.md diff --git a/plugins/gitea/skills/gitea-workflow/SKILL.md b/plugins/gitea/.apm/skills/gitea-workflow/SKILL.md similarity index 100% rename from plugins/gitea/skills/gitea-workflow/SKILL.md rename to plugins/gitea/.apm/skills/gitea-workflow/SKILL.md diff --git a/plugins/gitea/skills/gitea-workflow/references/sources.md b/plugins/gitea/.apm/skills/gitea-workflow/references/sources.md similarity index 100% rename from plugins/gitea/skills/gitea-workflow/references/sources.md rename to plugins/gitea/.apm/skills/gitea-workflow/references/sources.md diff --git a/plugins/gitea/.claude-plugin/plugin.json b/plugins/gitea/.claude-plugin/plugin.json index 2fc7c81..2ce281c 100644 --- a/plugins/gitea/.claude-plugin/plugin.json +++ b/plugins/gitea/.claude-plugin/plugin.json @@ -1,10 +1,10 @@ { "author": { + "email": "defame1297@rkdr.net", "name": "Defame1297", "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.", - "displayName": "Gitea", "keywords": [ "gitea", "issues", diff --git a/plugins/gitea/.github/plugin/plugin.json b/plugins/gitea/.github/plugin/plugin.json new file mode 100644 index 0000000..2ce281c --- /dev/null +++ b/plugins/gitea/.github/plugin/plugin.json @@ -0,0 +1,19 @@ +{ + "author": { + "email": "defame1297@rkdr.net", + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" + }, + "description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.", + "keywords": [ + "gitea", + "issues", + "prs", + "milestones", + "releases", + "branches" + ], + "license": "MIT", + "name": "gitea", + "version": "1.3.3" +} diff --git a/plugins/gitea/agents/gitea-orchestrate.md b/plugins/gitea/agents/gitea-orchestrate.md deleted file mode 100644 index e2d26cd..0000000 --- a/plugins/gitea/agents/gitea-orchestrate.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -name: gitea-orchestrate - -description: Orchestrates Gitea operations for other agents. Invoke when a caller needs a multi-step or destructive Gitea operation (merge a PR, delete a branch/release/tag/label/milestone, delete a file) coordinated across domain skills with safety gates, session context, and structured results. - -tools: Bash, Read, Skill - -source_keys: - - gitea-mcp-repo - - gitea-mcp-slim-go - - context7-websites-gitea - - context7-gitea-tea-cli - ---- - -You are the orchestrator for the gitea plugin — a composable workflow dispatcher designed for other agents to invoke multi-step Gitea operations reliably. Your one job is routing and safety-gating: you do not call `mcp__gitea__*` tools yourself, you delegate to domain skills and enforce confirmation on destructive operations. - -You resolve `owner`/`repo` once per session (via `git remote -v` on `origin`) and carry that forward as session context to every domain skill you dispatch to, rather than making each skill re-resolve it. - -**Scope:** this orchestrator routes Gitea-object operations across the six domain skills only: `gitea-issues`, `gitea-labels-milestones`, `gitea-prs`, `gitea-branches`, `gitea-files`, `gitea-releases`. `gitea-workflow` is also not routed here, but for a different reason than a missing domain: it is a human-facing conversational wrapper that gives status check-ins and resolves ambiguous bare numbers ("what's going on with #42") by reasoning about phrasing and context, and it composes the same six domain skills directly rather than calling this orchestrator. It is not a peer to invoke instead of this dispatcher — agent callers route Gitea-object operations here directly with an explicit `operation` field; direct human users to `gitea-workflow` when they want guided, conversational help. Never invoke `gitea-workflow` as an agent caller — resolve ambiguous issue/PR numbers yourself (see Number resolution below) instead of relying on its conversational disambiguation. - -## Hard rules - -These are non-negotiable regardless of `confirm` or any skill-local override: -- Never delete the repository's default branch (typically `main` or `master`) — refused outright, independent of `confirm`. -- `delete_release` takes a numeric `id`; `delete_tag` takes a `tag_name` string. These are asymmetric and never interchangeable — resolve the correct identifier via `list_releases`/`get_release` before calling either, and never guess one from the other. -- Deleting a release does not delete its tag, and vice versa — if the caller's intent is to remove both, dispatch both operations explicitly rather than assuming one implies the other. -- A 404 from any domain skill does not necessarily mean the target doesn't exist — Gitea hides permission errors as not-found. Surface this ambiguity in the error `code` (`not_found_or_forbidden`) rather than reporting a hard "does not exist." -- Label and milestone IDs must be resolved via `gitea-labels-milestones` before being applied to an issue or PR — never pass a label/milestone name directly to `gitea-issues`/`gitea-prs`, they require numeric IDs. -- Issues and PRs share one number space. Before dispatching an operation keyed on a bare number, resolve whether it's an issue or a PR yourself (see Number resolution) — never infer the domain from operation phrasing alone. -- `list_releases`/`list_tags` default to `per_page: 20` (other domains default to 30) with no server-side auto-pagination — when a caller needs a complete result set, loop `page` upward until a page returns fewer than `per_page` results before returning. -- Never commit secrets, credentials, or environment-specific config into any file written via `gitea-files`. - -### Number resolution - -When an operation targets a bare issue/PR number and the caller hasn't specified which domain it is: -1. Dispatch to `gitea-issues` with `issue_read method: "get"` on that number. -2. Check the response's `is_pull` field: `true` → re-dispatch to `gitea-prs` for the actual operation; `false`/absent → it's an issue, proceed with `gitea-issues`. -3. Cache the resolution in session context for the remainder of the request so repeated references to the same number don't re-resolve. -4. If the resolution call 404s, do not conclude the number doesn't exist — return `not_found_or_forbidden` and suggest verifying token scope (`write:issue`). - -Sub-skills carry their own local copies of relevant gotchas for humans who invoke them directly, bypassing this orchestrator. When a caller routes through you, this section is the enforcement backstop: check every routed operation against it before dispatch, not just the destructive-operation confirm gate below. - -When invoked, you: -1. Parse the incoming workflow request (operation type, parameters, context overrides) -2. Check safety gates: if the operation is destructive (delete-branch, delete-release, delete-tag, delete-label, delete-milestone, delete-file, merge-pr) and the request lacks explicit `confirm: true`, fail immediately with "requires explicit confirmation"; deleting the default branch is refused outright regardless of `confirm` -3. Route to the appropriate domain skill: `gitea-issues`, `gitea-labels-milestones`, `gitea-prs`, `gitea-branches`, `gitea-files`, `gitea-releases` -4. Manage session context: resolve and carry forward `owner`/`repo` and any cached number-space resolutions, passing them explicitly to each skill -5. Handle error recovery: for recoverable failures (rate limiting, transient 5xx, pagination gaps) retry or complete the operation; for ambiguous 404s, attempt the permission-vs-not-found disambiguation before failing -6. Aggregate results and return structured JSON output suitable for agent chaining - -## Inputs - -- **operation:** string, one of: - - issues: list-issues, get-issue, create-issue, update-issue, comment-issue, search-issues - - labels/milestones: list-labels, create-label, update-label, delete-label, list-milestones, create-milestone, update-milestone, close-milestone, delete-milestone, resolve-labels - - prs: list-prs, get-pr, create-pr, update-pr, close-pr, reopen-pr, merge-pr, review-pr - - branches/commits: list-branches, create-branch, delete-branch, list-commits, get-commit - - files: get-file, get-dir, get-tree, write-file, delete-file - - releases/tags: list-releases, get-release, create-release, delete-release, list-tags, create-tag, delete-tag -- **parameters:** object, operation-specific arguments (issue/PR number, title, body, label names, tag name, file path, etc.) -- **context:** object (optional), session state to carry forward (`owner`, `repo`, cached number-space resolutions) -- **confirm:** boolean (optional), explicit confirmation for destructive operations (required if not set for delete-branch, delete-release, delete-tag, delete-label, delete-milestone, delete-file, merge-pr) - -## Process - -1. Validate the request structure and check if `operation` is known -2. Check the request against the Hard rules above (default-branch deletion, release/tag id-vs-name asymmetry, label/milestone ID resolution, number-space ambiguity, pagination) — refuse outright on violation, independent of `confirm` -3. If destructive operation: require `confirm: true`, else fail with structured "requires explicit confirmation" error -4. Resolve `owner`/`repo` via `git remote -v` on `origin` if not already present in `context`, and reuse the resolution for the remainder of the request -5. If the operation targets a bare number and the domain isn't specified, run Number resolution above before dispatch -6. Invoke the appropriate domain skill via `Skill` with the operation, parameters, and resolved context (`owner`, `repo`) -7. Catch and handle Gitea errors: disambiguate 404s (not-found vs. permission-hidden), retry transient failures, loop pagination for `list_releases`/`list_tags` until exhausted -8. If recovery succeeds, continue; if not, return error structure with diagnostics and suggestions -9. Aggregate all outputs and return as structured JSON - -## Output - -```json -{ - "status": "success" | "error", - "operation": "", - "result": { - "output": "", - "context": { "owner": "...", "repo": "...", "resolved_number_type": "issue" | "pull" | null }, - "applied_config": { "confirm_required": true | false } - }, - "error": { - "message": "", - "code": "", - "recovery_attempted": true | false, - "suggestions": ["", ""] - } -} -``` diff --git a/plugins/gitea/apm.yml b/plugins/gitea/apm.yml new file mode 100644 index 0000000..56173b3 --- /dev/null +++ b/plugins/gitea/apm.yml @@ -0,0 +1,33 @@ +name: gitea +version: 1.3.3 +description: Skills for managing Gitea repositories — issues, pull requests, milestones, releases, and wikis. +author: + name: Defame1297 + email: defame1297@rkdr.net + url: https://git.dev.rkdr.net/Defame1297/ +license: MIT +keywords: + - gitea + - issues + - prs + - milestones + - releases + - branches + +# Constrains what .apm/ may contain: instructions, skill, hybrid, or prompts +type: hybrid + +targets: + - claude + - copilot + +# "auto" publishes the authoritative local source layout, or list explicit +# repo paths to define the complete publication set. +includes: auto + +dependencies: + apm: [] + mcp: [] +devDependencies: + apm: [] +scripts: {} diff --git a/plugins/gitea/plugin.json b/plugins/gitea/plugin.json index ccef22b..2ce281c 100644 --- a/plugins/gitea/plugin.json +++ b/plugins/gitea/plugin.json @@ -1,11 +1,10 @@ { - "agents": "agents/", "author": { "email": "defame1297@rkdr.net", - "name": "Defame1297" + "name": "Defame1297", + "url": "https://git.dev.rkdr.net/Defame1297/" }, "description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.", - "hooks": "hooks.json", "keywords": [ "gitea", "issues", @@ -15,10 +14,6 @@ "branches" ], "license": "MIT", - "mcpServers": ".mcp.json", "name": "gitea", - "skills": [ - "skills/" - ], "version": "1.3.3" } diff --git a/plugins/gitea/sources.md b/plugins/gitea/sources.md index 03f1b1b..3043d0d 100644 --- a/plugins/gitea/sources.md +++ b/plugins/gitea/sources.md @@ -5,7 +5,7 @@ - **URL:** https://gitea.com/gitea/gitea-mcp - **Research doc:** plugins/gitea/docs/research/docs/gitea/sources.md - **Description:** Official gitea-mcp repository (v1.3.0); operation/*.go source files documenting all 55 MCP tools, their parameters, and CLI flags — informs the orchestrator's operation index and its `delete_release`/`delete_tag` id-vs-name and pagination-default hard rules. -- **Contributing files:** agents/gitea-orchestrate.md, agents/gitea-orchestrate.agent.md +- **Contributing files:** .apm/agents/gitea-orchestrate.agent.md - **Status:** `extracted` ## gitea-mcp-slim-go @@ -13,7 +13,7 @@ - **URL:** https://gitea.com/gitea/gitea-mcp/raw/branch/main/operation/issue/slim.go, https://gitea.com/gitea/gitea-mcp/raw/branch/main/operation/pull/slim.go, https://gitea.com/gitea/gitea-mcp/raw/branch/main/operation/repo/slim.go - **Research doc:** plugins/gitea/docs/research/docs/gitea/sources.md - **Description:** Slim response shape structs from gitea-mcp source; defines the `is_pull` field the orchestrator's Number resolution routine checks to disambiguate issue vs. PR numbers. -- **Contributing files:** agents/gitea-orchestrate.md, agents/gitea-orchestrate.agent.md +- **Contributing files:** .apm/agents/gitea-orchestrate.agent.md - **Status:** `extracted` ## context7-websites-gitea @@ -21,7 +21,7 @@ - **URL:** context7:/websites/gitea - **Research doc:** plugins/gitea/docs/research/docs/gitea/sources.md - **Description:** Official Gitea docs mirror on Context7 — informs the default-branch protection hard rule and permission-errors-as-404 behavior the orchestrator surfaces via `not_found_or_forbidden`. -- **Contributing files:** agents/gitea-orchestrate.md, agents/gitea-orchestrate.agent.md +- **Contributing files:** .apm/agents/gitea-orchestrate.agent.md - **Status:** `extracted` ## context7-gitea-tea-cli @@ -29,5 +29,5 @@ - **URL:** context7:/git_gitea_com/gitea_tea - **Research doc:** plugins/gitea/docs/research/docs/gitea/sources.md - **Description:** Official `tea` CLI docs on Context7 — practitioner conventions for release/tag semver naming and merge strategy choices that inform the orchestrator's destructive-operation gating around `merge-pr` and `delete-release`/`delete-tag`. -- **Contributing files:** agents/gitea-orchestrate.md, agents/gitea-orchestrate.agent.md +- **Contributing files:** .apm/agents/gitea-orchestrate.agent.md - **Status:** `extracted` diff --git a/plugins/kyberforge/agents/apm-orchestrate.agent.md b/plugins/kyberforge/.apm/agents/apm-orchestrate.agent.md similarity index 91% rename from plugins/kyberforge/agents/apm-orchestrate.agent.md rename to plugins/kyberforge/.apm/agents/apm-orchestrate.agent.md index f500183..ae6d836 100644 --- a/plugins/kyberforge/agents/apm-orchestrate.agent.md +++ b/plugins/kyberforge/.apm/agents/apm-orchestrate.agent.md @@ -3,11 +3,8 @@ name: apm-orchestrate description: Orchestrates apm package/marketplace operations for other agents. Invoke when a caller needs a multi-step apm operation (scaffold a package, register it into a marketplace, compile/pack/publish, audit) coordinated across the apm-workflow skill with safety gates, session context, and structured results — especially fanning the same operation out across multiple packages in a monorepo. -tools: ["execute", "read"] - source_keys: - context7-microsoft-apm - --- You are the orchestrator for apm package/marketplace operations — a composable workflow dispatcher designed for other agents to invoke multi-step `apm` operations reliably, especially the same operation repeated across several packages in a monorepo-hybrid layout. Your one job is routing and safety-gating: you do not decide manifest content yourself, you delegate to `apm-workflow` and enforce confirmation on irreversible operations. @@ -53,11 +50,26 @@ When invoked, you: 2. Check the request against the Hard rules above (publish confirmation, marketplace-add direction, `type:` ordering, audit-vs-audit-ci, registries precondition) — refuse outright on violation, independent of `confirm` 3. If `operation` is `publish`: require `confirm: true`, dispatch `--dry-run -v` first regardless, surface that output, else fail with structured "requires explicit confirmation" error 4. Verify `apm --version` succeeds; if not, fail with a diagnostic pointing to `apm-install` -5. Invoke `apm-workflow` with the resolved action, `package_root`, and parameters +5. Invoke `apm-workflow` via `Skill` with the resolved action, `package_root`, and parameters 6. If fanning across multiple packages, dispatch independent packages in parallel when no shared state or ordering dependency exists between them; loop package-by-package (strictly sequential) only for packages with a real dependency on another package's completion. Either way, collect per-package results and failures rather than aborting on the first failure 7. Catch and handle apm errors: retry once for a dependency-not-yet-scaffolded failure after the caller confirms the dependency exists; otherwise return error structure with diagnostics 8. Aggregate all outputs and return as structured JSON ## Output -Returns structured JSON with operation status, result (output — or a list of per-package results when fanned out — plus resolved package-root/registry context), and optional error details with recovery suggestions. +```json +{ + "status": "success" | "error" | "partial", + "operation": "", + "result": { + "output": "", + "context": { "package_root": "...", "resolved_registry": "..." } + }, + "error": { + "message": "", + "code": "", + "recovery_attempted": true | false, + "suggestions": ["", ""] + } +} +``` diff --git a/plugins/kyberforge/hooks.json b/plugins/kyberforge/.apm/hooks/hooks.json similarity index 100% rename from plugins/kyberforge/hooks.json rename to plugins/kyberforge/.apm/hooks/hooks.json diff --git a/plugins/kyberforge/skills/agent-audit/README.md b/plugins/kyberforge/.apm/skills/agent-audit/README.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/README.md rename to plugins/kyberforge/.apm/skills/agent-audit/README.md diff --git a/plugins/kyberforge/skills/agent-audit/SKILL.md b/plugins/kyberforge/.apm/skills/agent-audit/SKILL.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/SKILL.md rename to plugins/kyberforge/.apm/skills/agent-audit/SKILL.md diff --git a/plugins/kyberforge/skills/agent-audit/assets/vale/.vale.ini b/plugins/kyberforge/.apm/skills/agent-audit/assets/vale/.vale.ini similarity index 100% rename from plugins/kyberforge/skills/agent-audit/assets/vale/.vale.ini rename to plugins/kyberforge/.apm/skills/agent-audit/assets/vale/.vale.ini diff --git a/plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/DescriptionOpener.yml b/plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/DescriptionOpener.yml similarity index 100% rename from plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/DescriptionOpener.yml rename to plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/DescriptionOpener.yml diff --git a/plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/PaddingPhrase.yml b/plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/PaddingPhrase.yml similarity index 100% rename from plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/PaddingPhrase.yml rename to plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/PaddingPhrase.yml diff --git a/plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/SentenceOpenerThereIs.yml b/plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/SentenceOpenerThereIs.yml similarity index 100% rename from plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/SentenceOpenerThereIs.yml rename to plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/SentenceOpenerThereIs.yml diff --git a/plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/VagueWording.yml b/plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/VagueWording.yml similarity index 100% rename from plugins/kyberforge/skills/agent-audit/assets/vale/styles/Kyberforge/VagueWording.yml rename to plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/Kyberforge/VagueWording.yml diff --git a/plugins/kyberforge/skills/agent-audit/assets/vale/styles/KyberforgeCopilot/ProactivePhrase.yml b/plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/KyberforgeCopilot/ProactivePhrase.yml similarity index 100% rename from plugins/kyberforge/skills/agent-audit/assets/vale/styles/KyberforgeCopilot/ProactivePhrase.yml rename to plugins/kyberforge/.apm/skills/agent-audit/assets/vale/styles/KyberforgeCopilot/ProactivePhrase.yml diff --git a/plugins/kyberforge/skills/agent-audit/references/README.md b/plugins/kyberforge/.apm/skills/agent-audit/references/README.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/references/README.md rename to plugins/kyberforge/.apm/skills/agent-audit/references/README.md diff --git a/plugins/kyberforge/skills/agent-audit/references/description-quality.md b/plugins/kyberforge/.apm/skills/agent-audit/references/description-quality.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/references/description-quality.md rename to plugins/kyberforge/.apm/skills/agent-audit/references/description-quality.md diff --git a/plugins/kyberforge/skills/agent-audit/references/field-inventory.md b/plugins/kyberforge/.apm/skills/agent-audit/references/field-inventory.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/references/field-inventory.md rename to plugins/kyberforge/.apm/skills/agent-audit/references/field-inventory.md diff --git a/plugins/kyberforge/skills/agent-audit/references/sources.md b/plugins/kyberforge/.apm/skills/agent-audit/references/sources.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/references/sources.md rename to plugins/kyberforge/.apm/skills/agent-audit/references/sources.md diff --git a/plugins/kyberforge/skills/agent-audit/scripts/README.md b/plugins/kyberforge/.apm/skills/agent-audit/scripts/README.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/scripts/README.md rename to plugins/kyberforge/.apm/skills/agent-audit/scripts/README.md diff --git a/plugins/kyberforge/skills/agent-audit/scripts/vale-wrap.sh b/plugins/kyberforge/.apm/skills/agent-audit/scripts/vale-wrap.sh similarity index 100% rename from plugins/kyberforge/skills/agent-audit/scripts/vale-wrap.sh rename to plugins/kyberforge/.apm/skills/agent-audit/scripts/vale-wrap.sh diff --git a/plugins/kyberforge/skills/agent-audit/scripts/validate-provenance.sh b/plugins/kyberforge/.apm/skills/agent-audit/scripts/validate-provenance.sh similarity index 100% rename from plugins/kyberforge/skills/agent-audit/scripts/validate-provenance.sh rename to plugins/kyberforge/.apm/skills/agent-audit/scripts/validate-provenance.sh diff --git a/plugins/kyberforge/skills/agent-audit/scripts/validate.sh b/plugins/kyberforge/.apm/skills/agent-audit/scripts/validate.sh similarity index 100% rename from plugins/kyberforge/skills/agent-audit/scripts/validate.sh rename to plugins/kyberforge/.apm/skills/agent-audit/scripts/validate.sh diff --git a/plugins/kyberforge/skills/agent-audit/tests/README.md b/plugins/kyberforge/.apm/skills/agent-audit/tests/README.md similarity index 100% rename from plugins/kyberforge/skills/agent-audit/tests/README.md rename to plugins/kyberforge/.apm/skills/agent-audit/tests/README.md diff --git a/plugins/kyberforge/skills/agent-audit/tests/validate-provenance.bats b/plugins/kyberforge/.apm/skills/agent-audit/tests/validate-provenance.bats similarity index 99% rename from plugins/kyberforge/skills/agent-audit/tests/validate-provenance.bats rename to plugins/kyberforge/.apm/skills/agent-audit/tests/validate-provenance.bats index dc02567..d14635c 100644 --- a/plugins/kyberforge/skills/agent-audit/tests/validate-provenance.bats +++ b/plugins/kyberforge/.apm/skills/agent-audit/tests/validate-provenance.bats @@ -1,7 +1,7 @@ #!/usr/bin/env bats setup() { - REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" + REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" diff --git a/plugins/kyberforge/skills/agent-audit/tests/validate.bats b/plugins/kyberforge/.apm/skills/agent-audit/tests/validate.bats similarity index 99% rename from plugins/kyberforge/skills/agent-audit/tests/validate.bats rename to plugins/kyberforge/.apm/skills/agent-audit/tests/validate.bats index 9463338..f01993c 100644 --- a/plugins/kyberforge/skills/agent-audit/tests/validate.bats +++ b/plugins/kyberforge/.apm/skills/agent-audit/tests/validate.bats @@ -1,7 +1,7 @@ #!/usr/bin/env bats setup() { - REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" + REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" diff --git a/plugins/kyberforge/skills/agent-author/README.md b/plugins/kyberforge/.apm/skills/agent-author/README.md similarity index 95% rename from plugins/kyberforge/skills/agent-author/README.md rename to plugins/kyberforge/.apm/skills/agent-author/README.md index f21bfb0..76fa208 100644 --- a/plugins/kyberforge/skills/agent-author/README.md +++ b/plugins/kyberforge/.apm/skills/agent-author/README.md @@ -36,7 +36,7 @@ bash scripts/new-agent.sh security-reviewer ~ | `references/scripts.md` | Conventions for new-agent.sh and any future scripts: contract, template variables, file placement, error messages | | `references/sources.md` | Research provenance — sources that informed this skill | | `assets/templates/claude-code.md` | Annotated Claude Code agent definition template (project/user scope) | -| `assets/templates/copilot.agent.md` | Annotated Copilot CLI agent definition template (project/user scope) | +| `assets/templates/copilot.agent.md.template` | Annotated Copilot CLI agent definition template (project/user scope) | | `assets/templates/apm-agent.md` | Annotated vendor-neutral APM agent definition template (plugin/APM scope) | | `tests/new-agent.bats` | bats tests for `scripts/new-agent.sh` | | `assets/README.md` | Directory meta-documentation for assets/ | diff --git a/plugins/kyberforge/skills/agent-author/SKILL.md b/plugins/kyberforge/.apm/skills/agent-author/SKILL.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/SKILL.md rename to plugins/kyberforge/.apm/skills/agent-author/SKILL.md diff --git a/plugins/kyberforge/skills/agent-author/assets/README.md b/plugins/kyberforge/.apm/skills/agent-author/assets/README.md similarity index 69% rename from plugins/kyberforge/skills/agent-author/assets/README.md rename to plugins/kyberforge/.apm/skills/agent-author/assets/README.md index 5791841..fe53c1b 100644 --- a/plugins/kyberforge/skills/agent-author/assets/README.md +++ b/plugins/kyberforge/.apm/skills/agent-author/assets/README.md @@ -5,5 +5,5 @@ Annotated agent definition templates copied by `scripts/new-agent.sh` when scaffolding a new agent. - **`claude-code.md`** — Claude Code agent definition template (project/user scope). Includes all supported frontmatter fields (required and optional) with inline guidance comments and `FILL IN:` placeholders. -- **`copilot.agent.md`** — Copilot CLI agent definition template (CLI format, project/user scope). Excludes cloud/IDE-only fields (`target`, `user-invocable`, `disable-model-invocation`, `mcp-servers`) and Claude Code-only fields. Uses Copilot tool aliases (`execute`, `read`, `edit`, `search`, `agent`, `web`). +- **`copilot.agent.md.template`** — Copilot CLI agent definition template (CLI format, project/user scope). Excludes cloud/IDE-only fields (`target`, `user-invocable`, `disable-model-invocation`, `mcp-servers`) and Claude Code-only fields. Uses Copilot tool aliases (`execute`, `read`, `edit`, `search`, `agent`, `web`). - **`apm-agent.md`** — Vendor-neutral APM agent definition template (plugin/APM scope). Only `name`, `description`, optional `model`, and optional `source_keys` (provenance metadata, not a runtime field) in frontmatter — no `tools` and no Claude-only fields, since `apm compile` copies frontmatter verbatim to both the Claude Code and Copilot CLI targets with no per-target integrator (ADR-0016). diff --git a/plugins/kyberforge/skills/agent-author/assets/templates/apm-agent.md b/plugins/kyberforge/.apm/skills/agent-author/assets/templates/apm-agent.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/assets/templates/apm-agent.md rename to plugins/kyberforge/.apm/skills/agent-author/assets/templates/apm-agent.md diff --git a/plugins/kyberforge/skills/agent-author/assets/templates/claude-code.md b/plugins/kyberforge/.apm/skills/agent-author/assets/templates/claude-code.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/assets/templates/claude-code.md rename to plugins/kyberforge/.apm/skills/agent-author/assets/templates/claude-code.md diff --git a/plugins/kyberforge/skills/agent-author/assets/templates/copilot.agent.md b/plugins/kyberforge/.apm/skills/agent-author/assets/templates/copilot.agent.md.template similarity index 100% rename from plugins/kyberforge/skills/agent-author/assets/templates/copilot.agent.md rename to plugins/kyberforge/.apm/skills/agent-author/assets/templates/copilot.agent.md.template diff --git a/plugins/kyberforge/skills/agent-author/references/README.md b/plugins/kyberforge/.apm/skills/agent-author/references/README.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/references/README.md rename to plugins/kyberforge/.apm/skills/agent-author/references/README.md diff --git a/plugins/kyberforge/skills/agent-author/references/deployment-modes.md b/plugins/kyberforge/.apm/skills/agent-author/references/deployment-modes.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/references/deployment-modes.md rename to plugins/kyberforge/.apm/skills/agent-author/references/deployment-modes.md diff --git a/plugins/kyberforge/skills/agent-author/references/scripts.md b/plugins/kyberforge/.apm/skills/agent-author/references/scripts.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/references/scripts.md rename to plugins/kyberforge/.apm/skills/agent-author/references/scripts.md diff --git a/plugins/kyberforge/skills/agent-author/references/sources.md b/plugins/kyberforge/.apm/skills/agent-author/references/sources.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/references/sources.md rename to plugins/kyberforge/.apm/skills/agent-author/references/sources.md diff --git a/plugins/kyberforge/skills/agent-author/scripts/README.md b/plugins/kyberforge/.apm/skills/agent-author/scripts/README.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/scripts/README.md rename to plugins/kyberforge/.apm/skills/agent-author/scripts/README.md diff --git a/plugins/kyberforge/skills/agent-author/scripts/new-agent.sh b/plugins/kyberforge/.apm/skills/agent-author/scripts/new-agent.sh similarity index 99% rename from plugins/kyberforge/skills/agent-author/scripts/new-agent.sh rename to plugins/kyberforge/.apm/skills/agent-author/scripts/new-agent.sh index 262479d..c771dd1 100755 --- a/plugins/kyberforge/skills/agent-author/scripts/new-agent.sh +++ b/plugins/kyberforge/.apm/skills/agent-author/scripts/new-agent.sh @@ -227,7 +227,7 @@ else if [[ -f "$CP_FILE" ]]; then echo "Skipping '$CP_FILE' — already exists." >&2 else - sed "s/AGENT_NAME/$AGENT_NAME/g" "$TEMPLATES_DIR/copilot.agent.md" > "$CP_FILE" + sed "s/AGENT_NAME/$AGENT_NAME/g" "$TEMPLATES_DIR/copilot.agent.md.template" > "$CP_FILE" echo "Created: $CP_FILE" >&2 created_any=true fi diff --git a/plugins/kyberforge/skills/agent-author/tests/README.md b/plugins/kyberforge/.apm/skills/agent-author/tests/README.md similarity index 100% rename from plugins/kyberforge/skills/agent-author/tests/README.md rename to plugins/kyberforge/.apm/skills/agent-author/tests/README.md diff --git a/plugins/kyberforge/skills/agent-author/tests/new-agent.bats b/plugins/kyberforge/.apm/skills/agent-author/tests/new-agent.bats similarity index 99% rename from plugins/kyberforge/skills/agent-author/tests/new-agent.bats rename to plugins/kyberforge/.apm/skills/agent-author/tests/new-agent.bats index 23d585d..a7c6182 100644 --- a/plugins/kyberforge/skills/agent-author/tests/new-agent.bats +++ b/plugins/kyberforge/.apm/skills/agent-author/tests/new-agent.bats @@ -1,7 +1,7 @@ #!/usr/bin/env bats setup() { - REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../" && pwd)" + REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" diff --git a/plugins/kyberforge/skills/apm-install/README.md b/plugins/kyberforge/.apm/skills/apm-install/README.md similarity index 100% rename from plugins/kyberforge/skills/apm-install/README.md rename to plugins/kyberforge/.apm/skills/apm-install/README.md diff --git a/plugins/kyberforge/skills/apm-install/SKILL.md b/plugins/kyberforge/.apm/skills/apm-install/SKILL.md similarity index 86% rename from plugins/kyberforge/skills/apm-install/SKILL.md rename to plugins/kyberforge/.apm/skills/apm-install/SKILL.md index 4c8f07f..abb520a 100644 --- a/plugins/kyberforge/skills/apm-install/SKILL.md +++ b/plugins/kyberforge/.apm/skills/apm-install/SKILL.md @@ -19,6 +19,7 @@ metadata: - apm does not execute agents itself — it only installs and manages the runtimes that do. "Install apm" and "install a runtime apm manages" are two separate steps; don't conflate them or skip the second when the user actually wants a working agent CLI, not just the package manager. - The air-gapped/enterprise mirror path needs `GITHUB_URL` and `VERSION` set together against a downloaded `install.sh` — it does not work through the piped one-liner form. - `pip install apm-cli` requires Python 3.10+; the quick-install script has no such prerequisite. Prefer the quick-install script unless the environment is pip-first. +- On a Debian/externally-managed Python environment (PEP 668), `pip install apm-cli` fails immediately with `error: externally-managed-environment`. Fall back to `pipx install apm-cli` — same PyPI package, but pipx creates an isolated venv and correctly exposes the `apm` binary on `PATH`. - Installing the Copilot CLI runtime through `apm runtime setup copilot` requires Node.js v22+ and npm v10+ already present — apm does not install Node/npm for you. ## Install apm @@ -34,6 +35,7 @@ Escape hatches — combine as needed: - Custom install directory: set `APM_INSTALL_DIR` on the piped script's command, e.g. `curl -sSL https://aka.ms/apm-unix | APM_INSTALL_DIR=$HOME/.local/bin sh`. - Air-gapped / GitHub Enterprise mirror: download `install.sh` first, then run it with `GITHUB_URL` and `VERSION` set, e.g. `GITHUB_URL=https://github.corp.com VERSION=v1.2.3 sh install.sh`. - pip (Python 3.10+ environments): `pip install apm-cli`. +- pipx (externally-managed/PEP 668 environments where plain `pip install` fails, e.g. Debian): `pipx install apm-cli`. - Manual: download the platform archive from the GitHub releases page, extract, place the binary on `PATH`. Verify with `apm --version`. diff --git a/plugins/kyberforge/skills/apm-install/references/sources.md b/plugins/kyberforge/.apm/skills/apm-install/references/sources.md similarity index 100% rename from plugins/kyberforge/skills/apm-install/references/sources.md rename to plugins/kyberforge/.apm/skills/apm-install/references/sources.md diff --git a/plugins/kyberforge/skills/apm-workflow/README.md b/plugins/kyberforge/.apm/skills/apm-workflow/README.md similarity index 100% rename from plugins/kyberforge/skills/apm-workflow/README.md rename to plugins/kyberforge/.apm/skills/apm-workflow/README.md diff --git a/plugins/kyberforge/skills/apm-workflow/SKILL.md b/plugins/kyberforge/.apm/skills/apm-workflow/SKILL.md similarity index 79% rename from plugins/kyberforge/skills/apm-workflow/SKILL.md rename to plugins/kyberforge/.apm/skills/apm-workflow/SKILL.md index 8e41917..15270fe 100644 --- a/plugins/kyberforge/skills/apm-workflow/SKILL.md +++ b/plugins/kyberforge/.apm/skills/apm-workflow/SKILL.md @@ -22,8 +22,8 @@ metadata: ## Gotchas - `apm.yml`'s `type:` field (`instructions`, `skill`, `hybrid`, `prompts`) constrains what `.apm/` may contain — set it before scaffolding content, not after. Changing it later doesn't retroactively validate what's already on disk. -- `includes: auto` publishes the authoritative local layout as-is. Anything narrower needs an explicit repo-path list — don't assume `auto` means "scoped down to what's relevant." -- `apm marketplace add` (registering a marketplace as a *consumer*, pointing at someone else's catalog) and `apm marketplace package add` (registering a local package *into* a marketplace you're building) are opposite directions of the same command family — don't conflate them. +- `includes: auto` publishes the authoritative local layout as-is. Anything narrower needs an explicit repo-path list — don't assume `auto` means "scoped down to what's relevant." Note: `auto` still excludes generic root-level passthrough files (README.md, docs/, sources.md, config files) from the `apm pack` distribution bundle — see `references/compile.md`. +- `apm marketplace add` (registering a marketplace as a *consumer*, pointing at someone else's catalog) and `apm marketplace package add` (registering a package by remote reference — `owner/repo`, host URL, or full URL — into a marketplace you're building) are opposite directions of the same command family — don't conflate them. `package add` does NOT accept local paths; a local package is registered by hand-editing `apm.yml`'s `marketplace.packages[]` directly — see `references/marketplace.md`. - MCP server secrets (headers, env vars) inside `apm.yml` must use `${VAR}` indirection, never literal values, so they're resolved at install/runtime and never committed to the manifest. - `apm experimental enable registries` must run before any `registry.*` config takes effect. Declaring a `registries:` block or running `apm config set registry.*` without it silently does nothing — no error, no warning. - Plain `apm audit` and `apm audit --ci` check different things: plain `apm audit` scans deployed files for hidden Unicode only; `--ci` additionally runs lockfile-consistency checks, install-replay drift detection, and org policy checks. A clean plain `apm audit` is not a CI-equivalent pass. @@ -34,7 +34,7 @@ metadata: |---|---|---| | `/apm-workflow configure` | Author/edit `apm.yml`; scaffold a new package (`apm plugin init`) | `references/configure.md` | | `/apm-workflow install` | Resolve/fetch dependencies declared in `apm.yml` (`apm install`, `apm install [PACKAGE_REF]`) | `references/install.md` | -| `/apm-workflow marketplace` | Build a marketplace, register packages into it, or register a marketplace as a consumer (`apm marketplace init/check/package add/add`) | `references/marketplace.md` | +| `/apm-workflow marketplace` | Build a marketplace, register packages into it (local: hand-edit `apm.yml`; remote: `apm marketplace package add`), or register a marketplace as a consumer (`apm marketplace init/check/package add/add`) | `references/marketplace.md` | | `/apm-workflow compile` | Generate per-target output, bundle, or publish (`apm compile`, `apm pack`, `apm publish`) | `references/compile.md` | | `/apm-workflow audit` | Validate integrity/policy or wire a CI gate (`apm audit`, `apm audit --ci`) | `references/audit.md` | diff --git a/plugins/kyberforge/skills/apm-workflow/references/audit.md b/plugins/kyberforge/.apm/skills/apm-workflow/references/audit.md similarity index 100% rename from plugins/kyberforge/skills/apm-workflow/references/audit.md rename to plugins/kyberforge/.apm/skills/apm-workflow/references/audit.md diff --git a/plugins/kyberforge/.apm/skills/apm-workflow/references/compile.md b/plugins/kyberforge/.apm/skills/apm-workflow/references/compile.md new file mode 100644 index 0000000..d8c5b5b --- /dev/null +++ b/plugins/kyberforge/.apm/skills/apm-workflow/references/compile.md @@ -0,0 +1,65 @@ +--- +topic: compile +source_keys: + - context7-microsoft-apm +--- + +## Compile + +```bash +apm compile # fails on skill/agent-only packages — see Gotchas +apm compile --clean # zero-write sanity check; use for skill/agent-only packages +apm compile --clean --dry-run # pure preview, no writes +``` + +Compiles `.apm/instructions/` + `.apm/agents/*.agent.md` primitives into consumer-side context files (AGENTS.md/CLAUDE.md CONTEXT files) for the deployment target, per the `compilation:` block in `apm.yml`. This is the consumer/deployment side — it is NOT the producer of `plugin.json`/`marketplace.json`; that's `apm pack`'s job (below). Run `apm compile` after any change to `.apm/instructions/`/`.apm/agents/` content or to `compilation:`/`targets:` in `apm.yml`. + +## Pack + +```bash +apm pack --dry-run # resolve and print; do not write +apm pack --offline # cached refs only +apm pack --include-prerelease # allow pre-release tags +apm pack -v # per-entry resolution detail +apm pack --marketplace=claude --json # JSON output for CI pipelines +``` + +Bundles a producer package into a distributable artifact. Default to `--dry-run -v` first when packing something for the first time or after a dependency change — resolution errors surface before anything is written. + +### `.mcp.json` merge mechanics + +`apm pack` reads a package's root-level `.mcp.json` directly — no `dependencies.mcp` entry in `apm.yml` is needed for simple passthrough. Behavior is content-aware: + +- An empty `.mcp.json` (`{"mcpServers": {}}`) is NOT included in the packed output at all. +- A populated one gets its `mcpServers` content merged directly into the compiled `plugin.json`, but only for the `claude` target. +- The `copilot` target's compiled `plugin.json` OMITS `mcpServers` entirely — it isn't part of Copilot's plugin manifest schema. + +`dependencies.mcp` in `apm.yml` is for a different purpose — declaring a remote MCP-server package as an APM dependency — not local `.mcp.json` passthrough. + +### `includes: auto` and the packed bundle + +`includes: auto` does NOT sweep generic root-level passthrough files (README.md, docs/, sources.md, config files, etc.) into the `apm pack` distribution bundle (`build/-`) — only `.apm/` primitives, the compiled `plugin.json`, and the content-aware `.mcp.json` handling above make it into that bundle. This does not affect Claude Code's own plugin loading, which reads a plugin's working directory directly via its `source:` path in `marketplace.json`, not the `apm pack` bundle — but it matters for anyone relying on the packed bundle for distribution via `apm install`. + +Run `apm audit` after compile/pack, not before — audit scans deployed/compiled output, not the source `apm.yml` manifest; see `references/audit.md`. + +## Publish + +```bash +apm publish --package acme/my-skill --dry-run -v +apm publish --package acme/my-skill +``` + +Publishes a producer package (root containing `apm.yml`, `.apm/`, and optionally a `registries:` block) to a registry. Always dry-run with `-v` first — publishing is not trivially reversible once a version tag is claimed on a registry. + +## Run + +```bash +apm run