macOS Workspace
Org2 Workspace is the native macOS client for working with an Org2 corpus. It is an alpha app in apps/macos/Org2Workspace, built as a Swift Package, and uses the same parser/CLI output as the rest of Org2 instead of maintaining a private database.
The app is currently best understood as a local workspace shell for dogfooding the product direction: global capture, agenda review, file navigation, search, rendered block editing, meeting capture, OpenClaw handoff, knowledge-node creation, and crypt workflows over normal files.
Screenshots
These screenshots are captured from the synthetic corpus in examples/macos-workspace-demo so public docs never depend on private notes.




Current surfaces
The sidebar exposes the main workspace surfaces:
Agenda :: review scheduled/deadline work across the selected corpus, filter items, switch agenda modes, mutate TODO/planning state, and open the selected item in the detail pane.
Files :: scan
.org2,.org, and Markdown files, filter them, and quick-open a file with keyboard shortcuts.Search :: run literal, case-insensitive full-text search across
.org2and.orgfiles under the selected corpus, then open results with source context.Meetings :: record or import local audio, create meeting/transcript artifacts under the corpus, and keep transcription provenance in Org2 files.
OpenClaw Chat :: send selected workspace context to a configured OpenClaw endpoint while keeping the conversation state local to the app.
Global capture is available while the app is running. Cmd-Ctrl-Return opens a capture modal from anywhere on macOS, and the in-app Capture command uses the same path. Captures append to today's daily note, using roam.dailiesDir from org2.json when configured. The modal can write notes or TODOs, set TODO state, priority, tags, scheduled/deadline dates, and mark a capture ready for agent handoff. The paste control accepts text, URLs, local files, and pasted image data; local files and images are copied into attachments/ and linked from the capture.
The detail pane can render a selected file, agenda item, search result, backlink, meeting note, or agent thread. It supports both raw source editing and structured rendered-block editing.
Document editing
The rendered editor is meant to make Org-shaped text feel native without hiding the source file. Current editing affordances include:
heading, planning, keyword, property drawer, paragraph, list item, media, quote, source, and table block editors,
block selection, insertion, duplication, deletion, movement, and folding,
inline editing for links, timestamps, and markup,
TODO, priority, tag, planning, property, and checkbox quick edits,
source block execution for supported local languages,
syntax-highlighted raw text editing with autosave-oriented block updates.
The important product rule is that the app should write ordinary Org2 text. Users should be able to inspect every change in Git or another editor.
Meetings
Org2 Workspace records meetings as local corpus artifacts. A meeting write normally creates an audio file, a meeting note, and a transcript artifact under meetings/.
Transcription is local-first. The app tries a configured ORG2_WORKSPACE_WHISPER_COMMAND, then common whisper.cpp commands, then the OpenAI Whisper CLI. If no local transcriber is available, it still writes the meeting artifacts with :transcription_status: unavailable rather than uploading private audio.
See Org2 meetings for the artifact shape and transcriber resolution order.
OpenClaw and agents
The app includes OpenClaw chat for sending messages with current workspace context.
The chat composer sends with Return and inserts a newline with Cmd-Return. The Dictate control records a short local microphone note, transcribes it with the same local Whisper resolution path used by meeting capture, and sends the transcript as a normal OpenClaw message.
This is deliberately a handoff boundary. The corpus stores selected context, transcript references, generated artifacts, and durable outputs; the external agent can act on that context without the Mac app becoming the only source of truth. Generated work stays in normal corpus zones such as views/ or compiled/ until a person reviews or promotes it.
Org-crypt
The app includes configuration and run actions for GPG-backed :crypt: subtrees. It can encrypt plaintext :crypt: subtrees on save, decrypt selected encrypted subtrees for review, manage recipient lists, and use the macOS keychain for the optional passphrase workflow.
Search and knowledge creation
The Search surface calls org2 search with the selected corpus root, recursive scanning, a 50-result limit, one line of context, and JSON output. It is a literal text lookup, not semantic/vector search: it matches case-insensitive text in normal .org2 and .org files and returns cited file/line snippets with nearest-heading metadata. Archive files and directories stay excluded.
The same surface includes a New Node action for creating an ID-backed Org2 note in the configured roam/index directory. It belongs with search and backlinks because node creation is part of navigating and extending the knowledge graph.
The next knowledge-browser work should make this more useful by adding graph-neighborhood views, link insertion, backlink-driven navigation, and broken-link repair.
Keyboard model
The app has global navigation shortcuts for major surfaces and local keyboard loops for agenda/document work.
High-value shortcuts include:
Cmd-1throughCmd-5for primary surfaces,Cmd-6for OpenClaw Chat,Cmd-P/Cmd-Kfor quick open,Cmd-Ctrl-Returnfor system-wide capture while the app is running,Cmd-7,Cmd-8, andCmd-9for today/yesterday/tomorrow daily notes,agenda-local
j/knavigation,/filtering, and TODO/planning shortcuts,document-local block navigation, editing, insertion, folding, duplication, movement, and deletion shortcuts.
Use the in-app keyboard shortcuts sheet for the full current map.
Build and run
From the repository root:
npm install
npm run build
cd apps/macos/Org2Workspace
swift run Org2Workspace
The app expects dist/cli.js and dist/parse.js to exist. If the app cannot find the repo root automatically, set ORG2_REPO_ROOT before launching:
ORG2_REPO_ROOT=/path/to/org2 swift run Org2Workspace
To refresh the public macOS screenshots from the synthetic demo corpus:
npm run screenshots:macos
Next priorities
The recommended lead priority remains refiling and deeper capture routing.
The app still needs the rest of the daily-driver capture workflow:
refile into existing files/headings,
effort controls and richer templates at capture time,
an acceptance path where captured work appears in agenda and the resulting
.org2text remains clean.
Meeting promotion, knowledge browsing, and packaging can proceed in parallel as long as they preserve shared write semantics: meeting promotion should create ordinary TODOs/notes, the knowledge browser should reuse IDs/backlinks rather than private graph state, and packaging should verify the same CLI/parser artifacts the app actually calls.