-
Notifications
You must be signed in to change notification settings - Fork 0
Migration
This guide explains how to adopt threadnote in an existing repo workflow without losing the repo-local instruction model that current agents rely on. OpenViking becomes a shared, searchable context layer on top of your checked-in files; it does not replace them.
Do not remove AGENTS.md, CLAUDE.md, .claude/, or .agents/ as part of the migration.
Those files stay the versioned source of truth for repo-local behavior. OpenViking becomes a shared, searchable context and memory layer on top of them. It helps agents recall handoffs, skills, and curated guidance across tools, but it should not replace the files that fresh agents read directly from the working tree.
When checked-in instruction files disagree with OpenViking, the repo file wins. Update the source file first, then refresh the OpenViking context.
| Source | Purpose |
|---|---|
AGENTS.md / CLAUDE.md (root) |
Canonical repo instructions. Keep small, current, and checked in. |
Nested AGENTS.md / CLAUDE.md
|
Canonical module-specific overrides. Keep next to the code they govern. |
.claude/commands, .claude/skills
|
Executable or tool-specific workflows. Keep where Claude and other local tools discover them. |
.agents/ |
Agent/plugin metadata or repo-local automation config. Keep unless the owning tool no longer uses it. |
| OpenViking | Durable memory, cross-agent handoffs, searchable snapshots of curated guidance, and seeded skill catalogs. |
Developers should not need to run recall, remember, or handoff as a normal habit. The intended workflow has three layers:
- Agent-first: Codex, Claude, Cursor, Copilot, or another MCP-enabled agent calls OpenViking tools when the task needs shared context.
-
Short CLI fallback: humans and scripts can run
threadnote recall,threadnote remember, orthreadnote handofffrom any repo. -
Checkout-local command:
npm run threadnote -- ...is the bootstrap and debugging path before the short command shim is installed.
After MCP install, developers can drive it conversationally:
Recall the last handoff for this branch.
Remember that this repo uses <durable workflow fact>.
Create a handoff for the next agent before you stop.
Run threadnote install so it can add agent-side guidance from docs/agent-instructions.md to user-level Codex, Claude, Cursor, and Copilot instruction files. That guidance tells agents to recall context at task start, store durable memories when explicitly asked or when a reusable workflow fact is learned, and create handoffs automatically before stopping meaningful work. See Agent Instructions for the full text.
Run install commands from any working directory. Run manifest commands from a repo root, or pass explicit --repo paths.
-
Check prerequisites. Threadnote needs Node.js >= 20.
curl -fsSL https://raw.githubusercontent.com/Kashkovsky/threadnote/main/scripts/install.sh | sh threadnote doctor --dry-runTo force Bun or Deno:
curl -fsSL https://raw.githubusercontent.com/Kashkovsky/threadnote/main/scripts/install.sh | THREADNOTE_RUNTIME=bun sh curl -fsSL https://raw.githubusercontent.com/Kashkovsky/threadnote/main/scripts/install.sh | THREADNOTE_RUNTIME=deno sh
-
Install or repair local OpenViking. This installs the short
threadnotecommand shim to~/.local/binand upserts user-level agent instructions by default. The one-line installer already runsthreadnote install; run these only for a manual install flow or to preview changes:threadnote install --dry-run threadnote install
If
threadnoteis not found after install, add~/.local/bintoPATHor rerun install withTHREADNOTE_BIN_DIR=<dir-on-path>. -
Create the developer-local manifest for the repos this machine actually uses:
threadnote init-manifest --repo ~/src/my-service --repo ~/work/mobile-app
--repocan be repeated and may point anywhere on the machine. If no--repois provided, the current git repo is used. The manifest is written to~/.openviking/seed-manifest.yamlby default and is intentionally not checked in. -
Verify the local service:
threadnote doctor --dry-run
-
Inspect curated repo imports before writing anything:
threadnote seed --dry-run
-
Seed curated repo guidance after reviewing the dry-run output:
threadnote seed
-
Inspect and seed shared skills:
threadnote seed-skills --dry-run threadnote seed-skills
-
Wire one agent at a time. Preview with the bare command, then re-run with
--apply.threadnote mcp-install codex threadnote mcp-install codex --apply
Repeat for Claude. Claude installs at
userscope by default so it works from every repo/worktree; use--scope localonly when a repo-specific Claude MCP entry is intentional.threadnote mcp-install claude threadnote mcp-install claude --apply
Cursor installs by updating the global
~/.cursor/mcp.jsonfile:threadnote mcp-install cursor threadnote mcp-install cursor --apply
GitHub Copilot in VS Code installs by updating the VS Code user-profile
mcp.jsonfile. If VS Code uses a custom profile path, setTHREADNOTE_COPILOT_MCP_CONFIGto thatmcp.jsonpath before runningmcp-install copilot:threadnote mcp-install copilot threadnote mcp-install copilot --apply
Later, if the checkout that installed the MCP adapter is deleted or moved, repair it from any fresh checkout:
threadnote repair
-
Validate recall:
threadnote recall --query "repo testing guidance"
The workflow is not tied to any fixed repo list. Repo discovery is manifest-driven:
-
~/.openviking/seed-manifest.yaml: developer-local default manifest, created bythreadnote init-manifest. -
THREADNOTE_MANIFEST: override for custom teams, experiments, or CI. -
--manifest <path>: one-off override forseedandseed-skills. -
config/seed-manifest.example.yaml: checked-in example only.
Use threadnote init-manifest --repo <path> whenever a developer adds a new repo they want included. The command derives a stable viking://resources/repos/<repo-name> URI and keeps the seed patterns conservative. See Seeding Repos and Skills for what gets imported and how worktrees are handled.
OpenViking stores imported context as durable resources. For v1, treat seed as a first-ingest operation. When a seeded instruction file changes, update the checked-in source first, then refresh the relevant viking:// resource.
Current practical options:
- Remove the old resource with
forget, then re-run a scoped seed manifest. - Use
rememberfor short corrections that should be available immediately. - Use export/import packs only for moving a known-good local context between machines.
Do not edit OpenViking directly and leave the repo instruction file stale.
Remove nothing during the initial migration.
After the workflow is proven, teams may delete or consolidate only content that has a clear owner-approved replacement. Good candidates are stale handoff notes, obsolete duplicate docs, or abandoned per-agent experiments. Bad candidates are canonical instructions, active commands, active skills, MCP config, or anything required by existing tools.
-
doctor --dry-runreports a healthy OpenViking server. -
threadnoteworks from a different repo or subdirectory. -
mcp-installhas been applied for the agent the developer actually uses. -
recallreturns seeded guidance. - A test
handoffcan be stored and recalled by another agent. -
AGENTS.mdandCLAUDE.mdstill describe the source-of-truth repo rules. - The team has agreed on which seeded paths are allowed and which sensitive paths stay excluded.
Installation, Seeding Repos and Skills, Agent Instructions, Safety and Security
GitHub · npm · walkthrough deck · OpenViking · AGPL-3.0-or-later
Start here
Concepts
Workflows
Reference