Skip to main content

agentdraft — Python SDK

PyPI Python License: MIT

AgentDraft is the coordination layer for AI scheduling agents. When two or more agents — your sales bot, a Cal.com handler, an internal recruiter, a Claude/OpenAI assistant — write to the same calendar, AgentDraft is the one API that decides who wins, atomically, with a tamper-evident audit row for every commit.

This is the official Python SDK. It gives an agent a typed, one-line surface to participate.

Install

pip install agentdraft

Requires Python 3.9+.

Quickstart

from datetime import datetime, timedelta, timezone
from agentdraft import Client, Conflict

client = Client(api_key="avs_live_...")   # or set AGENTDRAFT_API_KEY

start = datetime.now(timezone.utc) + timedelta(hours=4)
end   = start + timedelta(minutes=30)

try:
    booking = client.bookings.commit(
        start=start, end=end,
        idempotency_key="ik_call_42",
        metadata={"title": "Discovery call"},
    )
    print("booked:", booking.booking_id)
except Conflict as e:
    print(f"outranked by {e.winning_agent_id} (rank {e.winning_agent_priority})")

A losing agent gets a typed Conflict exception, not a timeout — it knows who won, by what priority, and where the audit row lives, so fallback behavior (propose an alternate, escalate, defer) is a clean except clause away.

Why a separate API?

Coordinator frameworks (LangChain, LangGraph, CrewAI, AutoGen, Composio, the OpenAI Agents SDK) coordinate work between agents — sequential, parallel, or graph orchestration of LLM calls and tools. None of them solve write contention on the calendar itself: two agents firing POST /events against Google Calendar at the same moment will both succeed, and you have a double-booking.

AgentDraft solves only that problem, and solves it once. Every agent the calendar owner runs calls bookings.commit(...) against AgentDraft before touching the real calendar. The conflict engine uses time-bucketed conditional writes in DynamoDB inside a single TransactWriteItems — atomic, race-free, no locks. The user ranks their agents in the dashboard; ties go to the higher-rank agent; recent commits can be evicted by higher-priority agents inside a configurable bump window.

See the race

The repo ships a multi-agent race demo. With the local stack up:

git clone https://github.com/GipsyChef/agentdraft && cd agentdraft
docker compose up -d dynamodb
pip install -e ".[dev]" -e sdks/python
uvicorn app.main:app --port 8080 &
python scripts/demo_race.py            # 5 agents, ranked priorities, one slot

Five agents fire concurrently at the same target slot. The highest-rank agent wins; the rest get 409 outranked with the winner's identity for graceful fallback. The demo prints per-agent latency, the winning booking id, and a link to the audit trail of the whole race.

Authentication

API keys are issued from the AgentDraft dashboard and start with avs_live_. Pass it explicitly or let the client read it from the environment:

Client(api_key="avs_live_...")
# or
import os; os.environ["AGENTDRAFT_API_KEY"] = "avs_live_..."
Client()

For local development against a dev backend, point at it via AGENTDRAFT_BASE_URL or the base_url= kwarg.

Surface

Attribute Purpose
client.availability Read merged availability across all agents writing to the calendar
client.bookings hold, release, commit, cancel — the four state transitions
client.agents me() — confirm key + current priority + scopes
client.mailbox Inbound/outbound mail surface for agents that book via email

All blocking I/O. An async client is on the roadmap; for now wrap with asyncio.to_thread if you need concurrency.

Error types

Every failure is a typed exception so callers can branch precisely:

  • Conflict — your write was outranked. Carries winning_booking_id, winning_agent_id, winning_agent_priority, your_priority, and reason. The winning booking's audit_event_id is available on the returned Booking model for the agent that did win.
  • AuthError — bad / missing / expired API key.
  • RateLimited — token bucket exhausted. Has retry_after (seconds).
  • RuleViolation — request was syntactically valid but violated a rule (focus block, daily cap, business hours).
  • AgentDraftError — base class; catch this if you only need a catch-all.

Idempotency

Pass idempotency_key= to bookings.commit(...). The server caches the result by (agent_id, key) for 24 hours, so a retry over a flaky network returns the original booking, not a duplicate.

Use with LangChain / CrewAI / AutoGen

The SDK is framework-agnostic — wrap any method in a Tool and pass it to your agent. A first-party agentdraft-langchain package with ready BookingTool / AvailabilityTool / ConflictAwareBookingTool wrappers is on the roadmap.

Links

Security

Found a vulnerability? See https://agentdraft.io/securitydo not open a public issue for a security report.

License

MIT — see https://agentdraft.io/legal/license.

Download files

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

Source Distribution

agentdraft-0.1.1.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

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

agentdraft-0.1.1-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file agentdraft-0.1.1.tar.gz.

File metadata

  • Download URL: agentdraft-0.1.1.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for agentdraft-0.1.1.tar.gz
Algorithm Hash digest
SHA256 92ee1b7ea8d7d31f2b8390b9b4848d27c24bf76661a7a2fc9aceb30993b5d2fe
MD5 34cfdbbfb5cb861978900ae472d60738
BLAKE2b-256 32df32c7d770de360fb077ff62f268a50372c185d72c8ef6292e82366ee320ad

See more details on using hashes here.

File details

Details for the file agentdraft-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: agentdraft-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for agentdraft-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 845d568589e43e30505cd4e9955c1c6b0c3a80206457c391871f27d0c2571a8d
MD5 f4ecb1aaea35e9703e48f4c244aaa730
BLAKE2b-256 bdab6feb9108e4e4fb00ffac4a0b702675a8ee97648f754df246334ff5bf3867

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

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