✅ Introduction

The Scimax Capture system provides a quick and efficient way to capture notes, tasks, ideas, and snippets without interrupting your workflow. Inspired by Emacs org-capture, it allows you to define templates that automatically format and file your captured content to the right location.

✅ What is Capture?

Capture is a fast note-taking system that:

  • Collects information quickly with minimal keystrokes

  • Uses templates to structure your notes consistently

  • Automatically files content to the appropriate location

  • Supports various capture types (TODOs, notes, journal entries, code snippets, etc.)

  • Includes context from where you initiated the capture (links, selection, clipboard)

✅ Key Features

  • Template-based capture: Define reusable templates for different types of content

  • Flexible targeting: Capture to end of file, under specific headlines, or in date trees

  • Context awareness: Automatically includes links to source location, timestamps, and selected text

  • Quick capture commands: Fast shortcuts for common captures (TODO, note)

  • Preview before saving: Optional preview of captured content before filing

  • Custom variables: Rich template language with placeholders, timestamps, and prompts

✅ Philosophy

The capture system follows the principle of "capture first, organize later." Instead of interrupting your flow to decide where something belongs or how to format it, you simply invoke a capture template and let the system handle the details. This reduces friction and helps you maintain focus on your primary task.

✅ Getting Started

✅ Your First Capture

