Skip to main content

Durable workflow execution engine with time-travel debugging

Project description

Contd.ai

PyPI version PyPI Downloads Python 3.10+ License: BSL 1.1

The Durable Execution Engine for Agentic Workflows.

Contd.ai is a lightweight, multi-tenant framework designed to build, run, and recover long-running AI agent workflows. It provides durable execution guarantees, meaning your agents can pause, resume, crash, and recover exactly where they left off—without losing state or context.

Key Features

  • Durable Execution: Workflows are resumable by default. State is persisted after every step.
  • Multi-Tenancy: Built-in organization isolation. Data and execution contexts are strictly scoped to organizations.
  • Epistemic Savepoints: specialized markers for AI agents to save their logic state (hypotheses, goals, decisions) alongside execution state.
  • Hybrid Recovery: Fast restoration using snapshots + event replay.
  • Idempotency: Automatic retries and de-duplication of steps.
  • Secure API: JWT-based user authentication and Scoped API Keys for service interactions.

Architecture

Contd.ai follows a layered architecture:

  • SDK (contd.sdk): Python decorators (@workflow, @step) to define workflows. Handles context propagation and serialization.
  • Engine (contd.core): The brain. Manages the event loop, recovery logic, and lease management.
  • API (contd.api): FastAPI interactions for submitting workflows, querying status, and time-travel.
  • Persistence (contd.persistence): Pluggable storage adapters. Currently supports Postgres (Journal/Leases) and S3 (Snapshots).

Project Structure

contd/
├── api/            # FastAPI routes & gRPC extensions
├── core/           # Execution Engine, Auth, Recovery
├── models/         # Pydantic & Dataclass entity definitions
├── persistence/    # DB Adapters (SQL, S3) & Journal logic
├── sdk/            # User-facing decorators & Context
└── observability/  # Metrics & Tracing

sdks/
├── typescript      # TypeScript/Node.js SDK
├── go              # Go SDK
└── java            # Java SDK (Enterprise)

Client Libraries

Contd provides SDKs for multiple languages:

Language Package Install
Python contd pip install contd
TypeScript/Node.js @contd.ai/sdk npm install @contd.ai/sdk
Go github.com/bhavdeep98/contd.ai/sdks/go go get github.com/bhavdeep98/contd.ai/sdks/go
Java ai.contd:contd-sdk Coming soon

See the sdks/ directory for full documentation on each SDK.

Getting Started

Prerequisites

  • Python 3.10+
  • PostgreSQL (Local or Remote)

Installation

From PyPI (Recommended):

pip install contd

View on PyPI

With optional dependencies:

pip install contd[postgres]      # PostgreSQL support
pip install contd[redis]         # Redis support
pip install contd[s3]            # S3 storage support
pip install contd[observability] # Metrics & tracing
pip install contd[all]           # Everything

From Source:

git clone https://github.com/bhavdeep98/contd.ai.git
cd contd.ai
pip install -e .

Database Setup

  1. Create a PostgreSQL database.
  2. Run the schema script to initialize tables:
psql -d contd_db -f contd/persistence/schema.sql

Running the Server

Start the API and gRPC server:

python -m contd.api.server

The server listens on:

  • HTTP API: http://localhost:8000
  • gRPC: localhost:50051

Authentication

1. User Signup & Login

Contd uses JWT for user sessions.

Signup:

POST /v1/auth/signup
Content-Type: application/json

{
  "email": "dev@contd.ai",
  "password": "securepassword",
  "full_name": "Developer"
}

Login:

POST /v1/auth/token
Content-Type: application/x-www-form-urlencoded

username=dev@contd.ai&password=securepassword

Returns: access_token

2. Create Organization & API Key

Create an organization to scope your workflows.

Create Org:

POST /v1/auth/organizations
Authorization: Bearer <access_token>

{ "name": "My AI Team" }

Generate API Key:

POST /v1/auth/apikeys
Authorization: Bearer <access_token>
X-Organization-Id: <org_id>

