Work on your structured notes alongside a sandboxed agent.
Intabula turns a folder of plain Markdown into collections with typed fields, table and board views, and full-text search. The built-in agent works in the same workspace through typed operations — from tidying a field to researching and building a whole collection.
Free. No account. Runs on the Claude or Codex subscription you already have.
Intabula~/NotesSearch vault… ⌘Kagent
Views
Home
Board · by status
Collections
Companies9
People58
Jobs12
Needs attention
Inbox1
Welcome to Intabula
Jobsjobs/ · 12 recordsNew job
referral (text) appears in 5 of 12 records — make it an official field?Pin fieldDismiss
Name
Status select
Company relation
Applied date
Salary text
Staff Engineer, Platform
interview
Linear
2026-08-19
$210–260k
Senior Product Engineer
applied
Vercel
2026-08-21
$180–220k
Design Engineer
closed
Figma
2026-08-14
$190–240k
⋯
Staff Engineer, Platform
jobs/linear-staff-engineer.md
NoteFieldsBacklinks
Cover letter — draft
Dear Linear team,
Your Staff Engineer, Platform posting asks for someone who has shipped local-first sync under real product pressure. That's been my last four years: an offline-first collaboration layer, a migration story much like the one in the posting, and the editor performance work your changelog keeps hinting at.
Three things from the posting map directly onto work I've shipped —
Agent
ChatActivity
Find open roles that fit me and set up a new collection
search_webstaff frontend engineer openings
create_recordjobs/linear-staff-engineer.md
create_viewBoard · by status
Built Jobs with 12 records — status, company, applied, and salary as columns — plus a board grouped by status. Want a tailored cover letter drafted inside each record?
Yes, draft them
update_recordjobs/linear-staff-engineer.md
open_recordlinear-staff-engineer
Ask the agent…Send
One request: the agent searched the web, created records, inferred the columns, and built the board — then drafted a cover letter inside each record. Every edit is logged with a before-and-after diff.
Rows, documents, upkeep — pick three.
A spreadsheet gives you rows and comparison, but a cell can't hold a document. A notes folder holds the documents, but you can't sort or filter it. Chat does the upkeep, then forgets it. So you run all three, copy between them, and the set goes stale the week you stop.
Intabula handles all three in one place — and the agent can take as much of the upkeep as you hand over, so the workspace stays current.
Give it a problem, get a workspace.
Ask for open roles that fit you: one record per job, columns inferred from the data — status as a select, applied as a date, company as a relation — a tailored cover letter inside each record, and a board grouped by status.
Works the same for apartments, vendors, papers, bugs. Add a referral column later and the agent backfills every record.
Notes that are also data
Folders are collections, files are records, and the fields at the top of each note become sortable, filterable columns. Click through any row and you're in the full note.
A sandboxed agent
A coding agent pointed at your files gets a shell; Intabula's agent gets a toolbox. update_record splices only the changed segment of a file — every other byte survives. rename_record rewrites every wikilink atomically under a crash-recovery journal. Every change lands in an activity feed with a before-and-after diff.
Your files, not a database
Every note is a Markdown file in a folder you choose; the index is a disposable cache that rebuilds in seconds. Grep them, sync them, open them in other apps. Delete Intabula and nothing is lost.
The agent is built in.
Sign in with your Claude or Codex account and the agent is ready on first launch. No API keys or per-token billing — usage counts against your existing plan.
It edits the vault through sixteen typed operations — create, update, rename, move, link, search, manage views. No shell, no direct file access. It can also search the web; your files leave your machine only as model context, within the scope you've granted.
Notes that can see your code.
Attach a repository to a collection as a read-only linked folder. The agent reads the code and its history — git_loggit_showgit_diff — without touching the working tree, so decision records cite the actual commit.
Linked folders are fenced to their path, with secrets blocklisted. The agent reads there; it only ever writes into your workspace.
Your vault, on your phone.
The iOS companion has full search, table and board views, editing, and quick capture. The agent stays on the desktop; the phone is for updating and looking things up.
Keep the vault in iCloud Drive and it syncs like any other folder — no Intabula server, no account. Git, Syncthing, and Dropbox work too.
Sharing is a folder.
Share a Groceries folder in iCloud Drive with your partner and add it as an external collection. They set status: got at the store and the change syncs back to you. The schema travels in a dotfile, so everyone gets the same columns.
No invites, no seats — sharing and permissions are the operating system's job.
Warns, never blocks
Schema drift, broken links, and odd values route to a needs-attention inbox. Nothing is rejected or silently fixed.
Schema inferred, never imposed
Write a few notes with the same fields and Intabula offers to promote them to columns. You never design a schema upfront.
Approval mode shows real bytes
The optional review diff comes from dry-running the actual write. What you approve is exactly what lands.
Views from a sentence
"Show me a board grouped by status" becomes a saved Kanban in your sidebar.
Links that don't break
Records keep their identity when moved between collections — every reference follows, so the agent can reorganize without breaking anything.
Your Obsidian vault works as-is
Point both apps at the same folder. Full-text search across everything, accent-insensitive — "Lodz" finds "Łódź".
Try it on the notes you already have.
Chat gives you answers. Intabula gives you the place they belong.
Open your existing folder and start writing — or give the agent a problem. Intabula reads plain Markdown as-is.