Crosslink Guide

SkillDev tools

Use when working in any repo that has `.crosslink/` and the workflow involves issue tracking, sessions, locks, swarms, kickoff, or knowledge pages. Reference for the full crosslink CLI surface plus the harness footguns (auto-CHANGELOG entries on issue close, --no-changelog flag, label-based skip rules, session lifecycle). Trigger when the user mentions crosslink commands, when the crosslink-behavioral-guard hook fires asking for issue creation, or when a session needs to be started/ended/handed off.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Crosslink Guide skill

What this skill tells your AI

The instructions your AI receives, as published by openwpm/openwpm in .claude/skills/crosslink-guide/SKILL.md and read by ahel’s review.

Crosslink is a local-first issue tracker designed for AI-assisted development. Data lives in .crosslink/issues.db (SQLite); state syncs via the crosslink/hub git branch. Read this skill when the workflow involves any crosslink command, when the crosslink-behavioral-guard hook fires, or when starting/ending a session.

Hook awareness — the things that bite

These are not in the CLI --help output but matter constantly:

crosslink issue close auto-appends to CHANGELOG.md

Closing an issue triggers a hook that adds a one-line entry to the workspace's CHANGELOG.md under ### Changed (or ### Fixed for bug-labeled issues). For meta-work that shouldn't be in the release notes (skill edits, settings tweaks, CHANGELOG cleanup itself), this is pollution.

Fix: pass --no-changelog to skip:

crosslink issue close 643 --no-changelog

The recursive trap: if you close an issue without --no-changelog, then close a follow-up issue to clean up the entry, that close also auto-appends. Either use --no-changelog from the start, or remove the line directly via Edit rather than another crosslink close.

crosslink quick doesn't take --no-changelog

Only close triggers the auto-CHANGELOG hook. quick and create do not, so no --no-changelog flag exists on them.

Session must be started before session work <id> succeeds

crosslink session work 642
# Error: No active session. Use 'crosslink session start' first.

Always pair them:

crosslink session start && crosslink session work <id>

--work flag on quick is silently a no-op without an active session

crosslink quick "..." -p high -l bug
# WARN: --work specified but no active session

The issue gets created but isn't marked as the current focus. Same fix: session start first.

Labels matter for hook routing

Bug-labeled issues land under ### Fixed in CHANGELOG; everything else under ### Changed. The chore, docs, refactor labels currently do not exempt the entry from CHANGELOG (use --no-changelog).

Core workflow

# 1. Start session (see what the last session handed off)
crosslink session start

# 2. Create or pick an issue to work on
crosslink quick "Title" -p high -l bug                  # create + claim lock + start working
# OR
crosslink issue list -s open                            # see existing issues
crosslink session work <id>                             # pick one

# 3. Document as you work
crosslink issue comment <id> "Approach: ..." --kind plan
crosslink issue comment <id> "Chose X over Y because ..." --kind decision

# 4. End session with handoff notes
crosslink session end --notes "What's done, what's next, blockers"

Issue management

Creating

crosslink issue create "Title" -p medium                # basic
crosslink quick "Title" -p high -l bug                  # create + auto-claim lock + work
crosslink subissue <parent-id> "Child title"            # create under a parent

Querying

crosslink issue list                                    # open issues (default)
crosslink issue list -s all                             # include closed
crosslink issue list -l bug -p high                     # filter by label and priority
crosslink issue search "keyword"                        # full-text
crosslink issue show <id>                               # full details
crosslink issue tree                                    # hierarchy view
crosslink issue next                                    # suggest what to work on

Lifecycle

crosslink issue update <id> -t "new title" -p high      # update title/priority
crosslink issue close <id>                              # close + add to CHANGELOG
crosslink issue close <id> --no-changelog               # close + skip CHANGELOG
crosslink issue close-all                               # close all matching filters
crosslink issue reopen <id>                             # reopen if needed
crosslink issue delete <id> --force                     # permanent delete
crosslink issue tested <id>                             # mark tests run (resets reminder)

Comments — typed for audit trails

