Skip to content

Storage Backends

Pick where hyprlayer stores plans, research, and handoffs

Hyprlayer supports four storage backends for thoughts. Pick one at init time — every slash command and sub-agent auto-detects the active backend and reads/writes through the right storage.

Terminal window
hyprlayer thoughts init --backend git # default: a separate git repo
hyprlayer thoughts init --backend obsidian # local Obsidian vault, no sync
hyprlayer thoughts init --backend notion # Notion database, via your agent tool's connector
hyprlayer thoughts init --backend anytype # Anytype object, via the Anytype MCP server
BackendStorageSyncMCP registrationSetup prompts
gitSeparate git repo (default ~/thoughts/)hyprlayer thoughts sync pushes/pullsn/aLocation, dirs, user
obsidianA subfolder inside your existing vaultNo-op (files are already on disk)n/a--vault-path, optional --vault-subpath
notionNotion databaseNo-op (agent writes directly via MCP)Not managed by hyprlayer — uses your agent tool’s Notion connector--parent-page-id, optional --database-id
anytypeObjects in an Anytype spaceNo-op (agent writes directly via MCP)Hyprlayer registers the MCP server automatically--space-id, optional --type-id, --api-token-env (default ANYTYPE_API_KEY)

For notion, install the Notion connector in your agent tool before running init — for Claude Code that’s /mcp → “Notion”. Hyprlayer never registers a self-hosted Notion MCP server or prompts for a NOTION_TOKEN.

For anytype, the Anytype desktop app must be running and ANYTYPE_API_KEY (or your chosen env var) must hold a valid key issued from the app’s Settings → API Keys panel.

On notion and anytype, the target database (Notion) or object type (Anytype) is created on the first write-oriented slash command — typically the first /create_plan after init. The command’s dispatch preamble:

  1. Calls hyprlayer storage info --json to get settings.databaseId / settings.typeId.
  2. If unset, creates the database/type via MCP using the unified schema.
  3. Calls hyprlayer storage set-database-id <id> or hyprlayer storage set-type-id <id> to persist the returned ID.
  4. Every subsequent command reuses the stored ID.

If you delete the database/type out-of-band, the next /create_plan detects the 404 and re-creates it, then persists the new ID. You don’t need a recovery command.

Every thought carries the same 10 standardized properties regardless of backend. In git/obsidian they ride as YAML frontmatter; in notion they’re first-class database properties; in anytype they’re object-type properties.

FieldTypeRequiredNotes
titletextyesHuman-readable title
typeplan | research | handoff | noteyesPrimary category
datedate (YYYY-MM-DD)yesCreation date
statusdraft | active | implemented | superseded | archivedyesLifecycle state
tickettextnoOptional external reference, e.g. ENG-1234
projecttextyesWhich code repo this relates to (mappedName from storage info)
scopeuser | shared | globalyesMatches the thoughts directory split
tagsmulti-selectnoFreeform topic labels
authortextyesThoughts user
relatedrelationnoCross-references: page/object IDs or file paths

Run hyprlayer storage info --json from inside a project to see the resolved backend, settings, and the full schema contract the slash commands populate.

hyprlayer thoughts init --backend <new> --force switches an already-initialized project. Hyprlayer does not migrate existing content — old artifacts remain in place in the old backend, new artifacts go to the new one. Settings from the previous backend (api_token_env, space_id, vault_path, etc.) are dropped to avoid leaking across.

Settinggitobsidiannotionanytype
Content locationGit repo (symlinked into project)Vault subfolder (symlinked)Notion database under parent pageAnytype space
Agent reads/writesFilesystemFilesystemNotion MCP toolsAnytype MCP tools
hyprlayer thoughts syncPushes/pulls the git repoNo-opNo-opNo-op
Pre-commit hook blocking thoughts/ commitsInstalledInstalledn/a (no thoughts/ dir)n/a (no thoughts/ dir)
Post-commit auto-sync hookInstalledSkippedn/an/a
  • How Thoughts Work — the filesystem-centric view (applies to git and obsidian)
  • Syncing — what thoughts sync does per backend
  • Profiles — each profile can select its own backend
  • CLI Referencehyprlayer storage info, storage set-database-id, storage set-type-id