VS Code
Org2's most complete editor integration today is VS Code.
Install instructions
The extension currently lives in this repository at editors/vscode-org2/.
Build Org2 CLI and repository artifacts:
git clone https://github.com/aviaviavi/org2.git
cd org2
npm ci
npm run build
Install extension dependencies:
cd editors/vscode-org2
npm ci
Install/run the extension:
Use VS Code Extension Development Host from this folder, or
Package to VSIX and install via
Install from VSIX....
Ensure
org2CLI is available:
Repo-built fallback is supported, or
Provide
org2on yourPATH.
For settings and command behavior details, see editors/vscode-org2/README.md and Tooling reference.
Keyboard shortcuts
This list is comprehensive for current default bindings declared in editors/vscode-org2/package.json.
Direct bindings
| Linux/Windows | macOS | Command ID | Action |
|---|---|---|---|
| ctrl+alt+t | ctrl+alt+t | org2.toggleTodo | Toggle TODO status |
| ctrl+alt+o | ctrl+alt+o | org2.toggleFoldHere | Toggle fold at cursor |
| ctrl+alt+d | ctrl+alt+d | org2.debugFoldingRanges | Debug folding ranges |
| j | j | cursorDown | Visible-line down (with VSCodeVim + org2.vim.visibleLineNavigation=true) |
| k | k | cursorUp | Visible-line up (with VSCodeVim + org2.vim.visibleLineNavigation=true) |
Power keymap
When org2.keymap.power=true (default), prefix is:
Linux/Windows:
ctrl+;macOS:
cmd+;
Then use the second key (or namespace chord).
Agenda
| Linux/Windows | macOS | Command ID | Action |
|---|---|---|---|
| ctrl+; a o | cmd+; a o | org2.openAgenda | Open agenda |
| ctrl+; a r | cmd+; a r | org2.refreshAgenda | Refresh agenda |
| ctrl+; a f | cmd+; a f | org2.pickAgendaFilter | Agenda filter picker |
Roam
| Linux/Windows | macOS | Command ID | Action |
|---|---|---|---|
| ctrl+; r b | cmd+; r b | org2.openBacklinks | Open backlinks pane |
| ctrl+; r h | cmd+; r h | org2.roamShowBacklinksById | Show backlinks for prompted link/ID |
| ctrl+; r l | cmd+; r l | org2.roamCopyIdLink | Copy ID link for current heading/file |
| ctrl+; r c | cmd+; r c | org2.roamCopyIdLinkById | Copy ID link for prompted target |
| ctrl+; r i | cmd+; r i | org2.roamInsertBacklink | Insert backlink |
| ctrl+; r o | cmd+; r o | org2.roamOpenId | Open ID link target |
| ctrl+; r p | cmd+; r p | org2.roamOpenBacklink | Open backlink source (current heading/file) |
| ctrl+; r g | cmd+; r g | org2.roamOpenBacklinkById | Open backlink source by prompt |
| ctrl+; r t | cmd+; r t | org2.roamDailiesGotoToday | Dailies: today |
| ctrl+; r y | cmd+; r y | org2.roamDailiesGotoYesterday | Dailies: yesterday |
| ctrl+; r m | cmd+; r m | org2.roamDailiesGotoTomorrow | Dailies: tomorrow |
| ctrl+; r d | cmd+; r d | org2.roamDailiesGotoDate | Dailies: pick date |
| ctrl+; r n | cmd+; r n | org2.roamNodeNew | New roam node (selected text becomes the default title) |
| ctrl+; r s | cmd+; r s | org2.roamDbSync | Roam DB sync |
AI lifecycle
| Linux/Windows | macOS | Command ID | Action |
|---|---|---|---|
| ctrl+; i v | cmd+; i v | org2.aiReviewWorkspace | Review workspace / active file |
| ctrl+; i r | cmd+; i r | org2.aiMarkReviewed | Mark draft reviewed |
| ctrl+; i x | cmd+; i x | org2.aiMarkRejected | Mark draft rejected |
| ctrl+; i d | cmd+; i d | org2.aiMarkDeferred | Mark draft deferred |
TODO status
| Linux/Windows | macOS | Command ID | Action |
|---|---|---|---|
| ctrl+; t t | cmd+; t t | org2.setTodoStatus | Set TODO (args: todo) |
| ctrl+; t i | cmd+; t i | org2.setTodoStatus | Set IN_PROGRESS (args: in_progress) |
| ctrl+; t d | cmd+; t d | org2.setTodoStatus | Set DONE (args: done) |
| ctrl+; t c | cmd+; t c | org2.setTodoStatus | Set CANCELED (args: canceled) |
Planning, archive, capture, export, folding
| Linux/Windows | macOS | Command ID | Action |
|---|---|---|---|
| ctrl+; s | cmd+; s | org2.setScheduled | Set SCHEDULED (prompt date) |
| ctrl+; s t | cmd+; s t | org2.setScheduledToday | Set SCHEDULED to today |
| ctrl+; d | cmd+; d | org2.setDeadline | Set DEADLINE (prompt date) |
| ctrl+; d t | cmd+; d t | org2.setDeadlineToday | Set DEADLINE to today |
| ctrl+; x | cmd+; x | org2.archiveSubtree | Archive subtree |
| ctrl+; x r | cmd+; x r | org2.refileSubtree | Refile subtree |
| ctrl+; h left | cmd+; h left | org2.promoteSubtree | Promote subtree |
| ctrl+; h right | cmd+; h right | org2.demoteSubtree | Demote subtree |
| ctrl+; h up | cmd+; h up | org2.moveSubtreeUp | Move subtree up |
| ctrl+; h down | cmd+; h down | org2.moveSubtreeDown | Move subtree down |
| ctrl+; g a | cmd+; g a | org2.graphAuditWorkspace | Graph audit workspace |
| ctrl+; c q | cmd+; c q | org2.captureQuickEntry | Quick capture |
| ctrl+; p h | cmd+; p h | org2.exportCurrentFileHtml | Export current file HTML |
| ctrl+; p w | cmd+; p w | org2.exportWorkspaceHtml | Export workspace HTML |
| ctrl+; 1 | cmd+; 1 | editor.foldLevel1 | Fold level 1 |
| ctrl+; 2 | cmd+; 2 | editor.foldLevel2 | Fold level 2 |
| ctrl+; 3 | cmd+; 3 | editor.foldLevel3 | Fold level 3 |
| ctrl+; 4 | cmd+; 4 | editor.foldLevel4 | Fold level 4 |
Commands without default keybindings
Available from command palette (Cmd/Ctrl+Shift+P):
org2.refreshBacklinksorg2.searchWorkspaceorg2.queryWorkspaceorg2.compileWorkspaceCorpusorg2.roamLinkifyPreview(shows exact replacements plus review-only semantic/alias represented-node suggestions)org2.roamLinkifyApply(applies exact safe replacements only)org2.roamGraph(includes linkify maintenance suggestions with source ranges)org2.aiSuggestLinks(writes a review-only AI-assisted link/entity suggestion report; canonical notes are not edited)org2.formatWorkspaceCheckorg2.formatWorkspaceApplyorg2.formatCurrentFileCheckorg2.formatCurrentFilePreviewDifforg2.formatCurrentFileApplyorg2.pickAgendaStatusFilterorg2.openAgendaItemorg2.setTodoTODOorg2.setTodoInProgressorg2.setTodoDoneorg2.setTodoCanceledorg2.setScheduledTomorroworg2.setScheduledNextWeekorg2.setScheduledNextMonthorg2.cryptDecryptSubtreeorg2.cryptEncryptSubtreeorg2.cryptReencryptSubtree
Set org2.crypt.recipients to the default GPG recipients that should be able to open newly encrypted subtrees, such as your personal/device key plus an agent key. org2.crypt.recipientFiles can point at armored public-key files. VS Code passes those recipients through to the CLI for encrypt/re-encrypt, while decrypt can still use the unlocked matching private key.
For selective sharing, put recipients on the subtree itself instead of in global VS Code settings:
* Private note shared with an agent :crypt:
:PROPERTIES:
:CRYPT_RECIPIENT_FILE: keys/agent-public.asc
:END:
This body is encrypted to the listed recipient file when you run Org2: Encrypt Subtree.
:CRYPT_RECIPIENT: / :CRYPT_RECIPIENTS: accept GPG recipient identifiers. :CRYPT_RECIPIENT_FILE: / :CRYPT_RECIPIENT_FILES: accept armored public-key files. Relative file paths are resolved from the Org2 file containing the subtree, which keeps shared corpora portable across devices.
org2.refileSubtreeorg2.roamOpenTitleorg2.roamShowBacklinksorg2.rerunAutoFoldorg2.debugListLinksorg2.graphAuditWorkspaceorg2.aiReviewWorkspaceorg2.aiMarkReviewedorg2.aiMarkRejectedorg2.aiMarkDeferredorg2.promoteSubtreeorg2.demoteSubtreeorg2.moveSubtreeUporg2.moveSubtreeDown