⛏ PICKAXE

Your Obsidian vault,
inside Claude Code.

Pick which notes your AI sees. Control what it can touch.

pickaxe – zsh
pickaxe pick
[space] toggle  [w] writable  [enter] open dir  [ctrl+d] confirm  [/] filter  [q] cancel
 
> [ ]     Clippings/
  [~] r~  Work Notes/
  [x] r-  templates/
  [ ]     Getting Started with Go.md
  [x] rw  2026-03-28.md
  [x] r-  Project Roadmap.md
1-6 of 42
 
pickaxe list
  a3f19b72 [file] r- API Design ~/Vault/API Design.md
  c7e42d01 [file] rw Roadmap ~/Vault/Work/Roadmap.md
  8b1a5f93 [file] rw Daily Note ~/Vault/Journal/2026-03-28.md
 
go install github.com/MatteoGgl/pickaxe@latest Releases →

WHY PICKAXE

AI coding tools can read your repo but not your head. The context behind what you’re building, meeting notes, architecture decisions, that markdown file where you actually wrote down the plan. It all stays locked in Obsidian.

Pickaxe is a CLI that connects the two. You choose which files to expose, set read or write permissions on each one, and frontmatter gets stripped so your metadata stays local. No Obsidian plugin, no cloud sync.

HOW IT WORKS

FRONTMATTER STRIPPED

Your notes probably have YAML frontmatter: tags, aliases, status fields, dates. Pickaxe strips all of it before anything reaches your AI. When Claude writes back to a file, the original frontmatter is restored automatically.

In your vault
---
tags: [project, draft]
status: in-progress
created: 2026-03-15
---
 
# API Redesign
 
Move to REST. Keep the existing
gRPC endpoints for internal use.
What Claude sees
# API Redesign
 
Move to REST. Keep the existing
gRPC endpoints for internal use.

READ BEFORE WRITE

Claude has to read a file before it can change it. If it tries to update something it hasn’t looked at yet, the request gets rejected. No blind edits.

MCP – pickaxe serve
update_vault_file name="Roadmap" old_string="Q2" new_string="Q3"
 
Error: file "Roadmap" has not been read yet in this session.
Call read_vault_file first.

HASH IDs

Every registered file gets a deterministic 8-character hash. You can use the shortest unique prefix to reference entries in any command. No need to type full names.

pickaxe – zsh
pickaxe list
  a3f19b72 [file] r- API Design ~/Vault/API Design.md
  c7e42d01 [file] rw Roadmap ~/Vault/Work/Roadmap.md
  8b1a5f93 [file] rw Daily Note ~/Vault/Journal/2026-03-28.md
 
pickaxe remove a3f
Removed "API Design"

THE REGISTRY

Everything pickaxe knows lives in .pickaxe.json at your project root. Plain JSON, easy to inspect, easy to version. One file per project.

.pickaxe.json
{
  "version": 1,
  "strip_frontmatter": true,
  "entries": [
    {
      "type": "file",
      "path": "~/Vault/Work/Roadmap.md",
      "name": "Roadmap",
      "writable": true
    },
    {
      "type": "dir",
      "path": "~/Vault/templates",
      "name": "templates",
      "writable": false
    }
  ]
}

Add .pickaxe.json to your .gitignore. It contains absolute paths to your vault.

go install github.com/MatteoGgl/pickaxe@latest View on GitHub →