agentsclimarketplace

Geno sync

Skill web-abin/OpenGeno/skills/geno-sync

GNME (pronounced Gen-Me) is a lightweight framework that replaces static, task-based specifications with living Module Genomes. It is designed specifically for developers using AI assistants (Cursor, Claude) to build complex, evolving systems.

Install
npx -y skills add web-abin/OpenGeno --skill geno-sync

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Detect and reconcile drift between OpenGeno feature docs (under feat-tree/) and the source code they describe. Walks every L3 doc, reports drift since last_synced_commit, and walks the user through fixing it. Use after vibe-coding sessions, after merging branches, after manual edits that bypassed the workflow, or as a periodic audit. Auto-detects the tree's language from CLAUDE.md.

SKILL.md

8.2 KB, as published. Nobody here has run it

/geno-sync

Detect and (optionally) reconcile drift between L3 feature docs and the code they describe. This is the second of OpenGeno's two skills; run it on demand when you suspect the tree is out of sync with code.

Pre-flight

test -d feat-tree || { echo "no tree — run /geno-init first"; exit 1; }

If no tree exists, abort with the message above.

Detect the tree's language

Before printing anything to the user, determine which language the tree is written in. Check, in order:

  1. .feat-tree.json for a language field (added by future versions)
  2. CLAUDE.md for the OpenGeno injection block — look for "文档语言:中文" or "Doc language: English" inside the <!-- BEGIN OpenGeno --> / <!-- END OpenGeno --> markers
  3. The actual content of feat-tree/index.md — if its prose is in Chinese, use Chinese; otherwise English

Use that language for all output of this skill — drift summary, clarifying questions, reconciliation prompts, any new doc prose written during reconciliation.

Workflow

Step 1 — Run the drift checker

The script lives next to this skill (or in the global install location):

  • ${CLAUDE_PLUGIN_ROOT}/scripts/drift-check.sh
  • ~/.claude/skills/geno-init/scripts/drift-check.sh
  • .agents/skills/geno-init/scripts/drift-check.sh

(Note: scripts live under geno-init/scripts/ because that skill is where they were installed; geno-sync reads them as siblings.)

Run it:

bash <path-to>/drift-check.sh

It prints lines like:

DRIFT  feat-tree/auth/login.md  lib/features/auth/login_page.dart  4
STUB   feat-tree/onboarding/welcome.md
BROKEN feat-tree/legacy/old.md  lib/legacy/old_screen.dart
STALE_SHA feat-tree/profile/edit.md  abc123...

Step 2 — Categorize

Bucket the results into:

  • red (DRIFT lines with > 1 commit, especially with non-trivial diff)
  • yellow (DRIFT with 1 commit, or commits that look like refactor/format/comment-only)
  • gray (STUB — never synced; awaiting first fill)
  • broken (BROKEN — referenced code file no longer exists)
  • stale (STALE_SHA — recorded SHA is no longer in git history, e.g. after a force-push)

For each DRIFT, briefly inspect the commits to make the red/yellow call:

git log --oneline <last_synced_commit>..HEAD -- <code-path>

Heuristic:

  • "fix", "format", "lint", "rename", "move" alone → likely yellow
  • "add", "remove", "change", "feat", "refactor" → likely red
  • Anything that touches > 30 lines → red, regardless of message

Step 3 — Report

Print the report in the tree's language. Structure:

OpenGeno drift report — <project> @ <current-sha>

In sync (n)
Yellow / suspicious (n)
  - <doc-path> — <reason>

Red / likely drift (n)
  - <doc-path>
      <code-path>: <commit-count> commits — <commit subjects, top 3>

Never-synced stubs (n)
  - <doc-path>

Broken code links (n)
  - <doc-path> -> <missing-code-path>

Stale SHA (n)
  - <doc-path> — last_synced_commit not in repo history

Orphan code candidates (suggested, may be intentional)
  - <code-path>

The orphan-code section is optional — surface only if the user explicitly asks or the count is small (< 10). Otherwise it's noise.

