notion-sync

A command that copies job-search results and application records into a read-only Notion view. Notion is a workspace app for organising notes and databases; the repository remains the source of truth.

In plain words
What is it for?
Use it to create one Notion database entry per job and a detailed page for shortlisted matches.
Why use it?
It lets you review the current job pipeline from Notion without changing the files that store the original data. It does not rank jobs, submit applications, or sync edits back.

Command for Claude Code

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add commands/madslorentzen/ai-job-search/notion-sync
Clone the repo
git clone --depth 1 https://github.com/MadsLorentzen/ai-job-search

Made for: Claude Code.

Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 3,283 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00000 $0.03283
Opus 5 $0.00000 $0.01641
Sonnet 5 $0.00000 $0.00657
Haiku 4.5 $0.00000 $0.00328

Measured 2d ago against content hash 3663306f765a, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

notion-sync scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

Copies of this mod

2 near-identical copies found in the catalogue:

.claude/commands/notion-sync.md · 150 lines

How it starts

The opening of the file, as written. The whole thing — 150 lines — stays where its author put it; the contents beside it link to each section on GitHub.

/notion-sync - Push Ranked Jobs and Applications to a Notion Database

You are publishing a read-only view of the job search into the user's Notion workspace: one database row per job, with a detailed page per shortlisted match. The repo files stay the system of record - job_scraper/seen_jobs.json owns scraped/ranked jobs and job_search_tracker.csv owns applications. Notion is a disposable presentation layer on top of them; nothing ever syncs back.

This command requires the Notion MCP server (OAuth). It reads state, upserts pages, and stops - it never ranks, applies, or edits repo files. Notion is the in-tree reference binding; the sync contract itself is tool-agnostic (see "Adapting to Another Tool" at the end - only the two sections marked (Notion binding) are tool-specific).

Lane: /html-report vs /notion-sync

Both present the same tracker data; they own different moments. /html-report is the deep-review lane: a self-contained offline dashboard with charts and a filterable table, regenerated at your desk. /notion-sync is the glanceable lane: the current state of the pipeline, reachable anywhere Notion runs (desktop, web, phone). They compose rather than compete - after /outcome records a result, re-run either or both to refresh the views.

Follow these steps in order.


Step 0: Parse Input

$ARGUMENTS may contain:

  • Nothing → sync ranked jobs with score ≥ 60 (Good Fit and above) plus every tracked application
  • --min-score <N> → override the score threshold
  • --all → sync every ranked job regardless of score
  • --rebuild → re-fetch and rewrite page bodies too (see Step 5 - normally bodies are write-once)

Step 1: Preflight the Connection (Notion binding)

The command is silently optional: when the destination is not reachable, the outcome is one clear message and a clean exit - nothing else in the framework notices this command exists.

  1. Check that Notion MCP tools are available in this session (tool names starting with mcp__notion__ or similar). Determine this from the session's own tool list only - never by running shell commands like claude mcp list, which would interrupt the user with a permission prompt before the graceful exit. If the tools are not available, stop and tell the user how to connect:

    Notion MCP isn't connected. Run claude mcp add --transport http notion https://mcp.notion.com/mcp, then start a new session (servers added mid-session are only picked up on restart), run /mcp there to complete the OAuth login, and re-run /notion-sync.

  2. Verify the connection with one cheap call (e.g. a workspace search). An auth error → tell the user to re-authenticate via /mcp and stop. Never retry in a loop.
  3. The Notion MCP server is interactively authenticated, so "connected but not authenticable right now" (expired OAuth, headless/CI context where the login flow cannot run) gets the same graceful exit as "not configured": state the reason in one line and stop. This includes the configured-but-unauthenticated state where the server exposes only its auth handshake and no data tools - never initiate the OAuth flow from this command and never ask whether to authenticate now; the one line points at /mcp and the command ends there. Authenticating is the user's move, made outside this command.

Read the full file on GitHub · 150 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 150 lines · 0 tokens per session scan A 3663306f765a

Subscribe to this mod's changes

notion-sync is a command published in the GitHub repository MadsLorentzen/ai-job-search (39,400 stars, last pushed today), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 3,283 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.