An AI agent skill for capturing notes and TODOs into an Obsidian vault organized with the PARA method.
-
An Obsidian vault with the PARA folder structure:
vault/ ├── 🚧 Projects/ ├── 🤹♀️ Areas/ ├── 📚 Resources/ ├── ✏️ Quick Notes/ └── ✅ TODOs/ ├── work.md └── life.md -
Python 3.10+
-
A Claude Code / OpenCode / Codex agent that supports skills
Create ~/.onote/config.json with your vault path:
{
"vault_path": "/path/to/your/obsidian/vault"
}Optional fields:
| Key | Default | Description |
|---|---|---|
cache_dir |
~/.onote/cache |
Where the local routing index is stored |
npx skills add -g verneagent/onoteTrigger with the exact lowercase word onote followed by a subcommand:
onote project <title or intent>
onote area <title or intent>
onote resource <title or intent>
onote quick <title or intent>
onote todo <work|life> <todo text>
onote sync [project|area|resource|all]
| Command | Purpose | PARA bucket |
|---|---|---|
project |
Active project notes, decisions, plans | Projects |
area |
Durable knowledge, workflows, methods | Areas |
resource |
Reference material, guides, account info | Resources |
quick |
Quick inbox capture for unclassified notes | Quick Notes |
todo |
Append a checkbox item to a TODO list | TODOs |
sync |
Rebuild the local routing index | — |
When you save a note, onote automatically picks the best subfolder within the target PARA bucket:
- Scans existing notes and builds a lightweight local embedding index (pure offline, no API calls)
- Matches your note's title and content against the index using a combination of lexical overlap and vector similarity
- Uses folder-name matching as a tie-breaker
The index is stored in SQLite with compact float vectors — fast and low disk usage.
MIT