Phase 2: Go/No-go in Claude Code

Phase 2 is the filter step. Items in Zotero _inbox are reviewed one by one; you decide which ones enter the vault (Go) and which ones do not (No-go).


Starting a Phase 2 session

Make sure Zotero is running (the local API must be active), then:

cd ~/Documents/ResearchVault && claude

Start the review with either of these:

beoordeel inbox

or via the workflow menu:

/research  →  [0]

Optionally, run index-score.py first to pre-rank items:

~/.local/share/uv/tools/zotero-mcp-server/bin/python3 .claude/index-score.py

This scores each _inbox item by semantic similarity to your existing Zotero library (0–100) and prints a sorted list. Both sides come from ChromaDB, so it works with whichever embedding model zotero-mcp is configured with. Claude Code uses these scores during the review session.


How Claude Code reviews each item

The treatment depends on the item's Zotero tag and its relevance score.

Tag-based treatment

Zotero tagWhat Claude Code does
Marked as certain Go in Phase 1 — skip the Go/No-go question and accept directly into raw/ (full processing follows in Phase 3)
📖Needs more evaluation — generate a compact summary via summarize_item.py (local, privacy-safe); show path; wait for Go/No-go
No tag, /unread, or any other tagScore-based treatment (see below)

The 📖 tag is set in Phase 1 when you need more information before deciding. In Phase 2, summarize_item.py generates a compact summary (Introduction · Key findings · Relevance) locally via the fallback model qwen3.5:9b and writes it to inbox/_summary_ITEMKEY.md. Claude Code shows you the path; you read the file and give your decision. No summary text reaches the Anthropic API.

Score-based treatment (for untagged items)

ScoreTreatment
🟢 ≥70 Show title + score; ask Go/No-go directly — strong match, no summary needed
🟡 40 –69Generate a 2–3 sentence summary via summarize_item.py (local fallback model qwen3.5:9b); ask Go/No-go
🔴 <40Propose No-go ("Score: X — low match with your library. No-go?"); you can still choose Go

The two cut-offs are THRESHOLD_GREEN and THRESHOLD_YELLOW in index-score.py. They are checked automatically by docs-verify; the annotations above bind this table to that file.

Claude Code asks for one Go/No-go decision at a time, giving you space to decide per item.


Go

Go means: this item is accepted into the vault and queued for Phase 3.

Claude Code moves the item to the appropriate Zotero collection and calls the local subagent build-zotero-bundle.py with the item key and metadata (title, authors, year, tags). The subagent fetches the full text locally, builds the YAML frontmatter, and writes a canonical bundle to raw/{citekey}__{itemKey}.md. Claude Code receives only a JSON status object — no source content.

The bundle in raw/ is the intake artifact, and writing it is where Phase 3 ends.

Turning bundles into a wiki is handled by whichever backend is configured for the vault — see Choosing a backend.

The status field in the frontmatter is set based on the Zotero tag:

  • status: read — if the item had a tag (you had already read it)
  • status: unread — in all other cases

No-go

No-go means: this item will not enter the vault.

Claude Code always asks for confirmation before deleting. After confirmation, the item is permanently removed from Zotero _inbox. No note is created. There is no intermediate option — a No-go is final.


Maximum-quality mode

For a higher-quality preview summary, ask Claude Code for it explicitly instead of relying on the local fallback model:

beoordeel inbox, gebruik maximale kwaliteit

This is a mode of the assistant, not a command-line flag — --hd is not a real option, and no script accepts it. When asked, Claude reads the source itself and generates the preview through the Anthropic API (Claude Sonnet 4.6) instead of calling summarize_item.py. Claude Code always asks for explicit confirmation first, and never does this on a vault marked confidential.


End of session

At the end of the session, Claude Code shows a summary: X items approved, Y items removed.

If new papers were added to your Zotero library, update the semantic search database:

update-zotero          # full update including full text (recommended)
zotero-mcp db-status   # check current database status

This ensures that new additions are included in future relevance scores.