{"_id":"@capyup/pi-obsidian","_rev":"2-8fe466317c345ea6c33c4dd66c57f5f9","name":"@capyup/pi-obsidian","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@capyup/pi-obsidian","version":"0.1.0","keywords":["pi-package","pi","pi-extension","obsidian","vault","notes","markdown"],"author":{"name":"capyup"},"license":"MIT","_id":"@capyup/pi-obsidian@0.1.0","maintainers":[{"name":"capyup","email":"lucas@knowecon.com"}],"homepage":"https://github.com/capyup/pi-obsidian#readme","bugs":{"url":"https://github.com/capyup/pi-obsidian/issues"},"pi":{"extensions":["./extensions/obsidian/index.ts"]},"dist":{"shasum":"1cd7893b177855b2e4cf22ba488536d2220607a7","tarball":"https://registry.npmjs.org/@capyup/pi-obsidian/-/pi-obsidian-0.1.0.tgz","fileCount":4,"integrity":"sha512-vQEfqrVcoSZWxmocH2ViqvUR6VJKO6tCQBymH455/oRZVimfgvyvN9y/liMnu9AHO1jwT0rlLd8PR4hcvXUQ6A==","signatures":[{"sig":"MEYCIQCzSEkL8xUIq7ySgd6I+qdVIXFBM2UxnE/nsKktRjt+3AIhAMeZk5yFiT3noBYXT6hhTqlgAOVZIg7kYeH0Az91T8MS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23628},"type":"module","gitHead":"ec14eac1fa218c335efa93ec5039776a0b4daf18","scripts":{"typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"_npmUser":{"name":"capyup","email":"lucas@knowecon.com"},"repository":{"url":"git+https://github.com/capyup/pi-obsidian.git","type":"git"},"_npmVersion":"11.12.1","description":"pi extension that wraps the Obsidian CLI as typed tools — read, list, search, outline, create, append, open, backlinks, tags, and daily-append against the active vault.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.1.24","typescript":"^5.9.3","@types/node":"^25.5.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-obsidian_0.1.0_1778430685886_0.7076673551526858","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@capyup/pi-obsidian","version":"0.2.0","description":"pi extension that wraps the Obsidian CLI as typed tools — read, list, search, outline, create, append, open, backlinks, tags, and daily-append against the active vault.","type":"module","keywords":["pi-package","pi","pi-extension","obsidian","vault","notes","markdown"],"repository":{"type":"git","url":"git+https://github.com/capyup/pi-obsidian.git"},"bugs":{"url":"https://github.com/capyup/pi-obsidian/issues"},"homepage":"https://github.com/capyup/pi-obsidian#readme","author":{"name":"capyup"},"license":"MIT","publishConfig":{"access":"public"},"scripts":{"typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*","typebox":"*"},"devDependencies":{"@types/node":"^25.5.0","@earendil-works/pi-coding-agent":"^0.74.0","typebox":"^1.1.24","typescript":"^5.9.3"},"pi":{"extensions":["./extensions/obsidian/index.ts"]},"gitHead":"f23b3597e290ea6609f7d807d1ac651fbb8bcddf","_id":"@capyup/pi-obsidian@0.2.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-5vp3d8xvAdf31RJLVc3U+bC0H2c9lEAXXKOktDRWRXQUqiyY+UfQ+jl1HIcN3jCo3Talzy2TTAiJuG8BbJqftA==","shasum":"7e2a2ac9a7bdac4712aae5735b34afc3b491eaa3","tarball":"https://registry.npmjs.org/@capyup/pi-obsidian/-/pi-obsidian-0.2.0.tgz","fileCount":4,"unpackedSize":29508,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIByWgOAnhsvmgHVOAaVSzzrr8PavBD/hGIUxJHh2f0fqAiA6XxPAnYDLGlmIGtgaa92VtoVmMRQHddbcQU6muGExnQ=="}]},"_npmUser":{"name":"capyup","email":"lucas@knowecon.com"},"directories":{},"maintainers":[{"name":"capyup","email":"lucas@knowecon.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-obsidian_0.2.0_1778488127948_0.9754436837560518"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T16:31:25.792Z","modified":"2026-05-11T08:28:48.189Z","0.1.0":"2026-05-10T16:31:26.066Z","0.2.0":"2026-05-11T08:28:48.087Z"},"bugs":{"url":"https://github.com/capyup/pi-obsidian/issues"},"author":{"name":"capyup"},"license":"MIT","homepage":"https://github.com/capyup/pi-obsidian#readme","keywords":["pi-package","pi","pi-extension","obsidian","vault","notes","markdown"],"repository":{"type":"git","url":"git+https://github.com/capyup/pi-obsidian.git"},"description":"pi extension that wraps the Obsidian CLI as typed tools — read, list, search, outline, create, append, open, backlinks, tags, and daily-append against the active vault.","maintainers":[{"name":"capyup","email":"lucas@knowecon.com"}],"readme":"# pi-obsidian\n\nA [pi](https://pi.dev) extension that wraps the [Obsidian CLI](https://help.obsidian.md/cli) and exposes a typed family of `obsidian_*` tools the agent can call directly. Lets pi read, list, search, outline, create, append, and open notes in your active Obsidian vault — without dropping into shell.\n\n## Why\n\nThe raw `obsidian` CLI requires a `vault=<id>` prefix on every call (see your `obsidian.json` config). That id is opaque, the CLI has dozens of subcommands, and the agent has to remember argument shapes across turns. This extension does three things:\n\n1. **Auto-resolves the active vault** from `obsidian.json` (or `PI_OBSIDIAN_VAULT_ID` override).\n2. **Surfaces a curated subset of CLI commands as typed tools** — clean parameter schemas, no string-glue.\n3. **Tells the model when to use them**: each tool has a `promptSnippet` and `promptGuidelines` so pi prefers `obsidian_read` over the generic file-read tool when the file lives inside an Obsidian vault.\n\n## Tools\n\n| Tool | What it does | Maps to |\n|---|---|---|\n| `obsidian_read` | Read a note by vault-relative path | `obsidian read path=…` |\n| `obsidian_list` | List files in a folder, optionally filtered by extension | `obsidian files folder=… ext=…` |\n| `obsidian_search` | Grep-style content search with line context, optional folder scope | `obsidian search:context query=… path=… limit=…` |\n| `obsidian_outline` | Heading tree of a note | `obsidian outline path=…` |\n| `obsidian_create` | Create a new note (optional content / overwrite / open) | `obsidian create path=… content=…` |\n| `obsidian_append` | Append content to a note | `obsidian append path=… content=…` |\n| `obsidian_prepend` | Prepend content (after frontmatter) | `obsidian prepend path=… content=…` |\n| `obsidian_open` | Open a note in the Obsidian app, optional new tab | `obsidian open path=…` |\n| `obsidian_backlinks` | List backlinks to a note | `obsidian backlinks path=…` |\n| `obsidian_tags` | List vault tags or per-note tags, optional counts | `obsidian tags …` |\n| `obsidian_daily_append` | Append to today's daily note | `obsidian daily:append content=…` |\n\n## Install\n\n```bash\npi install npm:@capyup/pi-obsidian             # from npm (recommended)\npi install git:github.com/capyup/pi-obsidian   # from git\npi install /path/to/pi-obsidian                # from local checkout (dev)\n```\n\n## Prerequisites\n\n- **Obsidian 1.12+** with the CLI enabled: Settings → General → Command line interface\n- **Obsidian app must be running** with at least one vault open\n- macOS: Obsidian binary at `/Applications/Obsidian.app/Contents/MacOS/obsidian` (auto-detected)\n- Linux / Windows: `obsidian` must be on `PATH`, or set `PI_OBSIDIAN_BIN`\n\n## Vault selection\n\nThe extension auto-detects the active vault by reading `obsidian.json`:\n\n| Platform | Path |\n|---|---|\n| macOS | `~/Library/Application Support/obsidian/obsidian.json` |\n| Linux | `~/.config/obsidian/obsidian.json` |\n| Windows | `%APPDATA%/obsidian/obsidian.json` |\n\nSelection logic:\n\n1. `PI_OBSIDIAN_VAULT_ID` env var, if set\n2. The vault marked `\"open\": true` in `obsidian.json`\n3. Most recently opened vault (highest `ts`)\n\n## Environment variables\n\n| Var | Effect |\n|---|---|\n| `PI_OBSIDIAN_VAULT_ID` | Force a specific vault id |\n| `PI_OBSIDIAN_VAULT_PATH` | Optional companion to the above (for diagnostics) |\n| `PI_OBSIDIAN_BIN` | Override the path to the `obsidian` binary |\n\n## Examples (what pi does for you)\n\n```\npi> read ops/index.md from my vault\nagent calls obsidian_read { path: \"ops/index.md\" } → returns markdown\n\npi> what notes mention \"tailscale exit node\"?\nagent calls obsidian_search { query: \"tailscale exit node\" } → grep-style hits\n\npi> log this decision into today's daily note\nagent calls obsidian_daily_append { content: \"- decided to ...\" }\n\npi> open the new playbook tab in Obsidian\nagent calls obsidian_open { path: \"ops/tailscale/tailscale-add-windows.md\", newtab: true }\n```\n\n## Development\n\n```bash\ngit clone https://github.com/capyup/pi-obsidian\ncd pi-obsidian\nnpm install\nnpm run typecheck         # tsc --noEmit\nnpm run pack:check        # npm pack --dry-run (verify files glob)\n```\n\n## Limitations / future\n\n- Currently does not expose `properties:*` (frontmatter property) tools — TODO.\n- Does not expose `command id=…` (Obsidian command palette executor) — could add if useful.\n- Multi-vault: currently picks one active vault per call. If you want explicit per-call vault selection, use `PI_OBSIDIAN_VAULT_ID`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}