Skip to main content

org-workspace

CI PyPI

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 layeragenda(), deadlines(), overdue(), next_action(), ai_tasks()
  • Concurrency primitivesTaskClaim (atomic claiming), OptimisticLock, FileLock
  • Dependency DAG — parse DEPENDS_ON properties, 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()

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, body
  • refile() — move nodes between files preserving subtree
  • remove_node() — delete nodes from files
  • transition() — state changes with LOGBOOK entries
  • set_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 execution
  • next_action() — GTD next action selection

Dependency DAG (Plan)

  • Parse DEPENDS_ON properties into dependency graphs
  • Topological sort for execution ordering
  • ready_tasks(), blocked_tasks(), cycle detection

Concurrency

  • FileLock — file-level locking
  • OptimisticLock — hash-based conflict detection
  • TaskClaim — agent-level task claiming with staleness timeout
  • multi_lock() — deadlock-free multi-file locking (lexicographic order)

LOGBOOK and session logging

  • add_logbook_entry(), add_state_change_entry(), add_clock_entry()
  • SessionLog for buffered per-session logging

Archive

  • archive_node() — archive with hierarchy preservation
  • archive_done() — bulk archive completed tasks
  • archive_plan() — archive entire dependency plans

Context extraction (for AI agents)

  • build_execution_context() — structured context from task properties
  • get_prompt() — PROMPT property with body fallback
  • get_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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

org_workspace-0.5.2.tar.gz (82.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

org_workspace-0.5.2-py3-none-any.whl (67.4 kB view details)

Uploaded Python 3

File details

Details for the file org_workspace-0.5.2.tar.gz.

File metadata

  • Download URL: org_workspace-0.5.2.tar.gz
  • Upload date:
  • Size: 82.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for org_workspace-0.5.2.tar.gz
Algorithm Hash digest
SHA256 1969f0010298814b6e3d9089b3ea702ee2bd5f8a48a79a9ed0ceab751fa45037
MD5 3f2cf9597575f3de6701682121b5cd27
BLAKE2b-256 7e6ea60a46fdb50495e4b39339a0300a1b4f0c90e0c4fd845bb3999bd91e2c91

See more details on using hashes here.

File details

Details for the file org_workspace-0.5.2-py3-none-any.whl.

File metadata

  • Download URL: org_workspace-0.5.2-py3-none-any.whl
  • Upload date:
  • Size: 67.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for org_workspace-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 45f08e1d34296af04844e06f667674ccccce4e4b615f3ab4805e04cc5d10baa5
MD5 9ef0ba524c212a7d22c23bbaa25e0a56
BLAKE2b-256 7d98e309db59e8f430d6254f4bcba4ef3dbe34b8de16681b4d9e6d13361e283a

See more details on using hashes here.

Release history Release notifications | RSS feed

0.5.3

2 files

This release

0.5.2 This release

2 files

0.5.1

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page