Skip to main content

Database Copy-On-Write for AI agent workspace isolation

Project description

agent-cow

Database Copy-On-Write for AI agent workspace isolation

PyPI License: MIT

agent-cow intercepts your AI agent's database writes and isolates them in a copy-on-write layer. The agent thinks it's modifying real data, but nothing touches production until you approve. Zero changes to your existing queries.

Read the full article: Copy-on-Write in Agentic Systems Try the interactive demo: www.agent-cow.com

Without agent-cow:                With agent-cow:

┌───────┐       ┌──────────┐     ┌───────┐     ┌──────┐     ┌──────────┐
│ Agent │──────>│ Database │     │ Agent │────>│ COW  │────>│ Database │
└───────┘       └──────────┘     └───────┘     │ View │     └──────────┘
 writes directly                               └──────┘
 to production                                   writes go to changes table
                                                 reads merge base + changes
                                                 user reviews, then commits or discards

Installation

pip install agent-cow

Requires Python 3.10+.

How It Works

  1. Renames your table from users to users_base
  2. Creates a changes table users_changes to store session-specific modifications
  3. Creates a COW view named users that merges base + changes
  4. Your code doesn't change — queries still target users (now a view)

When you set app.session_id and app.operation_id variables, all writes go to the changes table. Reads automatically merge base data with your session's changes. Other sessions (and production) see only the base data.

See the interactive demo for a worked example of an inventory management system where an agent makes both good and bad decisions.

Why Copy-on-Write for agents?

Alignment is an open problem in AI safety, and misalignment during agent execution may not always be obvious. At best, a misaligned agent is annoying (i.e. if the agent does something other than what the user wants it to do) and at worst, dangerous (i.e. leading to sensitive data loss, tool misuse, and other harms). Rather than tackling the alignment problem directly, this repo focuses on minimizing potential harm a misaligned agent can cause.

  • Changes can be reviewed at the end of a session, rather than needing to repeatedly 'accept' each action as it is executed. This minimizes the direct human supervision required while improving the safeguards in place.
  • Mistakes are less consequential, since the agent can't write directly to the main/production data. If some changes are good but others aren't, users can cherry-pick operations they wish to keep.
  • Misalignment patterns become more visible. When reviewing changes at the end of a session, users can clearly identify where the agent deviated from intended behavior and adjust the system prompt or agent configuration accordingly to prevent similar issues in future sessions.
  • Multiple agents or agent sessions can run simultaneously on isolated copies without interfering with each other.

Backends

Backend Docs Status
PostgreSQL agentcow/postgres Available
pg-lite (TypeScript) agent-cow-typescript Available
Blob/File Storage In progress

Quick Example (PostgreSQL)

import uuid
from agentcow.postgres import deploy_cow_functions, enable_cow_schema, apply_cow_variables, commit_cow_session

# Wrap any async PostgreSQL driver — asyncpg, SQLAlchemy, psycopg, etc.
class MyExecutor:
    def __init__(self, conn):
        self._conn = conn
    async def execute(self, sql: str) -> list[tuple]:
        return [tuple(r) for r in await self._conn.fetch(sql)]

executor = MyExecutor(conn)

# One-time setup — enables COW on all tables in the schema
await deploy_cow_functions(executor)
await enable_cow_schema(executor)

# Agent session — all writes are isolated
session_id = uuid.uuid4()
await apply_cow_variables(executor, session_id, operation_id=uuid.uuid4())
await executor.execute("INSERT INTO users (name) VALUES ('Bessie')")

# Review, then commit or discard
await commit_cow_session(executor, "users", session_id)

See the PostgreSQL docs for the full guide: driver adapters, schema-wide setup, selective commit, web framework integration, and the complete API reference.

API Reference

Core Functions

  • deploy_cow_functions(executor) — Deploy COW SQL functions (one-time setup)
  • enable_cow(executor, table_name) — Enable COW on a table
  • enable_cow_schema(executor) — Enable COW on all tables in a schema
  • disable_cow(executor, table_name) — Disable COW and restore original table
  • disable_cow_schema(executor) — Disable COW on all tables in a schema
  • commit_cow_session(executor, table_name, session_id) — Commit all session changes
  • discard_cow_session(executor, table_name, session_id) — Discard all session changes
  • get_cow_status(executor) — Get COW status for a schema

Operation-Level Functions

  • apply_cow_variables(executor, session_id, operation_id) — Set COW session variables
  • get_session_operations(executor, session_id) — List all operations in a session
  • get_operation_dependencies(executor, session_id) — Get operation dependency graph
  • commit_cow_operations(executor, table_name, session_id, operation_ids) — Commit specific operations
  • discard_cow_operations(executor, table_name, session_id, operation_ids) — Discard specific operations

Session Management

  • CowPostgresConfig — Dataclass for COW configuration
  • build_cow_variable_statements(session_id, operation_id) — Build SET LOCAL SQL statements

For parsing COW configuration from HTTP request headers (e.g. in FastAPI/Django/Flask middleware), see agentcow/examples/header_parsing_example.py.

Development

git clone https://github.com/trail-ml/agent-cow-python.git
cd agent-cow-python
pip install -e ".[dev]"
pytest agentcow/postgres/tests/ -v

Contributing

We welcome contributions! For questions, bug reports, or feature requests, please open an issue.

License

MIT License.

Credits

Created and maintained by trail.

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

agent_cow-0.1.6.tar.gz (133.8 kB view details)

Uploaded Source

Built Distribution

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

agent_cow-0.1.6-py3-none-any.whl (83.2 kB view details)

Uploaded Python 3

File details

Details for the file agent_cow-0.1.6.tar.gz.

File metadata

  • Download URL: agent_cow-0.1.6.tar.gz
  • Upload date:
  • Size: 133.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agent_cow-0.1.6.tar.gz
Algorithm Hash digest
SHA256 f6865217404f9d32075d35b22d2f72c3d227c049ba590a8e863b23be2d83f453
MD5 1979fd1e76dc73af745111f4d68bf3a6
BLAKE2b-256 2c26041e52c1b9752c236190004ad1635fffae9e9d6cad5af3ffcb56a6a3ebd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_cow-0.1.6.tar.gz:

Publisher: publish.yml on trail-ml/agent-cow-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_cow-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: agent_cow-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 83.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agent_cow-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 a6d89e695e527deb22234d038535c5ba5255713bab6438e6d3d09a184b25ace2
MD5 a37f4781c2f5c0d8f0eb8b1bd4a82dc5
BLAKE2b-256 424d570e0b01459860d23c358d9796d0a93d5ee2a7c13e8bdb3084fb142f84f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_cow-0.1.6-py3-none-any.whl:

Publisher: publish.yml on trail-ml/agent-cow-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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