pstack-sync
vessia is a vendored, renamed fork of upstream pstack at
~/nixos-config/modules/programs/agents/vessia/. Read its README.md first.
The script scripts/pstack-sync (beside this file) does a three-way merge:
base is the rev in upstream.conf, ours is the vendored tree, and theirs is
the new upstream revision. Base and theirs pass through scripts/transform.pl,
so the rename never shows up as a local change.
Your job is the part the script cannot do: understand both intents, keep Michael's customizations, take upstream's improvements, and surface only the calls that need his judgement.
Steps
- Work in
~/nixos-configon master, per itsCLAUDE.md. Run every command from the repo root. Leave unrelated local edits alone. - Preview:
<skill-dir>/scripts/pstack-sync --dry-run. Add--to <rev>to target a revision other than upstreammain. If the report has no upstream commits in scope, report that vessia is current and stop. - Read the upstream intent. For each commit in the report, read
git -C ~/.cache/pstack-sync/plugins.git show <sha> -- pstack cursor-team-kit. Read the local intent withpstack-sync --local-diffandgit log -p -- modules/programs/agents/vessia/<path>for each conflicting or customized path. - Apply: run the script without
--dry-run. It refuses to run with uncommitted changes under the vendored tree. It writes merges in place, leaves<<<<<<< local/>>>>>>> upstreammarkers on conflicts, and movesrevinupstream.conf.git diffandgit checkout -- <vendored tree>undo the whole sync. - Resolve each conflict by intent, not by side. Keep the local customization and fold in the upstream change when they are compatible. When they are not, keep the local version and add the item to the judgement list.
- Work the Needs judgement section:
- New upstream skill: it is vendored by default. Read it and say what it
does. Recommend
drop <name>if it duplicates a personal skill or conflicts with Michael's instructions. - New team-kit skill: not vendored. Recommend it only when it clearly fits.
- Upstream removed a file you customized, or changed one you deleted: decide from the upstream commit whether the local change still has a home. If it does not, list it.
- Possible rename or move: if a removed and an added file are the same content, port the local edits from the old path to the new one.
- Name mismatch: add a rule to
transform.pl, then rerun from a clean tree. - License change: always list it.
- Unavailable tool:
upstream.conflists tools Michael does not have asunavailablelines, and the script flags new upstream lines that match. Rewrite the line to a tool he has when the swap is obvious (for example, a Grok model slug to the GPT Sol default). Otherwise list it. When a skill only exists for an unavailable tool, recommenddrop <name>. If you find another tool he lacks, add anunavailableline for it.
- New upstream skill: it is vendored by default. Read it and say what it
does. Recommend
- Check what the merge brought in against Michael's instructions
(
modules/programs/agents/shared/instructions.md): new Cursor-only paths or tools, new model or provider defaults, or behavior that contradicts a rule. Adapt the vendored file when the fix is mechanical and obvious; list the rest. Look for newpstack/potetospellings that the rename missed, and for URLs that the rename broke. Model defaults are a local rule: Opus (claude-opus-5-5-high) and GPT Sol (gpt-6.1-sol-xhigh) only. Michael has no Grok and does not usemaxeffort. Rewrite any new upstream model slug, family list, or budget to fit that rule. Other local rules: PRs are GitHub PRs throughgh, and stacks use GitHub's stacked PRs throughgh stack(no Graphite or Origin). Review bots are generic AI reviewers (no Bugbot), and some repos have none. Parallel work runs as new agent threads that the current tool starts its own way (no Cursor cloud agents orenvironment: "cloud"); do not name a tool. - Verify:
pstack-sync --scanlists every remaining match for theunavailabletools. Compare it with the scan before the sync.grep -rnE '^(<<<<<<<|=======|>>>>>>>)' modules/programs/agents/vessiaprints nothing.- Every
skills/*/SKILL.mdname:matches its directory. - The Nix checks in
~/nixos-config/CLAUDE.mdpass for the root flake andhosts/flomac/flake.nix.
- Commit only the vendored tree and any files you adapted, as
chore(vessia): sync upstream pstack to <short rev>. List the upstream commits in the body.
Report
- The upstream commit range and a short summary of what changed.
- The local customizations that survived, and how you merged each conflict.
- The judgement items, each with your recommendation and the alternative. Leave each item unchanged until Michael answers.