The quickest way to capture a TODO is:

  1. Press C-c c (or run Scimax: Capture)

  2. Select the "Todo" template (or press `t')

  3. Enter your task description

  4. Press Enter

Your TODO is now filed to `todo.org' without leaving your current context.

Quick TODO Capture

For even faster TODO capture, use the dedicated quick capture command:

  1. Press C-c t (or run Scimax: Quick Capture TODO)

  2. Type your task

  3. Press Enter

This bypasses the template picker and goes straight to TODO capture.

Capturing with Context

When you invoke capture with text selected:

  1. Select some text in your editor

  2. Press `C-c c'

  3. Choose a template (e.g., "Code Snippet")

  4. The selected text is automatically included in your capture

The capture system also includes a link back to where you initiated the capture, making it easy to return to context later.

Capture Templates

Built-in Templates

Scimax comes with several built-in templates:

Todo Template (`t')

Captures a TODO item to todo.org:

,* TODO Task description

Note Template (`n')

Captures a quick note to notes.org:

,* Note title
[2026-01-13 Mon 14:30]

Note content here...

Journal Template (`j')

Captures a journal entry to journal.org in a date tree:

,* 2026
,** 2026-01 January
,*** 2026-01-13 Monday
,**** [2026-01-13 Mon 14:30] Entry title
Entry content...

Meeting Template (`m')

Captures structured meeting notes to meetings.org:

,* Meeting: Subject
<2026-01-13 Mon 14:00>
,** Attendees
Names...
,** Agenda

,** Notes

,** Action Items

Code Snippet Template (`s')

Captures code snippets to snippets.org:

,* Description
:PROPERTIES:
:CREATED: [2026-01-13 Mon 14:30]
:SOURCE: [[file:/path/to/source.ts::42]]
:END:

,#+BEGIN_SRC python
selected code here
,#+END_SRC

Bookmark Template (`b')

Saves bookmarks to bookmarks.org:

,* [[https://example.com][Page Title]]
[2026-01-13 Mon 14:30]

Optional notes about the bookmark...

Viewing All Templates

To see all available templates:

  • Run Scimax: List Capture Templates

  • Or press `C-c c' to see the template picker

Each template shows:

  • Its key (single letter shortcut)

  • Template name and description

  • Target file

Creating Custom Templates

Using the Template Creator

The easiest way to create a template is with the interactive creator:

  1. Run Scimax: Create Capture Template

  2. Enter a key (e.g., `r' for "Research note")

  3. Enter a name (e.g., "Research Note")

  4. Specify the target file (e.g., `research.org')

  5. Choose where to insert (end of file, under headline, date tree)

  6. Enter the template content

The template is saved to your VS Code settings and immediately available.

Manual Template Configuration

You can also define templates directly in settings.json:

{
  "scimax.capture.templates": [
    {
      "key": "r",
      "name": "Research Note",
      "description": "Capture research findings",
      "file": "research.org",
      "template": "* %^{Topic}\n%U\n\n%?",
      "target": {
        "type": "file+headline",
        "headline": "Research Notes"
      }
    }
  ]
}

Template Structure

Each template has these properties:

PropertyTypeRequiredDescription
keystringYesSingle character or short key
namestringYesDisplay name
descriptionstringNoLonger description
filestringYesTarget file path
templatestringYesTemplate content with placeholders
targetobjectNoWhere to insert content (see below)
propertiesobjectNoProperties to add to entry
tagsarrayNoTags to add to entry

Template Syntax

Templates use a powerful placeholder system to insert dynamic content.

Basic Placeholders

PlaceholderDescriptionExample
%?Final cursor position* TODO Task%?
%iInitial content (selection or clipboard)Description: %i
%tDate (inactive timestamp)[2026-01-13 Mon]
%TDate and time (active timestamp)<2026-01-13 Mon 14:30>
%uDate (inactive timestamp)[2026-01-13 Mon]
%UDate and time (inactive timestamp)[2026-01-13 Mon 14:30]
%nUser namejohn
%fSource file namesource.ts
%FSource file full path/path/to/source.ts
%%Literal percent sign%

Interactive Prompts

PlaceholderDescriptionExample
%^{prompt}Prompt for input%^{Task description}
%^{prompt\vert{}default}Prompt with default value%^{Priority\vert{}HIGH}
%^tPrompt for dateAsks for date input
%^TPrompt for date and timeAsks for date/time input
%^gPrompt for tagsPrompts for comma-separated tags

Expression Placeholders

PlaceholderDescriptionExample
%(format-time-string "%Y-%m")Custom date format2026-01
%(current-time)ISO timestamp2026-01-13T14:30:00.000Z

Examples

Simple TODO with prompt

,* TODO %^{Task}

When captured, prompts for "Task" and creates:

,* TODO Write documentation

Meeting template with multiple prompts

,* %^{Meeting subject}
%T
,** Attendees
%^{Attendees}
,** Agenda
%?

Prompts for subject and attendees, places cursor under Agenda.

Capture Targets

Capture targets determine where your captured content is inserted.

File Target (`file')

Appends to the end of the file.

{
  "target": {
    "type": "file"
  }
}

With prepend: true, inserts at the beginning (after file-level keywords):

{
  "target": {
    "type": "file",
    "prepend": true
  }
}

Headline Target (file+headline)

Inserts under a specific headline. If the headline doesn't exist, it's created.

{
  "target": {
    "type": "file+headline",
    "headline": "Inbox"
  }
}

This finds or creates a headline * Inbox and appends content as a child.

With prepend: true, inserts right after the headline:

{
  "target": {
    "type": "file+headline",
    "headline": "Inbox",
    "prepend": true
  }
}

Date Tree Target (file+datetree)

Creates a hierarchical date tree structure:

,* 2026
,** 2026-01 January
,*** 2026-01-13 Monday
,**** Your captured content here
{
  "target": {
    "type": "file+datetree"
  }
}

Perfect for journal entries and time-based organization.

Default Target

If no target is specified, content is appended to the end of the file:

{
  "file": "notes.org",
  "template": "* %^{Note}\n%?"
}

Running Capture

Capture Command

The main capture command opens the template picker:

  • Command: Scimax: Capture

  • Keybinding: C-c c

This shows all available templates. Select one to begin capture.

Capture by Key

If you know the template key, you can capture directly:

  • Command: Scimax: Capture by Key

  • Enter the template key (e.g., `t' for TODO)

Quick Capture Commands

For common captures, use dedicated quick capture commands:

Quick TODO

  • Command: Scimax: Quick Capture TODO

  • Keybinding: C-c t

Directly captures a TODO without showing the template picker.

Quick Note

  • Command: Scimax: Quick Capture Note

Directly captures a note.

Capture Process

  1. Invoke capture: Press C-c c or run a quick capture command

  2. Select template: Choose from the picker (or skip if using quick capture)

  3. Fill prompts: Enter values for any %^{prompt} placeholders

  4. Preview (optional): Review the captured content

  5. Confirm: Press "Capture" to file the content

The captured content is inserted at the target location, and you receive a confirmation message.

Advanced Capture Features

Capturing with Selection

When you have text selected:

  1. Select text in the editor

  2. Press `C-c c'

  3. Choose a template

The selected text is available as %i in your template. Perfect for:

  • Capturing code snippets

  • Quoting text

  • Collecting research excerpts

Capture Preview

Enable preview to review content before filing:

{
  "scimax.capture.showPreview": true
}

When enabled, you can:

  • See the expanded template content

  • Review formatting and placement

  • Cancel or confirm the capture

Auto-open After Capture

Configure whether to open the target file after capture:

{
  "scimax.capture.openAfterCapture": true
}

When enabled, the target file opens and the cursor jumps to the captured content.

Capture to Journal

Capture integrates seamlessly with the journal system.

Journal Capture Template

The built-in journal template (j) uses date tree targeting:

{
  "key": "j",
  "name": "Journal",
  "file": "journal.org",
  "template": "* %U %^{Entry title}\n%?",
  "target": {
    "type": "file+datetree"
  }
}

Custom Journal Captures

Create specialized journal capture templates:

Daily Reflection

{
  "key": "d",
  "name": "Daily Reflection",
  "file": "journal.org",
  "template": "* Daily Reflection\n** What went well\n%^{Wins}\n** What to improve\n%^{Improvements}\n** Tomorrow's focus\n%?",
  "target": {
    "type": "file+datetree"
  }
}

Quick Log Entry

{
  "key": "l",
  "name": "Log Entry",
  "file": "journal.org",
  "template": "* %U - %^{What happened?}",
  "target": {
    "type": "file+datetree"
  }
}

Integrating with Journal Directory

You can point capture templates to your journal directory:

{
  "scimax.capture.defaultDirectory": "~/scimax-journal",
  "scimax.capture.templates": [
    {
      "key": "j",
      "name": "Journal Entry",
      "file": "2026/01/13/2026-01-13.org",
      "template": "* %T %^{Entry}\n%?"
    }
  ]
}

Or use the journal's date structure dynamically with date tree targeting.

Capture to Inbox

A common GTD workflow uses an "inbox" for quick captures that are processed later.

Inbox Setup

  1. Create an inbox file (`inbox.org')

  2. Define a capture template targeting it

{
  "key": "i",
  "name": "Inbox",
  "file": "inbox.org",
  "template": "* %^{Quick capture}\n%U\n%?\n\nSource: %a"
}

Inbox with Categories

Use headlines to organize inbox items:

{
  "key": "it",
  "name": "Inbox - Task",
  "file": "inbox.org",
  "template": "* TODO %^{Task}\n%U",
  "target": {
    "type": "file+headline",
    "headline": "Tasks"
  }
}
{
  "key": "ii",
  "name": "Inbox - Idea",
  "file": "inbox.org",
  "template": "* %^{Idea}\n%U\n%?",
  "target": {
    "type": "file+headline",
    "headline": "Ideas"
  }
}

Creates structure:

,* Tasks
,** TODO Review pull request
[2026-01-13 Mon 14:30]

,* Ideas
,** Build automated testing framework
[2026-01-13 Mon 14:35]

Configuration

Settings Overview

SettingTypeDefaultDescription
scimax.capture.templatesarray[ ]Custom capture templates
scimax.capture.defaultDirectorystring""Default directory for capture files
scimax.capture.showPreviewbooleantrueShow preview before capture
scimax.capture.openAfterCapturebooleantrueOpen file after capture

Default Directory

Set a default directory for all capture files:

{
  "scimax.capture.defaultDirectory": "~/org"
}

Template file paths are resolved relative to this directory:

{
  "scimax.capture.defaultDirectory": "~/org",
  "scimax.capture.templates": [
    {
      "key": "t",
      "name": "Todo",
      "file": "todo.org",  // Resolves to ~/org/todo.org
      "template": "* TODO %^{Task}\n%?"
    }
  ]
}

File Path Resolution

Capture resolves file paths in this order:

  1. Absolute paths: /home/user/notes/todo.org - used as-is

  2. Home directory: `/org/todo.org - expands `'' to home directory

  3. Default directory: todo.org - resolves relative to defaultDirectory

  4. Workspace: todo.org - resolves relative to first workspace folder

Configuring Preview

Control whether to show preview before saving:

{
  "scimax.capture.showPreview": true
}

When enabled:

  • Preview shows the expanded template content

  • You can choose "Capture", "Preview", or "Cancel"

  • Preview opens content in a temporary editor

When disabled:

  • Content is captured immediately

  • Faster workflow for trusted templates

Auto-open Behavior

Control whether the target file opens after capture:

{
  "scimax.capture.openAfterCapture": true
}

When enabled:

  • Target file opens in editor

  • Cursor jumps to captured content

  • Useful for immediately expanding on the capture

When disabled:

  • Capture happens in background

  • You stay in your current file

  • Faster workflow for quick captures

Complete Example Configuration

{
  "scimax.capture.defaultDirectory": "~/org",
  "scimax.capture.showPreview": false,
  "scimax.capture.openAfterCapture": false,
  "scimax.capture.templates": [
    {
      "key": "t",
      "name": "Todo",
      "description": "Quick TODO capture",
      "file": "todo.org",
      "template": "* TODO %^{Task}\n%U\n%?"
    },
    {
      "key": "n",
      "name": "Note",
      "file": "notes.org",
      "template": "* %^{Title}\n%U\n\n%?\n\nSource: %a",
      "target": {
        "type": "file+headline",
        "headline": "Quick Notes"
      }
    },
    {
      "key": "j",
      "name": "Journal",
      "file": "journal.org",
      "template": "* %U %^{Entry}\n%?",
      "target": {
        "type": "file+datetree"
      }
    },
    {
      "key": "m",
      "name": "Meeting",
      "file": "meetings.org",
      "template": "* %^{Subject}\n%T\n** Attendees\n%^{Attendees}\n** Notes\n%?\n** Action Items\n",
      "properties": {
        "MEETING_DATE": "%t"
      },
      "tags": ["meeting"]
    }
  ]
}

Common Capture Workflows

GTD Workflow

Inbox Processing

  1. Quick capture everything: Use C-c ci to capture to inbox

  2. Process inbox regularly: Review inbox.org daily

  3. Refile to projects: Move items to appropriate project files

  4. Archive processed items: Keep inbox clean

Inbox Template

{
  "key": "i",
  "name": "Inbox",
  "file": "inbox.org",
  "template": "* %^{Capture}\n%U\n%?\n\nContext: %a"
}

Research Workflow

Collect Sources

{
  "key": "r",
  "name": "Research Source",
  "file": "research.org",
  "template": "* %^{Source}\n:PROPERTIES:\n:URL: %^{URL}\n:ADDED: %U\n:END:\n\n** Summary\n%?\n\n** Quotes\n%i",
  "target": {
    "type": "file+headline",
    "headline": "Sources"
  }
}

Usage:

  1. Select a quote from a paper/article

  2. Press `C-c c' → `r'

  3. Enter source name and URL

  4. The quote is captured in the "Quotes" section

Code Documentation Workflow

Capture Code Examples

{
  "key": "c",
  "name": "Code Example",
  "file": "code-snippets.org",
  "template": "* %^{Description}\n:PROPERTIES:\n:LANGUAGE: %^{Language|typescript|python|javascript}\n:SOURCE: %a\n:CREATED: %U\n:END:\n\n#+BEGIN_SRC %\\2\n%i\n#+END_SRC\n\n** Notes\n%?",
  "tags": ["code", "example"]
}

Usage:

  1. Select code in editor

  2. Press `C-c c' → `c'

  3. Describe the code and specify language

  4. Creates a documented code snippet with link back to source

Meeting Notes Workflow

Before Meeting

Capture meeting agenda:

{
  "key": "ma",
  "name": "Meeting Agenda",
  "file": "meetings.org",
  "template": "* MEETING %^{Subject}\nSCHEDULED: %^t\n** Attendees\n%^{Attendees}\n** Agenda\n%?\n** Notes\n\n** Action Items\n",
  "properties": {
    "MEETING_TYPE": "%^{Type|standup|planning|review|1on1}"
  }
}

During Meeting

Use quick note capture for rapid notes:

{
  "key": "mn",
  "name": "Meeting Note",
  "file": "meetings.org",
  "template": "* %T - %^{Note}\n%?",
  "target": {
    "type": "file+headline",
    "headline": "Meeting Notes"
  }
}

After Meeting

Capture action items:

{
  "key": "mt",
  "name": "Meeting Action Item",
  "file": "todo.org",
  "template": "* TODO %^{Action Item}\nDEADLINE: %^t\n:PROPERTIES:\n:MEETING: %^{Meeting}\n:ASSIGNED: %^{Assignee}\n:END:\n%?",
  "tags": ["meeting-action"]
}

Daily Planning Workflow

Morning Review

{
  "key": "p",
  "name": "Daily Plan",
  "file": "journal.org",
  "template": "* Daily Plan\n** Top 3 Priorities\n1. %^{Priority 1}\n2. %^{Priority 2}\n3. %^{Priority 3}\n** Schedule\n%?\n** Notes\n",
  "target": {
    "type": "file+datetree"
  }
}

Evening Review

{
  "key": "dr",
  "name": "Daily Review",
  "file": "journal.org",
  "template": "* Daily Review\n** Completed\n%^{What did you complete?}\n** Wins\n%^{What went well?}\n** Learn\n%^{What did you learn?}\n** Tomorrow\n%?",
  "target": {
    "type": "file+datetree"
  }
}

Knowledge Base Building

Capture Learnings

{
  "key": "l",
  "name": "Learning",
  "file": "knowledge.org",
  "template": "* %^{What did you learn?}\n:PROPERTIES:\n:TOPIC: %^{Topic|programming|design|business|other}\n:LEARNED: %U\n:SOURCE: %a\n:END:\n\n%?\n\n** Related\n",
  "tags": ["learning"]
}

Capture Questions

{
  "key": "q",
  "name": "Question",
  "file": "questions.org",
  "template": "* QUESTION %^{Question}\n%U\n\n** Context\n%?\n\n** Potential Answers\n\n** Resolution\n",
  "tags": ["question"]
}

When you find the answer, update the "Resolution" section.

Commands Reference

Main Commands

CommandDescriptionKeybinding
Scimax: CaptureOpen capture template pickerC-c c
Scimax: Capture by KeyCapture using template key
Scimax: Quick Capture TODOFast TODO captureC-c t
Scimax: Quick Capture NoteFast note capture
Scimax: Create Capture TemplateCreate new template interactively
Scimax: List Capture TemplatesView all available templates
Scimax: Configure Capture TemplatesOpen capture settings

Template Management Commands

CommandDescription
Scimax: Create Capture TemplateInteractive template creation
Scimax: List Capture TemplatesShow all templates
Scimax: Configure Capture TemplatesOpen settings.json for capture

Keybindings

Default Keybindings

KeybindingActionContext
C-c cOpen capture pickerGlobal
C-c tQuick TODO captureGlobal

Custom Keybindings

Add custom keybindings in keybindings.json (C-k C-s to open):

Quick Capture Note

{
  "key": "ctrl+c n",
  "command": "scimax.capture.note"
}

Capture to Inbox

{
  "key": "ctrl+c i",
  "command": "scimax.captureByKey",
  "args": "i"
}

Journal Capture

{
  "key": "ctrl+c j",
  "command": "scimax.captureByKey",
  "args": "j"
}

Context-aware Keybindings

Capture only when editing org files:

{
  "key": "ctrl+c c",
  "command": "scimax.capture",
  "when": "editorLangId == org"
}

Tips and Best Practices

Start Simple

Begin with a few basic templates:

  • TODO capture

  • Note capture

  • Journal entry

Add specialized templates as needs emerge.

Use Consistent File Organization

Keep capture files organized:

~/org/
├── inbox.org          # Unprocessed captures
├── todo.org           # Active tasks
├── projects/          # Project-specific files
│   ├── project-a.org
│   └── project-b.org
├── journal.org        # Journal entries
├── notes.org          # General notes
└── archive.org        # Completed items

Process Inbox Regularly

Set a schedule to process inbox.org:

  • Daily: Quick review and refile urgent items

  • Weekly: Deep review, refile everything

Use Tags for Filtering

Add tags to templates for easy filtering:

{
  "tags": ["meeting", "important"]
}

Later, search for :meeting: to find all meeting-related captures.

Combine with Agenda

Capture TODO items with timestamps to make them appear in the agenda:

,* TODO %^{Task}
SCHEDULED: %^t
%?

Create Domain-Specific Templates

For specialized work, create focused templates:

Bug Report Template

{
  "key": "bug",
  "name": "Bug Report",
  "file": "bugs.org",
  "template": "* BUG %^{Description}\n:PROPERTIES:\n:REPORTED: %U\n:SEVERITY: %^{Severity|high|medium|low}\n:COMPONENT: %^{Component}\n:END:\n\n** Steps to Reproduce\n%?\n\n** Expected Behavior\n\n** Actual Behavior\n\n** Environment\n",
  "tags": ["bug"]
}

Feature Request Template

{
  "key": "feat",
  "name": "Feature Request",
  "file": "features.org",
  "template": "* FEATURE %^{Feature}\n:PROPERTIES:\n:REQUESTED: %U\n:PRIORITY: %^{Priority|high|medium|low}\n:EFFORT: %^{Effort|small|medium|large}\n:END:\n\n** Description\n%?\n\n** Use Case\n\n** Technical Notes\n",
  "tags": ["feature"]
}

Disable Preview for Speed

For templates you trust, disable preview for faster capture:

{
  "scimax.capture.showPreview": false,
  "scimax.capture.openAfterCapture": false
}

This makes capture nearly instantaneous.

Use Keyboard-driven Workflow

Memorize keys for your most common captures:

  • `C-c c' → `t' → Task description → Enter (TODO)

  • `C-c c' → `j' → Entry title → Enter (Journal)

  • `C-c t' → Task → Enter (Quick TODO)

With practice, capture becomes muscle memory.

Troubleshooting

Template Not Appearing in Picker

  • Check `settings.json' for syntax errors

  • Ensure template has required fields: key, name, file, template

  • Reload window (`C-S-P' → `Reload Window')

Capture File Not Created

  • Check file path in template configuration

  • Ensure directory exists or use absolute path

  • Check `scimax.capture.defaultDirectory' setting

  • Verify write permissions

Template Placeholders Not Expanding

  • Verify placeholder syntax: %^{Prompt} not $^{Prompt}

  • Check for typos in placeholder names

  • Some placeholders require context (e.g., `%a' needs source file)

Cursor Position (`%?') Not Working

  • Ensure `%?' is in template

  • Open file after capture (scimax.capture.openAfterCapture: true)

  • The cursor jumps to `%?' position when file opens

Date Tree Not Creating Structure

  • Verify target type: "type": "file+datetree"

  • Ensure template is capturing to correct file

  • Check file for malformed existing date tree structure

Advanced Topics

Template Hooks (Future)

Future versions may support JavaScript hooks for advanced template behavior:

{
  "beforeCapture": "return { customData: 'value' }",
  "afterCapture": "console.log('Captured!')"
}

Dynamic Template Selection (Future)

Future versions may support conditional template selection based on context.

Template Inheritance (Future)

Future versions may support template inheritance for sharing common configuration.

Appendix

Complete Template Reference

FieldTypeRequiredDescription
keystringYesUnique template key (1-5 characters)
namestringYesDisplay name
descriptionstringNoLong description
filestringYesTarget file path
templatestringYesTemplate content with placeholders
typestringNoEntry type (entry, item, table-line)
targetobjectNoTarget location configuration
propertiesobjectNoProperties to add to entry
tagsarrayNoTags to add to entry
timestampbooleanNoWhether to add timestamp
immediatebooleanNoSkip confirmation before saving

Placeholder Reference

PlaceholderExpansion
%?Cursor position
%iInitial content (selection)
%aAnnotation link
%AAnnotation link with description
%lLiteral link
%cClipboard content
%tDate (inactive)
%TDate and time (active)
%uDate (inactive)
%UDate and time (inactive)
%^tPrompt for date
%^TPrompt for date and time
%^gPrompt for tags
%^{prompt}Interactive prompt
%^{prompt\vert{}default}Prompt with default
%kTemplate key
%KTemplate name
%nUser name
%fSource file name
%FSource file path
%%Literal %
%\nNewline
%(expression)Evaluated expression

Target Type Reference

Target TypeDescription
fileEnd or beginning of file
headlineUnder specific headline
file+headlineFile then headline
file+datetreeHierarchical date tree

Example Templates Library

See examples/capture-templates.json in the Scimax repository for a collection of ready-to-use templates for various workflows.

Navigation