Vendor apm-generated .claude/ and .opencode/ into git#52
Merged
Conversation
Member
Author
Hickey AnalysisFinding: The When a developer runs Simplification: Split into composed recipes:
No other complecting found. The rest (gitignore edits, committing vendored dirs) is plain data, no abstractions or state braiding. |
Instead of gitignoring apm output, commit it so nix builds can reference vendored skills/commands without a runtime apm dependency. Split justfile: `apm` (single target for dev), `apm-vendor` (both targets for updating vendored files), `apm-sync` (CI freshness check).
Member
Author
|
| Step | Status | Duration | Verification |
|---|---|---|---|
| sync | ✓ | 9s | git fetch succeeded |
| research | ✓ | 45s | Understood gitignore, apm.yml, justfile structure |
| hickey | ✓ | 35s | Split apm recipe to avoid complecting dev/vendor |
| branch | ✓ | 52s | Draft PR #52 opened, hickey comment posted |
| implement | ✓ | 72s | Gitignore updated, justfile split, .opencode/ generated |
| docs | ✓ | 6s | No docs to update |
| police | ✓ | 42s | All 3 passes clean |
| fmt | ✓ | 5s | No format command configured |
| commit | ✓ | 21s | d17f1fb pushed |
| test | ✓ | 7s | No relevant tests (no nix changes) |
| ci | ✓ | 42s | vira ci -b passed, 3 VM tests built |
| update-pr | ✓ | 10s | Marked ready for review |
| Total | 5m 46s |
Optimization suggestions
- CI dominated wall-clock time at ~42s (but ran in background, overlapping with update-pr). For re-runs, use
--from ci-only. - Research was fast because the talk-mode conversation already explored the design space thoroughly. Pre-discussion before
/dois effective. - Branch step included PR creation — the gh CLI round-trip added ~20s. Unavoidable but worth noting.
Workflow completed at 2026-04-07T00:15:51Z.
Collapses .claude/ and .opencode/ diffs in GitHub PR reviews.
GitHub Actions workflow regenerates vendored .claude/ and .opencode/ then fails if git status shows drift. Pre-cleans settings.json to work around apm's additive hook duplication bug (#561). Also: `just agent::run` no longer runs apm install first since vendored files are committed.
project.md is now maintained directly in the vendored .claude/rules/ tree — no need for the .apm/instructions indirection.
Faster — no nix eval/build overhead, just pip install + run.
The previous check ran apm on top of the existing tree, so files no longer produced by apm (like project.md) went undetected.
Consistent tooling — no nix dependency for apm. Pinned to v0.8.10 because v0.8.11 drops commands/rules deployment.
The lock file only records the last target's deployed files, making it useless for multi-target workflows. Pin commits in apm.yml instead and rely on vendored output as the source of truth. See: microsoft/apm#529
srid
added a commit
that referenced
this pull request
Apr 7, 2026
**Drops both the `juspay/skills` flake input and `flake-parts`**, simplifying the flake to plain nix outputs. Skills are now sourced from the vendored `.opencode/skills/` directory populated by apm. The `apm.yml` references `juspay/skills` as a whole-repo package — apm discovers all 9 skills automatically and vendors them alongside `srid/agency`'s skills into `.claude/` and `.opencode/`. The oneclick nix build reads directly from the vendored tree. *Lock file is deleted between target runs to work around apm's content hash mismatch across targets ([#529](microsoft/apm#529 > Completes the migration started in #52.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Commits apm-generated config trees to the repo instead of gitignoring them, following the pattern established in juspay/kolu. This makes the vendored files available as plain nix store paths — no runtime apm dependency needed for oneclick builds.
The
.claude/directory was already being generated byapm install -t claude; now.opencode/joins it via-t opencode. Both are committed and kept in sync by anapm-syncCI recipe that regenerates from the lock file and fails if the working tree is dirty.The justfile splits the old
apmrecipe intoapm(single-target, for dev sessions) andapm-vendor(both targets, for updating vendored files). This avoids complecting "prep my agent session" with "regenerate all vendored output".