Who
I wanted agents to talk to Notion without a scrape wrapper and without pasting JSON into the wrong curl.
For OpenClaw / Claude Code workflows that need db/page/block CRUD, property-filtered page lists, and Markdown out of page content.
What
I built notion-cli — public https://github.com/michaelmonetized/notion-cli. HEAD 5309974. 1 commit. 0 stars. Default main. Version 1.0.0 (CLI banner still says v2.0.0). CLI / agent skill only.
Shipped (~1145 LOC src): notion db|page|pages|block|search|spaces via Bun + @notionhq/client v3. Vitest + Biome. bun build --compile → dist/notion.


Agent path: ./setup → OpenClaw ~/.openclaw/workspace/bin/notion or ./setup --host codex → ~/.claude/skills/notion. Full command reference in SKILL.md.
Filters + Markdown: pages list <db> -p "Name,Tags" / -n "Status"; page content <id> → block-to-Markdown.

Gaps: package 1.0.0 vs banner v2.0.0; DELIVERY/FINAL-DELIVERY still flat list-databases; unused spaces.ts/page.ts/search.ts modules; spaces list aliases db list; orphan empty postcss.config.js.

Where
Code: https://github.com/michaelmonetized/notion-cli — public. No live web app.
Run: export NOTION_API_KEY=… && bun install && bun build src/cli.ts --compile --outfile dist/notion (or ./setup).
When
2026-03-28 — 5309974 Initial commit: production-ready Notion CLI (+29 files) → HEAD.
Why

Because agents need a typed Notion subcommand surface with Markdown out — not another unofficial scrape. Engagement Q: Align package + banner to 1.0.0 and delete flat-command DELIVERY docs, or finish a real spaces API first?
