About dbos-python
A best-practices skill for developers building fault-tolerant Python applications with DBOS durable workflows. It covers setup, workflow design, queues, communication, testing, and migration to DBOS Python 3.x.
Key features
- 01DBOS Python 3.x guidance
- 02Workflow and step design
- 03Queue and concurrency practices
- 04Workflow communication patterns
- 05Testing and 2.x migration
Use cases
- 01Adding DBOS to a Python application
- 02Designing durable workflows and steps
- 03Applying queues for concurrency control
- 04Upgrading DBOS Python 2.x code
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dbos-inc/ agent-skills --skill dbos-pythonAfter installing, type/dbos-pythonin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
AGENTS.mdreferences/_sections.mdadvanced-async.mdadvanced-patching.mdadvanced-serialization.mdadvanced-shared-database.mdadvanced-upgrading-v3.mdadvanced-versioning.mdclient-enqueue.mdclient-setup.mdcomm-events.mdcomm-messages.mdcomm-streaming.mdlifecycle-config.mdlifecycle-fastapi.mdpattern-classes.mdpattern-debouncing.mdpattern-idempotency.mdpattern-scheduled.mdpattern-sleep.mdqueue-basics.mdqueue-concurrency.mdqueue-deduplication.mdqueue-delay.mdqueue-listening.mdqueue-management.mdqueue-partitioning.mdqueue-rate-limiting.mdstep-basics.mdstep-retries.mdDetails
From the project READMEDBOS Python Best Practices
Guide for building reliable, fault-tolerant Python applications with DBOS durable workflows. Targets DBOS Python 3.x.
When to Apply
Reference these guidelines when:
- Adding DBOS to existing Python code
- Creating workflows and steps
- Using queues for concurrency control
- Implementing workflow communication (events, messages, streams)
- Configuring and launching DBOS applications
- Using DBOSClient from external applications
- Testing DBOS applications
- Upgrading DBOS Python 2.x code to 3.x
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Lifecycle | CRITICAL | lifecycle- |
| 2 | Workflow | CRITICAL | workflow- |
| 3 | Step | HIGH | step- |
| 4 | Queue | HIGH | queue- |
| 5 | Communication | MEDIUM | comm- |
| 6 | Pattern | MEDIUM | pattern- |
| 7 | Testing | LOW-MEDIUM | test- |
| 8 | Client | MEDIUM | client- |
| 9 | Advanced | LOW | advanced- |
Critical Rules
DBOS Configuration and Launch
A DBOS application MUST configure and launch DBOS inside its main function:
import os
from dbos import DBOS, DBOSConfig
@DBOS.workflow()
def my_workflow():
pass
if __name__ == "__main__":
config: DBOSConfig = {
"name": "my-app",
"application_version": "0.1.0",
"system_database_url": os.environ.get("DBOS_SYSTEM_DATABASE_URL"),
}
DBOS(config=config)
DBOS.launch()
When creating a new application, set application_version to "0.1.0". If omitted, DBOS derives an opaque hash from workflow source code. When editing an existing application, leave its configured version alone — changing it is a deployment decision (see references/advanced-versioning.md).
Workflow and Step Structure
Workflows are comprised of steps. Any function performing complex operations or accessing external services must be a step:
@DBOS.step()
def call_external_api():
return requests.get("https://api.example.com").json()
@DBOS.workflow()
def my_workflow():
result = call_external_api()
return result
Key Constraints
- Do NOT call
DBOS.start_workfloworDBOS.recvfrom a step - Do NOT use threads to start workflows - use
DBOS.start_workflowor queues - Workflows MUST be deterministic - non-deterministic operations go in steps
- Do NOT create/update global variables from workflows or steps
- In
async defcode, use the_asyncvariants of DBOS methods (await DBOS.start_workflow_async(...),send_async,recv_async,sleep_async,register_queue_async, ...): many synchronous DBOS methods (such asDBOS.sleep,DBOS.recv,DBOS.send,DBOS.set_event,DBOS.get_event, andDBOS.register_queue) raiseRuntimeErrorwhen called while an event loop is running - Register queues and create schedules AFTER
DBOS.launch(); create datasources BEFORE it - Connecting to DBOS Conductor (
conductor_key, or deploying to DBOS Cloud) requirespip install "dbos[enterprise]"
Removed in DBOS 3.0 (never generate these)
@DBOS.transaction / DBOS.sql_session / application_database_url (use datasources), Queue(...) (use DBOS.register_queue), partition_queue / priority_enabled, @DBOS.scheduled (use DBOS.apply_schedules), and DBOS(fastapi=...) / DBOS(flask=...). To migrate existing 2.x code, see references/advanced-upgrading-v3.md.
How to Use
Read individual rule files for detailed explanations and examples:
references/lifecycle-config.md
references/workflow-determinism.md
references/queue-concurrency.md
references/advanced-upgrading-v3.md
references/advanced-shared-database.md
If multiple applications share one system database, see references/advanced-shared-database.md.