[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CADK2HW4WH360MRZMEP3GQ":3,"skill-same:01M6CADK2HW4WH360MRZMEP3GQ":86},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":6,"ownerHtmlUrl":64,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":65,"install":66,"resources":79},"01M6CADK2HW4WH360MRZMEP3GQ","opencode-gated-pr-bundle-sync",null,"Use when updating Aaron's portable OpenCode gated PR workflow bundle in hermes-configs, including safe push\u002Fexport from the source Hermes profile and pull\u002Fimport on another Hermes instance.","adnichols\u002Fai-configs","adnichols","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F493746?v=4","01M6C33VRY9WF6XWYPT1AFA7JJ","Aaron Nichols","01M6C33VWTNKGRM92E9G643V4W",5,"MIT","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fprofiles\u002Fnerd\u002Fskills\u002Fproductivity\u002Fopencode-gated-pr-bundle-sync\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"opencode gated pr bundle sync","opencode","sync","pr","safe push","pr workflow","export","use","profile","hermes agent","hermes","coding","safe","push","pull","linear","http","workflow","github","2026-11-10 10:12:30",false,"---\nname: opencode-gated-pr-bundle-sync\ndescription: Use when updating Aaron's portable OpenCode gated PR workflow bundle in hermes-configs, including safe push\u002Fexport from the source Hermes profile and pull\u002Fimport on another Hermes instance.\nversion: 1.0.0\nauthor: Hermes Agent\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [hermes, bundle, sync, opencode, github, workflow]\n    related_skills: [hermes-workflow-bundle, hermes-opencode-linear-build, opencode-http-coding-workflow, github-pr-workflow]\n---\n\n# OpenCode Gated PR Bundle Sync\n\n## Overview\n\nThis skill keeps Aaron's portable OpenCode gated PR workflow bundle current across Hermes instances. The canonical bundle lives in the private `hermes-configs` repository and packages only portable Hermes-layer workflow artifacts: selected skills, helper scripts, policy, prompt templates, sanitized config guidance, and a manifest.\n\nThe bundle must be updated in two directions:\n\n- **Push\u002Fexport:** source Hermes profile changes are rebuilt into the repo bundle, verified, committed, and pushed when the human has asked for a sync.\n- **Pull\u002Fimport:** another Hermes instance pulls the repo, installs the bundled skills into its target Hermes home\u002Fprofile, and starts a fresh session.\n\nDo not rely on memory alone for this workflow. The build script and bundled skills are the source of truth that travels between machines.\n\n## Canonical Paths\n\nAaron's current canonical repository path:\n\n```text\n~\u002Fcode\u002Fhermes-configs\n```\n\nBundle root inside the repo:\n\n```text\nopencode-gated-pr-workflow\u002F\n```\n\nImportant files:\n\n```text\nopencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\nopencode-gated-pr-workflow\u002Fbundle\u002FREADME.md\nopencode-gated-pr-workflow\u002Fbundle\u002FSPEC.md\nopencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\nopencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py\n```\n\nSession-specific migration details for the OpenCode-owned Linear build conversion are in `references\u002Fopencode-linear-build-migration-2026-05.md`.\n\nDefault source Hermes profile on Aaron's machines:\n\n```text\n~\u002F.hermes\u002Fprofiles\u002Fnerd\n```\n\nThe build script also honors `HERMES_HOME` and accepts `--hermes-home` for non-default profiles.\n\nKnown receiving-instance profile shapes:\n\n- Aaron's Mac\u002Fsource profile usually uses `~\u002F.hermes\u002Fprofiles\u002Fnerd`.\n- `dever` currently installs bundled skills into the base Hermes home, `~\u002F.hermes\u002Fskills\u002F...`; it does not have `~\u002F.hermes\u002Fprofiles\u002Fnerd`.\n\nPrefer `python3` on Linux\u002Fdever because `python` may not be installed.\n\n## When to Use\n\nUse this skill when the user asks to:\n\n- update the OpenCode gated PR workflow bundle\n- add a skill to the bundle\n- sync the bundle from one machine to another\n- push a refreshed bundle from the current Hermes profile\n- pull\u002Finstall the current bundle into another Hermes profile\n- verify whether a receiving Hermes instance has current bundled workflow skills\n\nDo not use this for general repo coding workflow execution. Prefer maintained Pi\u002FCodex workflows. Use `hermes-opencode-linear-build` only as a compatibility path after verifying its independently maintained OpenCode command and both helpers; `opencode-http-coding-workflow` is a compatibility wrapper\u002FHTTP helper.\n\n## Push \u002F Export Flow\n\nUse this on the machine\u002Fprofile where the current workflow skills were edited.\n\n### 1. Check repository state\n\nWork from the repo root:\n\n```bash\ngit status --short\n```\n\nIf the repo has unrelated local changes, stop and preserve them. Do not overwrite or clean them casually.\n\nCheck branch and remote:\n\n```bash\ngit branch --show-current\n```\n\n```bash\ngit remote -v\n```\n\nThe normal branch is `main`, and the normal remote is `origin` pointing at `adnichols\u002Fhermes-configs`.\n\n### 2. Fast-forward before changing the bundle\n\nFetch first:\n\n```bash\ngit fetch origin\n```\n\nIf HTTPS GitHub auth fails under a Hermes\u002Fgateway process with an error like `could not read Username ... Device not configured`, retry through Aaron's login shell so `gh` credentials and the normal home directory are visible:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git fetch origin'\n```\n\nIf the working tree is clean, fast-forward only:\n\n```bash\ngit pull --ff-only\n```\n\nUse the same login-shell wrapper for pull\u002Fpush if needed:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git pull --ff-only'\n```\n\nIf `git pull --ff-only` refuses because local commits diverged, stop and inspect. Do not rebase, merge, or force push without explicit human approval.\n\n### 3. Update source skills first\n\nFor skill content changes, identify the canonical source before editing. Most bundled skills are sourced from the active Hermes profile, usually:\n\n```text\n~\u002F.hermes\u002Fprofiles\u002Fnerd\u002Fskills\u002F\u003Ccategory>\u002F\u003Cskill-name>\u002FSKILL.md\n```\n\nSome externally-authored\u002Fshared skills may live outside the profile tree first. The compatibility OpenCode Linear build skill may have an external source at `~\u002F.agents\u002Fskills\u002Fhermes-opencode-linear-build\u002FSKILL.md`, but it is not the default coding workflow and remains usable only when its required OpenCode components pass preflight.\n\nWhen a user points out a canonical source path, copy or reconcile that source into the profile skill before rebuilding, then verify with `cmp -s \u003Csource> \u003Cprofile-skill>` or an equivalent checksum. Do not overwrite the canonical source with an older profile copy.\n\nIf adding a new skill that should travel with the bundle, update `SELECTED_SKILLS` in:\n\n```text\nopencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\n```\n\nUse category-relative paths such as:\n\n```python\n\"productivity\u002Fopencode-gated-pr-bundle-sync\",\n```\n\nGenerated files under `opencode-gated-pr-workflow\u002Fbundle\u002F` should not be hand-edited except for emergency inspection. Change source skills or the build script, then rebuild.\n\n### 4. Rebuild the bundle\n\nFrom the repo root:\n\n```bash\npython opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\n```\n\nFor an explicit source profile:\n\n```bash\npython opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py --hermes-home ~\u002F.hermes\u002Fprofiles\u002Fnerd\n```\n\nThe build moves the prior generated `bundle\u002F` aside as `bundle.previous-\u003Ctimestamp>\u002F`, rewrites `bundle\u002F`, regenerates `manifest.json`, and creates a `.tar.gz`. Previous bundles and tarballs are ignored by git.\n\n### 5. Verify generated artifacts\n\nCompile generated Python scripts:\n\n```bash\npython -m py_compile opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Fworkflow_gate_check.py\n```\n\nInspect the diff:\n\n```bash\ngit diff --stat\n```\n\nInspect tracked changes:\n\n```bash\ngit diff -- opencode-gated-pr-workflow\u002Fbundle\u002FREADME.md opencode-gated-pr-workflow\u002Fbundle\u002FSPEC.md opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\n```\n\nConfirm the new skill exists in the generated bundle if one was added:\n\n```bash\ntest -f opencode-gated-pr-workflow\u002Fbundle\u002Fskills\u002Fproductivity\u002Fopencode-gated-pr-bundle-sync\u002FSKILL.md\n```\n\nCheck the manifest mentions it:\n\n```bash\ngrep -n \"opencode-gated-pr-bundle-sync\" opencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\n```\n\nBefore committing, scan the diff for accidental secrets or host-only config. The bundle should never include `.env`, OAuth tokens, `auth.json`, sessions, channel IDs, raw gateway config, credential caches, or private request dumps.\n\n### 6. Commit and push when requested\n\nIf the user asked to push\u002Fsync the bundle, stage the changed tracked files:\n\n```bash\ngit add opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py opencode-gated-pr-workflow\u002Fbundle README.md\n```\n\nIf `README.md` was not changed, omit it or use a focused path list from `git status --short`.\n\nCommit with a clear message:\n\n```bash\ngit commit -m \"chore: update OpenCode workflow bundle\"\n```\n\nPush:\n\n```bash\ngit push origin main\n```\n\nIf HTTPS GitHub auth fails from Hermes\u002Fgateway, use Aaron's login shell wrapper:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git push origin main'\n```\n\nIf the user only asked to prepare the bundle and did not ask to push, stop after verification and report the local diff\u002Fcommit state.\n\n## Pull \u002F Import Flow\n\nUse this on a receiving Hermes instance that should adopt the current bundle.\n\n### 1. Get the repo\n\nIf `~\u002Fcode\u002Fhermes-configs` already exists, work there:\n\n```bash\ngit status --short\n```\n\nFetch and fast-forward only:\n\n```bash\ngit fetch origin\n```\n\n```bash\ngit pull --ff-only\n```\n\nIf HTTPS GitHub auth fails under Hermes\u002Fgateway, use the login-shell wrapper:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git fetch origin'\n```\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git pull --ff-only'\n```\n\nIf the repo is missing, clone it into the normal code directory:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fhermes-configs.git ~\u002Fcode\u002Fhermes-configs\n```\n\n### 2. Inspect the received bundle\n\nFrom the repo root:\n\n```bash\npython3 -m py_compile opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Fworkflow_gate_check.py\n```\n\nUse `python3`; on dever `python` may not exist.\n\nCheck the manifest exists:\n\n```bash\ntest -f opencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\n```\n\nOptionally inspect selected skills:\n\n```bash\ngrep -n \"selected_skills\" opencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\n```\n\n### 3. Install into the target Hermes home\u002Fprofile\n\nFor the base Hermes home, used by `dever`:\n\n```bash\npython3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes\n```\n\nFor Aaron's `nerd` profile on macOS\u002Fsource machines:\n\n```bash\npython3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes\u002Fprofiles\u002Fnerd\n```\n\nThe installer skips existing skills by default. To replace existing target skills with bundled versions, use `--overwrite`; it backs up each replaced skill directory as `\u003Cskill>.pre-bundle-backup` and refuses to proceed if that backup already exists.\n\n```bash\npython3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes --overwrite\n```\n\nIf backup conflicts exist and the user has explicitly asked to sync\u002Fupdate the receiving instance, preserve the existing backups by timestamp-renaming them, then rerun install. Do not delete them.\n\n```bash\nssh dever 'bash -lc '\\''ts=$(date -u +%Y%m%dT%H%M%SZ); for d in ~\u002F.hermes\u002Fskills\u002F*\u002F*.pre-bundle-backup; do if [ -e \"$d\" ]; then echo \"preserve $d -> $d.$ts\"; mv \"$d\" \"$d.$ts\"; fi; done'\\'''\nssh dever 'cd ~\u002Fcode\u002Fhermes-configs && python3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes --overwrite'\n```\n\nIf the user did not authorize overwrite\u002Fsync, stop at the conflict and ask.\n\n### 4. Verify the installed bundle\n\nOn the receiving instance, verify the repo commit, clean state, script syntax, and skill path resolution:\n\n```bash\nssh dever 'cd ~\u002Fcode\u002Fhermes-configs && git rev-parse --short HEAD && git status --short'\nssh dever 'python3 -m py_compile ~\u002Fcode\u002Fhermes-configs\u002Fopencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py ~\u002Fcode\u002Fhermes-configs\u002Fopencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Fworkflow_gate_check.py ~\u002F.hermes\u002Fskills\u002Fproductivity\u002Fopencode-http-coding-workflow\u002Fscripts\u002Fopencode_http.py'\nssh dever 'test -f ~\u002F.hermes\u002Fskills\u002Fproductivity\u002Fhermes-opencode-linear-build\u002FSKILL.md && test -f ~\u002F.hermes\u002Fskills\u002Fproductivity\u002Fopencode-http-coding-workflow\u002Fscripts\u002Fopencode_http.py && echo bundled-opencode-linear-build-installed'\n```\n\nIf a bundled workflow skill contains command examples, make them path-portable through `OPENCODE_WORKFLOW_SKILL_DIR` rather than hardcoding `~\u002F.hermes\u002Fprofiles\u002Fnerd`; otherwise receiving hosts like dever will install correctly but the examples will point at nonexistent paths.\n\n### 5. Start fresh and verify skill loading\n\nAfter installing skills, start a fresh Hermes session or reset the current one so the skill index refreshes. Load the workflow skill explicitly:\n\n```text\n\u002Fskill hermes-opencode-linear-build\n\u002Fskill opencode-http-coding-workflow\n```\n\nFor future bundle maintenance, also load:\n\n```text\n\u002Fskill opencode-gated-pr-bundle-sync\n```\n\n## Bidirectional Sync Pattern\n\nWhen a receiving machine improves a bundled skill, that machine temporarily becomes the source:\n\n1. Update the source skill in its active Hermes profile.\n2. Add the skill to `SELECTED_SKILLS` if it is new to the bundle.\n3. Run the push\u002Fexport flow.\n4. Commit and push to `origin\u002Fmain` when authorized.\n5. Other machines run the pull\u002Fimport flow.\n\nAvoid editing `bundle\u002Fskills\u002F...` directly because those edits are overwritten on the next rebuild. If you discover a needed fix while inspecting bundled output, apply the fix to the source profile skill or build script, then rebuild.\n\n## Common Pitfalls\n\n1. **Forgetting to add a new skill to `SELECTED_SKILLS`.** The local skill can exist and still not travel. Always check `bundle\u002Fmanifest.json` after rebuild.\n\n2. **Installing without `--overwrite` and thinking the target updated.** The installer skips existing skills by default. Use `--overwrite` when the target profile must adopt the bundled version.\n\n3. **Editing generated bundle files.** Rebuild will overwrite direct edits under `bundle\u002F`. Change source skills or `build_bundle.py` instead.\n\n4. **Using merges for config sync.** This repo should usually fast-forward cleanly. If it does not, stop and inspect rather than creating merge commits casually.\n\n5. **Leaking local runtime state.** Never add `.env`, `auth.json`, session transcripts, credential caches, gateway routing, or machine-specific config dumps.\n\n6. **GitHub HTTPS auth unavailable in gateway context.** If `git fetch`, `git pull`, or `git push` fails with `could not read Username ... Device not configured`, retry with `HOME=\u002FUsers\u002Fanichols zsh -lc '\u003Cgit command>'` so the process can see Aaron's normal `gh` credential setup.\n\n7. **Assuming source-profile paths work everywhere.** The source Mac may use `~\u002F.hermes\u002Fprofiles\u002Fnerd`, while dever uses base `~\u002F.hermes`. Bundle docs and helper examples should use `OPENCODE_WORKFLOW_SKILL_DIR` with a fallback from the nerd profile to base `~\u002F.hermes\u002Fskills\u002F...`.\n\n8. **Using `python` on dever.** Use `python3` for install\u002Fverify commands on dever; `python` can be absent.\n\n9. **Reinstall blocked by existing `.pre-bundle-backup`.** Preserve old backups with a timestamp suffix before rerunning `--overwrite`; never delete them as a cleanup shortcut.\n\n## Verification Checklist\n\n- [ ] Repo is on intended branch and remote.\n- [ ] Pull\u002Fimport used `git pull --ff-only`, not a casual merge.\n- [ ] Push\u002Fexport rebuilt via `build\u002Fbuild_bundle.py`.\n- [ ] New bundled skills are listed in `SELECTED_SKILLS` and present under `bundle\u002Fskills\u002F...`.\n- [ ] `manifest.json` was regenerated and mentions the expected files.\n- [ ] Generated Python scripts compile.\n- [ ] Diff was inspected for secrets and host-specific runtime state.\n- [ ] Commit\u002Fpush happened only when requested or clearly within the user's sync instruction.\n- [ ] GitHub HTTPS auth worked, or failed commands were retried through `HOME=\u002FUsers\u002Fanichols zsh -lc '\u003Cgit command>'`.\n- [ ] Receiving instance installed into the intended Hermes home\u002Fprofile and started a fresh session.\n","# OpenCode Gated PR Bundle Sync\n\n## Overview\n\nThis skill keeps Aaron's portable OpenCode gated PR workflow bundle current across Hermes instances. The canonical bundle lives in the private `hermes-configs` repository and packages only portable Hermes-layer workflow artifacts: selected skills, helper scripts, policy, prompt templates, sanitized config guidance, and a manifest.\n\nThe bundle must be updated in two directions:\n\n- **Push\u002Fexport:** source Hermes profile changes are rebuilt into the repo bundle, verified, committed, and pushed when the human has asked for a sync.\n- **Pull\u002Fimport:** another Hermes instance pulls the repo, installs the bundled skills into its target Hermes home\u002Fprofile, and starts a fresh session.\n\nDo not rely on memory alone for this workflow. The build script and bundled skills are the source of truth that travels between machines.\n\n## Canonical Paths\n\nAaron's current canonical repository path:\n\n```text\n~\u002Fcode\u002Fhermes-configs\n```\n\nBundle root inside the repo:\n\n```text\nopencode-gated-pr-workflow\u002F\n```\n\nImportant files:\n\n```text\nopencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\nopencode-gated-pr-workflow\u002Fbundle\u002FREADME.md\nopencode-gated-pr-workflow\u002Fbundle\u002FSPEC.md\nopencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\nopencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py\n```\n\nSession-specific migration details for the OpenCode-owned Linear build conversion are in `references\u002Fopencode-linear-build-migration-2026-05.md`.\n\nDefault source Hermes profile on Aaron's machines:\n\n```text\n~\u002F.hermes\u002Fprofiles\u002Fnerd\n```\n\nThe build script also honors `HERMES_HOME` and accepts `--hermes-home` for non-default profiles.\n\nKnown receiving-instance profile shapes:\n\n- Aaron's Mac\u002Fsource profile usually uses `~\u002F.hermes\u002Fprofiles\u002Fnerd`.\n- `dever` currently installs bundled skills into the base Hermes home, `~\u002F.hermes\u002Fskills\u002F...`; it does not have `~\u002F.hermes\u002Fprofiles\u002Fnerd`.\n\nPrefer `python3` on Linux\u002Fdever because `python` may not be installed.\n\n## When to Use\n\nUse this skill when the user asks to:\n\n- update the OpenCode gated PR workflow bundle\n- add a skill to the bundle\n- sync the bundle from one machine to another\n- push a refreshed bundle from the current Hermes profile\n- pull\u002Finstall the current bundle into another Hermes profile\n- verify whether a receiving Hermes instance has current bundled workflow skills\n\nDo not use this for general repo coding workflow execution. Prefer maintained Pi\u002FCodex workflows. Use `hermes-opencode-linear-build` only as a compatibility path after verifying its independently maintained OpenCode command and both helpers; `opencode-http-coding-workflow` is a compatibility wrapper\u002FHTTP helper.\n\n## Push \u002F Export Flow\n\nUse this on the machine\u002Fprofile where the current workflow skills were edited.\n\n### 1. Check repository state\n\nWork from the repo root:\n\n```bash\ngit status --short\n```\n\nIf the repo has unrelated local changes, stop and preserve them. Do not overwrite or clean them casually.\n\nCheck branch and remote:\n\n```bash\ngit branch --show-current\n```\n\n```bash\ngit remote -v\n```\n\nThe normal branch is `main`, and the normal remote is `origin` pointing at `adnichols\u002Fhermes-configs`.\n\n### 2. Fast-forward before changing the bundle\n\nFetch first:\n\n```bash\ngit fetch origin\n```\n\nIf HTTPS GitHub auth fails under a Hermes\u002Fgateway process with an error like `could not read Username ... Device not configured`, retry through Aaron's login shell so `gh` credentials and the normal home directory are visible:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git fetch origin'\n```\n\nIf the working tree is clean, fast-forward only:\n\n```bash\ngit pull --ff-only\n```\n\nUse the same login-shell wrapper for pull\u002Fpush if needed:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git pull --ff-only'\n```\n\nIf `git pull --ff-only` refuses because local commits diverged, stop and inspect. Do not rebase, merge, or force push without explicit human approval.\n\n### 3. Update source skills first\n\nFor skill content changes, identify the canonical source before editing. Most bundled skills are sourced from the active Hermes profile, usually:\n\n```text\n~\u002F.hermes\u002Fprofiles\u002Fnerd\u002Fskills\u002F\u003Ccategory>\u002F\u003Cskill-name>\u002FSKILL.md\n```\n\nSome externally-authored\u002Fshared skills may live outside the profile tree first. The compatibility OpenCode Linear build skill may have an external source at `~\u002F.agents\u002Fskills\u002Fhermes-opencode-linear-build\u002FSKILL.md`, but it is not the default coding workflow and remains usable only when its required OpenCode components pass preflight.\n\nWhen a user points out a canonical source path, copy or reconcile that source into the profile skill before rebuilding, then verify with `cmp -s \u003Csource> \u003Cprofile-skill>` or an equivalent checksum. Do not overwrite the canonical source with an older profile copy.\n\nIf adding a new skill that should travel with the bundle, update `SELECTED_SKILLS` in:\n\n```text\nopencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\n```\n\nUse category-relative paths such as:\n\n```python\n\"productivity\u002Fopencode-gated-pr-bundle-sync\",\n```\n\nGenerated files under `opencode-gated-pr-workflow\u002Fbundle\u002F` should not be hand-edited except for emergency inspection. Change source skills or the build script, then rebuild.\n\n### 4. Rebuild the bundle\n\nFrom the repo root:\n\n```bash\npython opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\n```\n\nFor an explicit source profile:\n\n```bash\npython opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py --hermes-home ~\u002F.hermes\u002Fprofiles\u002Fnerd\n```\n\nThe build moves the prior generated `bundle\u002F` aside as `bundle.previous-\u003Ctimestamp>\u002F`, rewrites `bundle\u002F`, regenerates `manifest.json`, and creates a `.tar.gz`. Previous bundles and tarballs are ignored by git.\n\n### 5. Verify generated artifacts\n\nCompile generated Python scripts:\n\n```bash\npython -m py_compile opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Fworkflow_gate_check.py\n```\n\nInspect the diff:\n\n```bash\ngit diff --stat\n```\n\nInspect tracked changes:\n\n```bash\ngit diff -- opencode-gated-pr-workflow\u002Fbundle\u002FREADME.md opencode-gated-pr-workflow\u002Fbundle\u002FSPEC.md opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py\n```\n\nConfirm the new skill exists in the generated bundle if one was added:\n\n```bash\ntest -f opencode-gated-pr-workflow\u002Fbundle\u002Fskills\u002Fproductivity\u002Fopencode-gated-pr-bundle-sync\u002FSKILL.md\n```\n\nCheck the manifest mentions it:\n\n```bash\ngrep -n \"opencode-gated-pr-bundle-sync\" opencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\n```\n\nBefore committing, scan the diff for accidental secrets or host-only config. The bundle should never include `.env`, OAuth tokens, `auth.json`, sessions, channel IDs, raw gateway config, credential caches, or private request dumps.\n\n### 6. Commit and push when requested\n\nIf the user asked to push\u002Fsync the bundle, stage the changed tracked files:\n\n```bash\ngit add opencode-gated-pr-workflow\u002Fbuild\u002Fbuild_bundle.py opencode-gated-pr-workflow\u002Fbundle README.md\n```\n\nIf `README.md` was not changed, omit it or use a focused path list from `git status --short`.\n\nCommit with a clear message:\n\n```bash\ngit commit -m \"chore: update OpenCode workflow bundle\"\n```\n\nPush:\n\n```bash\ngit push origin main\n```\n\nIf HTTPS GitHub auth fails from Hermes\u002Fgateway, use Aaron's login shell wrapper:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git push origin main'\n```\n\nIf the user only asked to prepare the bundle and did not ask to push, stop after verification and report the local diff\u002Fcommit state.\n\n## Pull \u002F Import Flow\n\nUse this on a receiving Hermes instance that should adopt the current bundle.\n\n### 1. Get the repo\n\nIf `~\u002Fcode\u002Fhermes-configs` already exists, work there:\n\n```bash\ngit status --short\n```\n\nFetch and fast-forward only:\n\n```bash\ngit fetch origin\n```\n\n```bash\ngit pull --ff-only\n```\n\nIf HTTPS GitHub auth fails under Hermes\u002Fgateway, use the login-shell wrapper:\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git fetch origin'\n```\n\n```bash\nHOME=\u002FUsers\u002Fanichols zsh -lc 'git pull --ff-only'\n```\n\nIf the repo is missing, clone it into the normal code directory:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fhermes-configs.git ~\u002Fcode\u002Fhermes-configs\n```\n\n### 2. Inspect the received bundle\n\nFrom the repo root:\n\n```bash\npython3 -m py_compile opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Fworkflow_gate_check.py\n```\n\nUse `python3`; on dever `python` may not exist.\n\nCheck the manifest exists:\n\n```bash\ntest -f opencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\n```\n\nOptionally inspect selected skills:\n\n```bash\ngrep -n \"selected_skills\" opencode-gated-pr-workflow\u002Fbundle\u002Fmanifest.json\n```\n\n### 3. Install into the target Hermes home\u002Fprofile\n\nFor the base Hermes home, used by `dever`:\n\n```bash\npython3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes\n```\n\nFor Aaron's `nerd` profile on macOS\u002Fsource machines:\n\n```bash\npython3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes\u002Fprofiles\u002Fnerd\n```\n\nThe installer skips existing skills by default. To replace existing target skills with bundled versions, use `--overwrite`; it backs up each replaced skill directory as `\u003Cskill>.pre-bundle-backup` and refuses to proceed if that backup already exists.\n\n```bash\npython3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes --overwrite\n```\n\nIf backup conflicts exist and the user has explicitly asked to sync\u002Fupdate the receiving instance, preserve the existing backups by timestamp-renaming them, then rerun install. Do not delete them.\n\n```bash\nssh dever 'bash -lc '\\''ts=$(date -u +%Y%m%dT%H%M%SZ); for d in ~\u002F.hermes\u002Fskills\u002F*\u002F*.pre-bundle-backup; do if [ -e \"$d\" ]; then echo \"preserve $d -> $d.$ts\"; mv \"$d\" \"$d.$ts\"; fi; done'\\'''\nssh dever 'cd ~\u002Fcode\u002Fhermes-configs && python3 opencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py --target-hermes-home ~\u002F.hermes --overwrite'\n```\n\nIf the user did not authorize overwrite\u002Fsync, stop at the conflict and ask.\n\n### 4. Verify the installed bundle\n\nOn the receiving instance, verify the repo commit, clean state, script syntax, and skill path resolution:\n\n```bash\nssh dever 'cd ~\u002Fcode\u002Fhermes-configs && git rev-parse --short HEAD && git status --short'\nssh dever 'python3 -m py_compile ~\u002Fcode\u002Fhermes-configs\u002Fopencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Finstall_bundle.py ~\u002Fcode\u002Fhermes-configs\u002Fopencode-gated-pr-workflow\u002Fbundle\u002Fscripts\u002Fworkflow_gate_check.py ~\u002F.hermes\u002Fskills\u002Fproductivity\u002Fopencode-http-coding-workflow\u002Fscripts\u002Fopencode_http.py'\nssh dever 'test -f ~\u002F.hermes\u002Fskills\u002Fproductivity\u002Fhermes-opencode-linear-build\u002FSKILL.md && test -f ~\u002F.hermes\u002Fskills\u002Fproductivity\u002Fopencode-http-coding-workflow\u002Fscripts\u002Fopencode_http.py && echo bundled-opencode-linear-build-installed'\n```\n\nIf a bundled workflow skill contains command examples, make them path-portable through `OPENCODE_WORKFLOW_SKILL_DIR` rather than hardcoding `~\u002F.hermes\u002Fprofiles\u002Fnerd`; otherwise receiving hosts like dever will install correctly but the examples will point at nonexistent paths.\n\n### 5. Start fresh and verify skill loading\n\nAfter installing skills, start a fresh Hermes session or reset the current one so the skill index refreshes. Load the workflow skill explicitly:\n\n```text\n\u002Fskill hermes-opencode-linear-build\n\u002Fskill opencode-http-coding-workflow\n```\n\nFor future bundle maintenance, also load:\n\n```text\n\u002Fskill opencode-gated-pr-bundle-sync\n```\n\n## Bidirectional Sync Pattern\n\nWhen a receiving machine improves a bundled skill, that machine temporarily becomes the source:\n\n1. Update the source skill in its active Hermes profile.\n2. Add the skill to `SELECTED_SKILLS` if it is new to the bundle.\n3. Run the push\u002Fexport flow.\n4. Commit and push to `origin\u002Fmain` when authorized.\n5. Other machines run the pull\u002Fimport flow.\n\nAvoid editing `bundle\u002Fskills\u002F...` directly because those edits are overwritten on the next rebuild. If you discover a needed fix while inspecting bundled output, apply the fix to the source profile skill or build script, then rebuild.\n\n## Common Pitfalls\n\n1. **Forgetting to add a new skill to `SELECTED_SKILLS`.** The local skill can exist and still not travel. Always check `bundle\u002Fmanifest.json` after rebuild.\n\n2. **Installing without `--overwrite` and thinking the target updated.** The installer skips existing skills by default. Use `--overwrite` when the target profile must adopt the bundled version.\n\n3. **Editing generated bundle files.** Rebuild will overwrite direct edits under `bundle\u002F`. Change source skills or `build_bundle.py` instead.\n\n4. **Using merges for config sync.** This repo should usually fast-forward cleanly. If it does not, stop and inspect rather than creating merge commits casually.\n\n5. **Leaking local runtime state.** Never add `.env`, `auth.json`, session transcripts, credential caches, gateway routing, or machine-specific config dumps.\n\n6. **GitHub HTTPS auth unavailable in gateway context.** If `git fetch`, `git pull`, or `git push` fails with `could not read Username ... Device not configured`, retry with `HOME=\u002FUsers\u002Fanichols zsh -lc '\u003Cgit command>'` so the process can see Aaron's normal `gh` credential setup.\n\n7. **Assuming source-profile paths work everywhere.** The source Mac may use `~\u002F.hermes\u002Fprofiles\u002Fnerd`, while dever uses base `~\u002F.hermes`. Bundle docs and helper examples should use `OPENCODE_WORKFLOW_SKILL_DIR` with a fallback from the nerd profile to base `~\u002F.hermes\u002Fskills\u002F...`.\n\n8. **Using `python` on dever.** Use `python3` for install\u002Fverify commands on dever; `python` can be absent.\n\n9. **Reinstall blocked by existing `.pre-bundle-backup`.** Preserve old backups with a timestamp suffix before rerunning `--overwrite`; never delete them as a cleanup shortcut.\n\n## Verification Checklist\n\n- [ ] Repo is on intended branch and remote.\n- [ ] Pull\u002Fimport used `git pull --ff-only`, not a casual merge.\n- [ ] Push\u002Fexport rebuilt via `build\u002Fbuild_bundle.py`.\n- [ ] New bundled skills are listed in `SELECTED_SKILLS` and present under `bundle\u002Fskills\u002F...`.\n- [ ] `manifest.json` was regenerated and mentions the expected files.\n- [ ] Generated Python scripts compile.\n- [ ] Diff was inspected for secrets and host-specific runtime state.\n- [ ] Commit\u002Fpush happened only when requested or clearly within the user's sync instruction.\n- [ ] GitHub HTTPS auth worked, or failed commands were retried through `HOME=\u002FUsers\u002Fanichols zsh -lc '\u003Cgit command>'`.\n- [ ] Receiving instance installed into the intended Hermes home\u002Fprofile and started a fresh session.\n",{"name":5,"author":48,"license":15,"version":49,"metadata":50,"description":7},"Hermes Agent","1.0.0",{"hermes":51},{"tags":52,"related_skills":54},[34,53,26,25,42,41],"bundle",[55,56,57,58],"hermes-workflow-bundle","hermes-opencode-linear-build","opencode-http-coding-workflow","github-pr-workflow","main","64e2fc9afa7bb3da1138eb73399144d0e7e73e9d","_hermes\u002Fdefault\u002Fprofiles\u002Fnerd\u002Fskills\u002Fproductivity\u002Fopencode-gated-pr-bundle-sync",4,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs","https:\u002F\u002Fgithub.com\u002Fadnichols","2026-11-06 00:28:38",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add adnichols\u002Fai-configs --skill opencode-gated-pr-bundle-sync",{"tool":72,"command":73},"bunx","bunx skills add adnichols\u002Fai-configs --skill opencode-gated-pr-bundle-sync",{"tool":75,"command":76},"pnpm","pnpm dlx skills add adnichols\u002Fai-configs --skill opencode-gated-pr-bundle-sync","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fprofiles\u002Fnerd\u002Fskills\u002Fproductivity\u002Fopencode-gated-pr-bundle-sync\u002FSKILL.md",true,[80],{"path":81,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Fopencode-linear-build-migration-2026-05.md","REFERENCE","参考文档",2742,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fprofiles\u002Fnerd\u002Fskills\u002Fproductivity\u002Fopencode-gated-pr-bundle-sync\u002Freferences\u002Fopencode-linear-build-migration-2026-05.md",[87,106,135,160,171,187],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":43},"01M6CB7RN791P5RRRCJWWC7DAR","blocked-page-recovery","Use when a fetch fails: 403\u002F429, paywall, WAF, bot wall.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fweb\u002Fblocked-page-recovery\u002FSKILL.md",[],[94,95,96,97,98,31,99,33,34,100,101,102,103,104,105],"recovery","page","blocked page recovery","bot","fallback","fetch","Citations","waf","windows","research","linux","macos",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":121,"publishedAt":43},"01M6CB7NQY2VVYCQJ1QBXACQF4","writing-plans","Use when creating or updating executable software plans. Keep plans as local files unless the user explicitly asks to register them in Doct.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fwriting-plans\u002FSKILL.md",[112,115,116],{"categoryNo":113,"categoryName":114,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[122,123,124,125,41,126,127,128,129,130,131,132,31,133,33,34,134],"writing","writing plans","documentation","test","design","user","development","planning","files","implementation","html","ops","plan",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":150,"publishedAt":43},"01M6CB7JME246KZQHP73Z2STDF","test-driven-development","TDD: enforce RED-GREEN-REFACTOR, tests before code.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Ftest-driven-development\u002FSKILL.md",[141,144,147],{"categoryNo":142,"categoryName":143,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":148,"categoryName":149,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000037","律师与法务",[125,128,151,152,153,33,34,154,134,155,156,157,105,158,104,159,102],"test driven development","red-green-refactor","superpowers","quality","refactor","code","debugging","tdd","testing",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":167,"publishedAt":43},"01M6CB7FQ407KQTD4Z9VAWKY54","systematic-debugging","4-phase root cause debugging: understand bugs before fixing.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fsystematic-debugging\u002FSKILL.md",[166],{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},[157,168,128,153,33,34,169,134,170,102,125,104,105],"systematic debugging","troubleshooting","investigation",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":180,"publishedAt":43},"01M6CB7D57MK88HE5YPZHKH68Q","spike","Throwaway experiments to validate an idea before build.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fspike\u002FSKILL.md",[177],{"categoryNo":178,"categoryName":179,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[173,102,181,182,103,183,104,105,184,185,186,33,34,134,129],"validate","experiments","prototype","feasibility","sketch","experiment",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":197,"publishedAt":43},"01M6CB7APAQ37YE5YE1MAAFT42","simplify-code","Parallel 3-agent cleanup of recent code changes.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fsimplify-code\u002FSKILL.md",[193,194],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":195,"categoryName":196,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000030","开发工程师",[198,199,156,200,33,34,201,134,155,202,203,204,128,102,125,104,205,105],"simplify code","simplify","subagent","parallel","code-review","delegation","cleanup","review"]