{ "name": "Production Agent", "scopes": ["workflow:write"] }

Usage Example

Defining a Workflow

from contd.sdk.decorators import workflow, step
from contd.sdk.context import ExecutionContext

@step
def research_topic(topic: str):
    # Simulate work
    return {"summary": f"Research on {topic} complete."}

@step
def draft_content(context: dict):
    # Uses previous step output
    return {"draft": f"Draft based on {context['summary']}"}

@workflow
def blog_agent(topic: str):
    data = research_topic(topic)
    final = draft_content(data)
    return final

Triggering a Workflow

Use your API Key to trigger the workflow via HTTP:

POST /v1/workflows
X-API-Key: sk_live_...

{
  "workflow_name": "blog_agent",
  "input": { "topic": "AI Agents" }
}

CLI Usage

Contd includes a powerful CLI for local development and workflow management.

Installation

pip install -e .

Initialize a Project

contd init                    # Initialize with SQLite (default)
contd init --backend postgres # Initialize with Postgres

Run a Workflow

contd run my_workflow --input '{"key": "value"}'
contd run my_workflow -f input.json

Check Workflow Status

contd status <workflow_id>

Resume a Suspended Workflow

contd resume <workflow_id>

Inspect Workflow State

contd inspect <workflow_id>           # Basic info
contd inspect <workflow_id> --verbose # Full state and events

Time-Travel Debugging

contd time-travel <workflow_id> <savepoint_id>      # Create new workflow from savepoint
contd time-travel <workflow_id> <savepoint_id> --dry-run # Preview without creating

View Execution Logs

contd logs <workflow_id>
contd logs <workflow_id> -n 100 -l DEBUG # More lines, debug level

List Workflows

contd list                    # All workflows
contd list --status running   # Filter by status

Testing

Run the test suite:

pytest tests/

Documentation

Document Description
Quickstart Guide Get started in 5 minutes
Architecture System design and components
API Reference Complete REST/gRPC/SDK reference
Metrics Setup Observability configuration
Troubleshooting Common issues and solutions
Contributing How to contribute

Examples

See the examples/ directory for 12+ real-world workflow examples:

  • Basic pipelines and error handling
  • AI agents with tools
  • RAG pipelines
  • E-commerce order processing (saga pattern)
  • ETL workflows
  • Human-in-the-loop approvals
  • Batch processing
  • Webhook integrations
  • Research and code review agents
  • Customer support automation

Migration Guides

From Guide
LangChain LangChain Migration Guide
Temporal Temporal Migration Guide

License

Business Source License 1.1 - see LICENSE for details.

Free for non-commercial use. Converts to Apache 2.0 on January 27, 2030. Contact licensing@contd.ai for commercial licensing.

Project details


Download files

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

Source Distribution

contd-0.1.4.tar.gz (111.9 kB view details)

Uploaded Source

Built Distribution

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

contd-0.1.4-py3-none-any.whl (107.5 kB view details)

Uploaded Python 3

File details

Details for the file contd-0.1.4.tar.gz.

File metadata

  • Download URL: contd-0.1.4.tar.gz
  • Upload date:
  • Size: 111.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for contd-0.1.4.tar.gz
Algorithm Hash digest
SHA256 0f8ce4bb891a8a70fd6c858b71d9b156d6bc66ff49e29982103d7233f60bd327
MD5 dc4a76d99f6df8b3eedad197630374ba
BLAKE2b-256 2299b0148f88292551602726d7b784010de8a498e7278454d8937b9d12585376

See more details on using hashes here.

File details

Details for the file contd-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: contd-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 107.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for contd-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 916a30dad152c81ee1c6a0f91111c5fb3cb1190b541f77182ce80084e2331b89
MD5 ef9d4cb1e80a6c68e527bafc6dedec09
BLAKE2b-256 1a8afaab2c68ab89f30ccd0bd374c3ff866095f5f7beac49ce9fef7961fdf76c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page