crosslink issue comment <id> "text" --kind plan         # what you intend to do
crosslink issue comment <id> "text" --kind decision     # why you chose this approach
crosslink issue comment <id> "text" --kind observation  # something you discovered
crosslink issue comment <id> "text" --kind blocker      # what's blocking progress
crosslink issue comment <id> "text" --kind resolution   # how a blocker was resolved
crosslink issue comment <id> "text" --kind result       # what was delivered

Labels and relations

crosslink issue label <id> bug                          # add label
crosslink issue unlabel <id> bug                        # remove label
crosslink issue block <id> <blocker-id>                 # mark dependency
crosslink issue unblock <id> <blocker-id>               # remove blocking
crosslink issue blocked                                 # show blocked
crosslink issue ready                                   # show unblocked
crosslink issue relate <id1> <id2>                      # link related
crosslink issue related <id>                            # list related

Interventions

For recording when you had to deviate from the planned approach:

crosslink issue intervene <id> "description" --trigger <type> --context "what you were doing"

Sessions

crosslink session start                                 # begin work, see last handoff
crosslink session work <id>                             # set current focus
crosslink session status                                # check what you're working on
crosslink session last-handoff                          # show previous session's notes
crosslink session action "did X"                        # breadcrumb before context compression
crosslink session end --notes "context for next session"

Always end with --notes. The next session reads them via session start — terse notes there save real reorientation time.

Locks

Crosslink uses optimistic locking on issues so multiple agents don't collide.

crosslink locks list                                    # active locks
crosslink locks check <id>                              # is this issue locked?
crosslink locks claim <id>                              # claim
crosslink locks release <id>                            # release
crosslink locks steal <id>                              # take a stale lock (be careful)

crosslink quick and crosslink session work auto-claim. crosslink issue close releases.

Time tracking

crosslink timer start <id>                              # start
crosslink timer stop                                    # stop current
crosslink timer show                                    # current status

Knowledge base

Shared markdown pages on the crosslink/knowledge branch:

crosslink knowledge add "page-slug" --body "content"
crosslink knowledge show <slug>
crosslink knowledge list
crosslink knowledge edit <slug> --body "new content"
crosslink knowledge remove <slug>
crosslink knowledge search "query"
crosslink knowledge sync                                # pull from remote
crosslink knowledge import <path>                       # bulk import markdown

Kickoff (agent launcher)

crosslink kickoff run <issue-id>                        # launch agent in worktree
crosslink kickoff launch                                # interactive pipeline wizard
crosslink kickoff status                                # check running
crosslink kickoff logs <id>
crosslink kickoff stop <id>
crosslink kickoff list                                  # all agents (worktrees/tmux/docker)
crosslink kickoff cleanup                               # remove completed/stale
crosslink kickoff graph                                 # branch topology

Design-driven workflow:

crosslink kickoff plan <design-doc>                     # gap analysis vs codebase
crosslink kickoff show-plan <slug>                      # display gap report
crosslink kickoff report <id>                           # spec validation report

Swarm (multi-agent coordination)

# Lifecycle
crosslink swarm init <design-doc>                       # init from design doc
crosslink swarm status                                  # agents, phases, progress
crosslink swarm resume                                  # reconstruct + show next
crosslink swarm list                                    # active + archived
crosslink swarm archive
crosslink swarm reset

# Phases
crosslink swarm launch                                  # launch all agents for a phase
crosslink swarm gate                                    # run test suite as gate
crosslink swarm checkpoint                              # record after phase done
crosslink swarm merge                                   # merge worktrees into one branch

# Planning
crosslink swarm plan                                    # multi-phase across budget windows
crosslink swarm plan-show
crosslink swarm config                                  # budget params
crosslink swarm estimate                                # wall-clock cost estimate
crosslink swarm harvest                                 # update cost history

# Review pipeline
crosslink swarm review                                  # parallel review agents
crosslink swarm fix                                     # parallel fix agents
crosslink swarm pipeline                                # full review→fix
crosslink swarm review-status
crosslink swarm review-continue

Container execution

crosslink container build                               # build agent image
crosslink container start <worktree>                    # start for a worktree
crosslink container ps                                  # list running
crosslink container logs <id>                           # stream
crosslink container stop <id>
crosslink container rm <id>
crosslink container kill <id>                           # stop + remove
crosslink container shell <id>                          # exec shell
crosslink container snapshot <id>                       # save as cached image

