org-workspace
Python library that makes org-mode files first-class citizens for AI agent workflows.
If you need to read and write org-mode task lists from Python — create tasks, transition states, query deadlines, or coordinate multiple agents over a shared org file — org-workspace is the library for it.
Built on a vendored fork of orgparse with write support (PR #77), it adds:
- Multi-file workspace management — load a directory, track dirty files, save only what changed
- Safe serialization — round-trip invariant: unmodified nodes are byte-identical on save
- GTD query layer —
agenda(),deadlines(),overdue(),next_action(),ai_tasks() - Concurrency primitives —
TaskClaim(atomic claiming),OptimisticLock,FileLock - Dependency DAG — parse
DEPENDS_ONproperties, topological sort,ready_tasks()
Install
pip install org-workspace
Quick start
from pathlib import Path
from org_workspace import OrgWorkspace, Query
# Load workspace
ws = OrgWorkspace(roots=[Path.home() / "org"])
# Query tasks
q = Query(ws)
next_up = q.next_action()
ai_tasks = q.ai_tasks(states=["TODO"])
deadlines = q.deadlines(days=14)
# Create a task
task = ws.create_node(
file=Path.home() / "org" / "inbox.org",
heading="Research org-mode parsing",
state="TODO",
tags=["AI", "research"],
body="Investigate approaches for org-mode mutation",
)
# Transition state
ws.transition(task, "DONE", agent="my-agent")
# Save changes (only modified files are written)
ws.save()
Documentation
- Quick start guide — from install to first AI-readable task list in five minutes
- Comparison: org-workspace vs orgparse vs organice — factual feature comparison for developers choosing a library
Features
Workspace management
- Multi-file loading with dirty-file tracking
- Content-addressed ID generation with dedup
- Round-trip safe serialization (zero byte-diff on unchanged files)
NodeView pattern
- Stateless, non-caching read-only views over org nodes
- Generation-counter staleness detection
- Safe for concurrent access patterns
Mutations (via OrgWorkspace)
create_node()— create headings with state, tags, properties, bodyrefile()— move nodes between files preserving subtreeremove_node()— delete nodes from filestransition()— state changes with LOGBOOK entriesset_property(),set_heading(),set_tags()
Query system
agenda(),deadlines(),overdue(),stale()by_state(),by_tag(),by_property()ai_tasks()— find:AI:tagged tasks for agent executionnext_action()— GTD next action selection
Dependency DAG (Plan)
- Parse
DEPENDS_ONproperties into dependency graphs - Topological sort for execution ordering
ready_tasks(),blocked_tasks(), cycle detection
Concurrency
FileLock— file-level lockingOptimisticLock— hash-based conflict detectionTaskClaim— agent-level task claiming with staleness timeoutmulti_lock()— deadlock-free multi-file locking (lexicographic order)
LOGBOOK and session logging
add_logbook_entry(),add_state_change_entry(),add_clock_entry()SessionLogfor buffered per-session logging
Archive
archive_node()— archive with hierarchy preservationarchive_done()— bulk archive completed tasksarchive_plan()— archive entire dependency plans
Context extraction (for AI agents)
build_execution_context()— structured context from task propertiesget_prompt()— PROMPT property with body fallbackget_role()— agent persona from ROLE property
GTD state configuration
from org_workspace import StateConfig
# Default GTD states
config = StateConfig.default()
# sequences: {"gtd": ["TODO", "NEXT", "WAITING", "DONE"]}
# With nightshift (autonomous execution) states
config = StateConfig.nightshift()
# adds: QUEUED, EXECUTING, REVIEW, FAILED
License
BSD 2-Clause. See LICENSE.
This library includes a vendored copy of orgparse (BSD 2-Clause, Copyright 2012 Takafumi Arakaki) with modifications from datacore-one/orgparse PR #77 adding write support.
Metadata
Release files for org-workspace 0.5.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| org_workspace-0.5.4.tar.gz | 85.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| org_workspace-0.5.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 153.3 kB
Release files / org_workspace-0.5.4.tar.gz
| Download URL | org_workspace-0.5.4.tar.gz |
|---|---|
| Size | 85.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5f7bdb1611c348c48d8db457532d8fb81076db22fd70e4fd01c99ff859d9ab14
|
|
BLAKE2b-256 checksum How to use checksums |
b20fc4f8abfba7ed39e2671cd65cc805543be1588c639623bfc25593e2803f88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / org_workspace-0.5.4-py3-none-any.whl
| Download URL | org_workspace-0.5.4-py3-none-any.whl |
|---|---|
| Size | 67.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d43a11b401ef52789a35f953332e8a99e842f09bbd6d03ece8473d8a3b6f9b09
|
|
BLAKE2b-256 checksum How to use checksums |
2a3a9d58ef1aac4b920ba0982a5e7978f9660ce82e2150c6a58997a212c04c1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|