Step 4 — Ask the user how to proceed

Use AskUserQuestion (in the tree's language) with options:

  1. Walk through reds together (recommended)
  2. Walk through everything (reds + yellows + grays + broken)
  3. Just produce the report, don't change anything
  4. Mark a specific doc(s) as in-sync without content edits

Default to option 1.

Step 5 — Reconcile each chosen doc

For each doc the user wants to reconcile:

  1. Read the L3 doc fresh.
  2. Read the diff for each code: path:
    git diff <last_synced_commit>..HEAD -- <code-path>
    
  3. Walk the doc section by section, asking which sections need updating based on the diff. Edit only those sections. Stay in the tree's language.
  4. Cross-link maintenance: if you removed/added an outgoing cross-feature link, update the linked-to doc's "Cross-feature links" (or 「跨功能链路」for Chinese trees) section.
  5. Bump frontmatter:
    • last_synced_commit: → current git rev-parse HEAD
    • last_reviewed: → today

Critical: do not bump last_synced_commit if you only spot-checked one section. Either reconcile fully or leave the SHA stale and let the next run flag it again. Bumping SHAs without verification is the one failure mode that destroys this whole system.

Step 6 — Handle other categories

  • Stubs (gray): empty-SHA docs from /geno-init. Don't conflate with drift. Their meaning depends on gen_mode in .feat-tree.json:

    • gen_mode: "stub" (or missing) — section bodies are placeholders (TODO / 待补充). The reconciliation action is fill: write the prose from a code read, then bump SHA only after the user confirms the result is right.
    • gen_mode: "full" — section bodies already contain best-effort prose generated at init from a code read, but unverified. The reconciliation action is review: read the doc against the current code, correct anything wrong, then bump SHA. Don't bump just because prose exists; the SHA is the verification signal, not the content.

    Surface both in the report; only act on them when the user asks ("fill stubs" or "review full-mode docs" can be its own pass).

  • Broken (broken): for each, ask: was the file moved, renamed, or deleted?

    • Moved/renamed → edit the doc's code: to the new path.
    • Deleted → ask if the feature was removed entirely. If yes, archive the doc (move to feat-tree/_archived/<original-path>.md and remove its row from the L2 index). If no, the user has a problem to solve in the tree's structure.
  • Stale SHA (stale): the recorded SHA isn't in history (likely force-push or branch rebase). Treat the doc as never-synced (gray) and reconcile from current HEAD.

Step 7 — Final report

Print, in the tree's language:

  • Reconciled (n) docs
  • Skipped (n) docs (left as drift for next time)
  • Stubs remaining (n) — informational
  • Final state — should be all-green if user reconciled all reds

When to run

  • After any session that changed code without going through the documented workflow (vibe coding, manual edits, merge from another branch)
  • Periodically (weekly is a reasonable cadence on active projects)
  • Before relying on doc content for a non-trivial task
  • When the Stop hook reports drift

Distinction from the Stop hook

The Stop hook (installed by /geno-init) runs drift-check.sh non-interactively at session-end and either warns or blocks. It doesn't fix anything.

/geno-sync is the interactive counterpart: it runs the same checker but walks the user through reconciliation.

Anti-patterns

Don'tWhy
Bulk-bump all SHAs to current HEAD without per-doc reviewDefeats the whole purpose; produces a "fresh" tree that doesn't actually match code
Treat all yellows as noiseRefactors sometimes change behavior subtly; spend 30 seconds on each
Auto-edit doc content based on git diff aloneRisk of describing "what changed" rather than "current behavior" — needs judgment, not diff translation
Conflate stubs with driftStubs are unfinished bootstrapping, not drift. Different action
Bump a gen_mode: "full" doc's SHA without re-reading the codeFull-mode prose is unverified by definition; bumping the SHA without verification destroys the entire drift system
Switch language mid-reconcileThe tree's language is fixed at init time; respect it
Run sync at session-end of every changeThat's what the Stop hook is for. /geno-sync is for catching what other people / sessions did

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.