Agent identity and trust

# Agent
crosslink agent init                                    # initialize identity
crosslink agent status                                  # show current
crosslink agent prompt <session> "message"              # send to tmux agent
crosslink agent bootstrap                               # bootstrap in new repo

# Trust (signing keys)
crosslink trust approve <fingerprint>
crosslink trust revoke <fingerprint>
crosslink trust list
crosslink trust pending                                 # awaiting approval
crosslink trust check <agent>

Design documents

crosslink design "feature description"                  # start design session
crosslink design --issue <id>                           # context from crosslink issue
crosslink design --gh-issue <num>                       # context from GitHub issue
crosslink design --continue <slug>                      # resume existing draft

Milestones

crosslink milestone create "v1.0"
crosslink milestone list
crosslink milestone show <id>
crosslink milestone add <milestone-id> <issue-id>
crosslink milestone remove <milestone-id> <issue-id>
crosslink milestone close <id>
crosslink milestone delete <id>

Archive

crosslink archive add <id>                              # archive a closed issue
crosslink archive remove <id>                           # unarchive
crosslink archive list
crosslink archive older <days>                          # bulk-archive old closed

Configuration

crosslink config                                        # interactive walkthrough
crosslink config --preset team                          # team preset
crosslink config --preset solo                          # solo preset
crosslink config show                                   # all values + defaults
crosslink config get <key>
crosslink config set <key> <value>
crosslink config list                                   # keys with descriptions
crosslink config reset
crosslink config diff                                   # drift from defaults

Workflow and diagnostics

crosslink workflow diff                                 # policy files vs embedded defaults
crosslink workflow trail <id>                           # chronological comment trail
crosslink context measure                               # context injection token cost
crosslink context check                                 # files deployed correctly?
crosslink cpitd scan                                    # scan for code clones
crosslink cpitd status
crosslink cpitd clear

Style syncing

crosslink style set <repo-url>                          # set house style source
crosslink style sync                                    # pull latest
crosslink style diff                                    # drift from house
crosslink style show                                    # current config
crosslink style unset

Infrastructure

crosslink init                                          # initialize in a repo
crosslink sync                                          # sync from remote
crosslink compact                                       # event compaction
crosslink prune                                         # prune hub/knowledge history
crosslink export                                        # JSON/markdown export
crosslink import <file>                                 # import from JSON
crosslink daemon start|stop|status                      # background daemon
crosslink migrate to-shared|from-shared|rename-branch   # schema migrations

Integrity / troubleshooting

crosslink integrity counters --repair                   # fix counter drift
crosslink integrity hydration --repair                  # rehydrate SQLite from JSON
crosslink integrity locks                               # find stale/orphan locks
crosslink integrity schema                              # verify schema version
crosslink integrity layout                              # detect mixed V1/V2 hub layout
crosslink integrity sign-backfill                       # sign unsigned with human key

UI

crosslink tui                                           # interactive terminal dashboard
crosslink mc                                            # tmux mission control
crosslink serve                                         # web dashboard server

Issue ID formats

  • #42 — hub-synced, positive display ID
  • L3 — local-only (not yet pushed to hub)
  • Both formats work everywhere: crosslink show 42, crosslink show L3

Priorities

critical > high > medium > low

Global flags (work on most subcommands)

  • --quiet / -q — minimal output (for scripting)
  • --json — machine-readable output
  • --log-level <error|warn|info|debug|trace> — diagnostic output level
  • --log-format <text|json> — log format

When meta-work shouldn't go in CHANGELOG

Tag the close with --no-changelog for any of these:

  • Skill edits in ~/.claude/
  • Settings.json changes
  • CHANGELOG cleanup itself
  • Documentation-only PRs that don't ship to users
  • Issue tracker hygiene (closing audit/tracking issues whose deliverables already shipped)
  • Any chore-labeled work (the auto-routing currently doesn't exempt these)

If the auto-entry already landed, remove it via Edit on CHANGELOG.md directly. Don't open another issue to "fix the CHANGELOG entry" — that just adds another entry. The recursion is real.

Signals

GitHub stars
1k
Forks
335
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
crosslink-guide
Source
github.com/openwpm/openwpm