Kazuya Iyama33 downloadsReview, summarize, and organize your inbox notes with AI.

AI-powered note review and auto-sort plugin for Obsidian. Automatically reviews, summarizes, and organizes notes in your inbox folder using LLM APIs (OpenAI, Gemini, or Anthropic).
Whether your inbox is filled with saved web articles, raw AI chat logs, rough quick notes, or simple URL links, Inbox Curator helps you process them in bulk — then auto-sorts them into Archive, Read Later, or Tasks.
kzyiym-inbox-curator1.1.01.11.4Inbox Curator runs locally inside your Obsidian vault.
When AI review is enabled, selected note content and enabled attachment context (images, PDF text) are sent directly from your device to your configured AI provider (OpenAI, Gemini, or Anthropic). The developer does not receive, proxy, store, or monitor your notes, API keys, or usage data.
The plugin core contains no telemetry. Optional external pages (FAQ, Ko-fi, analytics) are separate from the plugin core and are disclosed in External Service Disclosures below.
API keys are stored using Obsidian's SecretStorage when available, falling back to in-memory session-only storage.
Inbox Curator is designed to be reversible and conservative.
For details, see Auto-sort Safety below.
ai_review_source_hash in frontmatter to skip already-reviewed notes whose content hasn't changed.SecretStorage API. Falls back to in-memory session-only storage.An account and API key from one of the following AI providers:
[!IMPORTANT] This plugin calls external AI APIs, which may incur usage costs depending on your provider's pricing plan.
In compliance with the Obsidian Community Plugin Guidelines, here is the full disclosure regarding network connection, data storage, and privacy for Inbox Curator:
site/index.html) via an iframe from https://ko-fi.com to display optional developer donation options. If blocked or declined, a safe HTTPS direct text link is provided as a fallback. The plugin's core functions are fully available without any donation.site/index.html) utilizes Google Analytics (tracking ID G-H0NMPE813V) strictly for collecting anonymous traffic statistics (page views, language, and theme choices) to improve documentation clarity.site/index.html) is the only exception, which uses Google Analytics 4 for anonymous traffic statistics on an opt-in basis (disabled by default).app.vault API and does not access any data or files on your system outside of your vault.SecretStorage API. They are never written to data.json or synchronized across devices. If unavailable, keys are kept temporarily in-memory during the session.*.ai-review.md) in your vault.When image reading is enabled, Inbox Curator can temporarily resize large image attachments in memory before sending them to the selected AI provider. This reduces skipped images while keeping the original Vault files unchanged. No external compression service is used. This feature only applies to JPEG, PNG, and WebP images, and does not apply to PDFs or videos.
Inbox Curator.main.js, manifest.json, styles.css from the latest release.<vault>/.obsidian/plugins/kzyiym-inbox-curator/.This plugin pairs perfectly with Obsidian Web Clipper — the official browser extension for clipping web pages directly into your vault.
[!TIP] This clip → auto-review → auto-organize pipeline is the intended workflow. Set it up once and let the plugin handle your daily reading intake.
Inbox).AI Reviews).Inbox Curator: Review current note — review the active note.Inbox Curator: Process watched folder — batch-review all unprocessed notes.[!WARNING] Test with 1–2 notes in a small folder before bulk operations or enabling auto-execution.
| Command ID | Display Name | Description |
|---|---|---|
review-current-note |
Review current note | AI-review the currently active note |
process-watched-folder |
Process watched folder | Batch-review all unprocessed notes in the watched folder |
execute-proposed-action |
Execute proposed action for current note | Execute the AI-recommended action on the active note |
undo-last-auto-sort |
Undo last auto-sort run | Revert the most recent auto-sort run |
cleanup-processing-markers |
Clean up processing markers | Remove stale 🤖 prefix markers from reviewed files |
review-selected-notes-as-collection |
Review selected notes as a collection | Cross-note analysis of selected notes |
review-folder-as-collection |
Review folder as a collection | Cross-note analysis of a folder's contents |
open-action-review-panel |
Open action review panel | Review proposed actions for watched-folder notes and apply the ones you approve |
dry-run-auto-sort |
Dry-run auto-sort (preview) | Preview what auto-sort would do without applying any changes |
| Setting | Default | Description |
|---|---|---|
| Watched Folder | Inbox |
Folder monitored for curation |
| Review Output Folder | AI Reviews |
Target folder for AI review notes |
| Suggested Folder Base Path | (empty) | Parent path for AI-suggested archive paths |
| Delete Candidate Folder | Delete Candidates |
Destination folder used when you manually execute a delete_candidate recommendation. Delete candidates are never auto-executed. |
| Max Notes per Run | 10 |
Limits batch run size (1–100) |
| Max Concurrent Reviews | 1 |
Concurrent review jobs (1–8, Advanced) |
| Setting | Default | Description |
|---|---|---|
| Requests per Minute | 10 |
API rate limit (1–60) |
| Delay Between Requests | 1000 ms |
Pause between API calls (0–60000) |
| Request Timeout | 60000 ms |
API call timeout (1000–300000) |
| Setting | Default | Description |
|---|---|---|
| Automatic Watching | OFF | Watch folder for file changes |
| Auto-review on Create | OFF | Review on file creation |
| Auto-review on Modify | OFF | Review on file modification |
| Watch Debounce | 1500 ms |
Debounce interval for file events |
| Polling Fallback | OFF | Periodic sweep fallback |
| Polling Interval | 30000 ms |
Polling frequency |
| Show Processing Marker | OFF | Prefix 🤖 to filenames during processing |
| Setting | Default | Description |
|---|---|---|
| Archive | OFF | Auto-executes when confidence meets its threshold (default Medium or higher) |
| Read Later | OFF | Auto-executes when confidence meets its threshold (default Medium or higher) |
| Tasks | OFF | Auto-executes when confidence meets its threshold (default High only) |
| Delete Candidates | — | Suggested only. Never moved automatically. |
Each auto-sort action has a Minimum confidence to auto-execute dropdown (Low or higher / Medium or higher / High only). Reliability checks still apply on top of the confidence threshold, and every automatic action remains blocked when prompt injection risk is detected.
| Setting | Default | Description |
|---|---|---|
| Allow Archive | ON | Permit the Archive action to be executed |
| Allow Read Later | ON | Permit the Read Later action to be executed |
| Allow Task | ON | Permit the Task action to be executed |
| Allow Delete Candidate | ON | Permit moving delete candidates to the quarantine folder (manual apply only) |
Disabled actions are still reviewed and shown in the action review panel, but are never auto-executed or applied.
Use Open action review panel to see every watched-folder note that carries a proposed action, with its action, confidence, reliability, whether it would auto-execute (and why not), and the resolved destination. Select the notes you approve and apply them in one step. Dry-run auto-sort (preview) opens the same panel read-only to preview auto-sort outcomes without making changes. Review only mode also forces the panel to be read-only. Applied moves, including Delete Candidate quarantine moves, are recorded to auto-sort history and can be reverted with Undo last auto-sort run.
| Setting | Default | Description |
|---|---|---|
| Read Later Folder | Read Later |
Destination for read_later actions |
| Task Folder | Tasks |
Destination for task actions |
| Setting | Default | Description |
|---|---|---|
| Review Mode | Advanced |
Advanced (structured JSON) / Auto-sort (plain-text) / Review only (no actions) |
| Custom Review Prompt | (empty) | Up to 3000 characters of additional AI instructions |
| Setting | Default | Description |
|---|---|---|
| Budget Preset | standard |
small (8K) / standard (32K) / large (64K) / custom |
| Custom Max Context Tokens | 32000 |
For custom preset — total context window |
| Custom Max Input Tokens | 20000 |
For custom preset — max input content |
| Custom Max Output Tokens | 4096 |
For custom preset — max output tokens |
| Custom Safety Margin | 3000 |
For custom preset — reserved headroom |
| Setting | Default | Description |
|---|---|---|
| Collection Review Output Folder | Collection Reviews |
Target folder for collection review notes |
| Use Existing Reviews First | ON | Reuse existing individual review notes to save API costs |
| Include Excerpt When Needed | ON | Include note excerpts if no individual review exists |
| Max Notes | 30 |
Maximum number of notes to analyze in a collection (2–100) |
| Max Excerpt Characters | 2000 |
Truncation limit for note excerpts (100–10000) |
| Setting | Default | Description |
|---|---|---|
| Enable Context Menu | ON | Enable right-click context menu options |
| Review Current Note | ON | Show "Review current note" |
| Process Watched Folder | ON | Show "Process watched folder" |
| Execute Proposed Action | ON | Show "Execute proposed action" on .md files |
| Review Selected as Collection | ON | Show "Review selected notes as a collection" on multiple selections |
| Review Folder as Collection | ON | Show "Review folder as a collection" |
| Execute Selected Actions | ON | Show "Execute selected proposed actions" on multiple selections |
| Review Each Selected Note | ON | Show "Review each selected note" on multiple selections |
| Clean Up Processing Markers | OFF | Show "Clean up processing markers" |
| Undo Last Auto-Sort Run | OFF | Show "Undo last auto-sort run" |
| Setting | Default | Description |
|---|---|---|
| Log Level | errors |
Off / Errors only / Operations (structured JSONL) |
| Setting | Default | Description |
|---|---|---|
| Fetch URL Metadata | ON | Fetch og:title, description, etc. |
| Extract URL Article Text | ON | Extract readable article content |
| Max Extracted Characters | 12000 |
Truncation limit (Advanced) |
| Setting | Default | Description |
|---|---|---|
| Read Images | OFF | Send images to multimodal AI |
| Optimize Images Before Sending | OFF | Resize/recompress large images to fit 1MB limit |
| Read Videos | OFF | Detect video attachments (Advanced) |
| Extract PDF Text (experimental) | OFF | Extract PDF text via PDF.js |
| Setting | Description |
|---|---|
| Provider | OpenAI Compatible / Gemini Native / Anthropic Native |
| Endpoint URL | Customizable for OpenAI-compatible or advanced mode |
| Model | Model name for the selected provider |
| Instructions & Output Language | Match Obsidian language (Default) / Auto-detect / Japanese / English / Same language as the note |
| API Key | Managed via SecretStorage (masked input, save/delete buttons) |
| Test Connection | Validate API key, endpoint, and model availability |
Trigger (command / file event / polling)
→ ReviewQueue (async, concurrent, deduplicated)
→ ReviewPipeline (orchestrator):
1. Read note content & parse frontmatter
2. Detect URL-only notes → fetch HTML → extract article
3. Detect attachments (images, PDF, etc.)
4. Build AI prompt with full context
5. Call provider API (OpenAI / Gemini / Anthropic)
6. Parse & validate JSON response
7. Map to domain model (ReviewResult)
8. Write review output note (*.ai-review.md)
9. Upsert frontmatter (ai_review_* fields)
10. Auto-execute action (if configured)
The queue is in-memory only — persistence is handled via frontmatter hashes (ai_review_source_hash) on each note, avoiding restart-induced re-execution.
main.ts # Plugin entry point (root, not src/)
src/
├── commands.ts # Command registration
├── settings.ts # Settings tab UI
├── types.ts # Domain model types
├── secrets.ts # SecretStorage API key management
├── reviewPipeline.ts # Core review orchestration
├── collectionReview.ts # Cross-note collection analysis
├── reviewResultMapper.ts # AI response → ReviewResult
├── reviewResultValidator.ts # Schema validation
├── reviewNormalizer.ts # Simple-mode parsing & action normalization
├── reviewWriter.ts # Review note generation
├── providerClient.ts # Provider abstraction layer
├── providerErrorClassifier.ts # Provider error classification and mapping
├── openAiCompatible.ts # OpenAI-compatible API client
├── gemini.ts # Google Gemini API client
├── anthropic.ts # Anthropic Claude API client
├── urlExtraction.ts # URL fetch & article extraction
├── attachmentContext.ts # Attachment detection
├── actionLayer.ts # Action execution
├── actionConfirmationModal.ts # Confirmation modal for destructive actions
├── undoAutoSort.ts # Undo last auto-sort run
├── frontmatter.ts # Frontmatter read/write
├── connectionTest.ts # API connection tester
├── processingNotice.ts # Persistent notice display
├── queue/
│ ├── queueTypes.ts # Queue data types
│ ├── job.ts # Job creation
│ ├── reviewQueue.ts # Async job queue
│ ├── rateLimiter.ts # Rate limiting
│ └── retry.ts # Exponential backoff
├── i18n/
│ ├── index.ts # Locale detection
│ └── locales/
│ ├── en.ts # English translations
│ └── ja.ts # Japanese translations
├── utils/
│ ├── contentFilter.ts # Context budget & content filtering
│ ├── autoSortHistory.ts # Auto-sort history persistence
│ ├── promptInjection.ts # Prompt injection signal detection
│ ├── logFiles.ts # Shared log file utilities
│ ├── errorLog.ts # Error logging & file writing
│ ├── operationLog.ts # Structured operation logging (JSONL)
│ ├── folder.ts # Folder creation & validation
│ ├── pdf.ts # PDF text extraction
│ └── imageOptimization.ts # Image resize/recompress
└── types/
└── obsidian-extra.d.ts # Obsidian API type augmentations
# Install dependencies
pnpm install
# Type-check
pnpm check
# Build
pnpm build
# Watch mode
pnpm dev
# Run tests
pnpm test
The current review, action approval, and reversible auto-sort foundation is implemented.
Planned work is prioritized as:
See GitHub Issues for public tracking.
Inbox Curator is designed to automate your inbox, not just summarize it. It can automatically move notes to Archive, Read Later, or Tasks when the AI review is reliable enough.
To keep automation reversible:
.inbox-curator/auto-sort-history.json.Inbox Curator: Undo last auto-sort run command.Inbox Curator is an Obsidian plugin that uses AI (LLM APIs) to review, summarize, and auto-sort notes in your Inbox folder. It helps you process saved web articles, AI chat logs, quick notes, and URL links in bulk.
OpenAI (and OpenAI-compatible endpoints), Google Gemini (native API), and Anthropic Claude (native API). You need an API key from one of these providers.
No. Inbox Curator never deletes notes automatically. Delete candidates are suggestions only and remain in place until you approve the action manually. Manual execution moves the note to the configured quarantine folder (Delete Candidates); it does not permanently delete the note.
Yes. Recent auto-sort runs can be undone with the command:
Inbox Curator: Undo last auto-sort run
Recorded move actions (Archive, Read Later, Task, suggested folder, Delete Candidates) can be restored. If the moved note is missing, that item is skipped; if the original path is occupied, the note is restored with a (restored) suffix.
Run Inbox Curator: Open action review panel. The panel shows the proposed action, confidence, reliability, auto-execution decision, reason, and resolved destination for watched-folder notes. Select only the actions you approve.
Use Inbox Curator: Dry-run auto-sort (preview) for a read-only preview. Review only mode also makes the panel read-only and blocks manual action commands.
Archive and Read Later are reversible, low-risk organization actions. Tasks require High confidence because they can influence user behavior and priorities.
API keys are stored securely using Obsidian's native SecretStorage API. They are never written to data.json or synced. If SecretStorage is unavailable, keys are kept in-memory for the session only.
No. The plugin core is 100% telemetry-free. The developer does not collect, monitor, or transmit any usage data, note contents, or error logs. The optional external FAQ page (https://inbox-curator.antidot.jp/) uses Google Analytics on an opt-in basis (disabled by default) — see External Service Disclosures.
When enabled in settings, a 🤖 prefix is added to filenames while review is in progress. This is a visual indicator only and is automatically removed when processing completes. It is disabled by default because it may cause sync conflicts in vaults synchronized with third-party services.
Yes. You can:
Inbox Curator: Process watched folder.Collection review sends summaries of multiple notes to the AI together for cross-note analysis. Individual note review processes each note separately.
Yes, when image reading is enabled (Settings → Attachments). The plugin can send up to 3 images (max 1 MB each) to multimodal AI models for visual review. Optional in-memory image optimization accepts source images up to 10 MB and temporarily compresses them for AI review without modifying your original files. PDF text extraction is also available (experimental, first 5 pages, up to 10,000 characters).
When a note contains only a URL, manual review can fetch the page's metadata (title, description, OG tags) and optionally extract the readable article text. Background watcher and polling jobs do not fetch remote URLs, which prevents an untrusted note from triggering network requests without user interaction. Static HTML works best; single-page applications (SPAs) that require JavaScript may yield incomplete results.
The plugin scans the final text sent for review, including fetched article text and extracted PDF text, for signals that attempt to manipulate the AI review prompt. When detected, every automatic action is blocked. Image inputs are also treated as untrusted for automatic actions because prompt-like text inside an image cannot be reliably scanned before model execution.
You can use Safe mode (Review only) for maximum protection.
You can configure Requests per minute and Delay between requests in settings to control API usage. Combined with Max notes per run (1-100) and Max concurrent reviews (1-8), this prevents API rate-limit errors and manages costs.
No. Inbox Curator is desktop-only. The plugin manifest specifies isDesktopOnly: true.
Collection review analyzes a group of notes together, identifying themes, patterns, and relationships across notes. It can use existing individual reviews first (configurable) and include note excerpts when needed. Collection review output is saved to a separate configurable folder.
Yes. You can add up to 3,000 characters of custom instructions in Settings → Review Behavior → Additional Review Instructions. This lets you tailor the AI review to your specific needs (e.g., focus on technical accuracy, prioritize certain topics, add domain-specific criteria).
After a review, the plugin writes an ai_review_source_hash to the note's frontmatter. On subsequent scans, if the note content hasn't changed (hash matches), the note is skipped. This prevents re-reviewing unchanged notes.
Failed reviews are logged to rotating error log files in .inbox-curator/logs/. The queue continues processing remaining notes. You can configure log levels (off, errors, operations) in settings. Operation logs provide detailed execution traces for debugging.
No. Note content, images, and PDF text are sent directly from your device to your configured AI provider (OpenAI, Gemini, or Anthropic). No intermediary servers are involved. The developer cannot access your notes or API keys.
We provide a comprehensive, interactive, and multi-language (English/Japanese) FAQ page to help you with common questions, troubleshoot issues, and understand plugin behaviors:
👉 Open FAQ Document (Supports real-time search, category filtering, theme toggle, and accordion toggles)
Note: The FAQ document is a supplementary helper document and does not constitute official product support. It is verified for Obsidian v1.11.4+ and Plugin v1.1.0+.
If you encounter any issues, have feature requests, or want to share your thoughts: