Release Notes

New Feature: Per-user Resource Management

Associate resources with users, filter by user, and clean up with cascade deletion - all in a few lines of code.

New Feature: Per-user Resource Management

Building multi-tenant AI applications has always required custom infrastructure for user isolation and resource management. With this release, Acontext now supports per-user resource management natively.

What's New

You can now associate any Acontext resource (Spaces, Sessions, Disks, Skills) with a user identifier. This enables:

  • Multi-tenant isolation without separate API keys per user
  • User-scoped queries to retrieve only a specific user's resources
  • Cascade deletion to clean up all resources when a user leaves

How It Works

Associate Resources with Users

Pass a user parameter when creating resources. Users are created automatically when first referenced.

from acontext import AcontextClient

client = AcontextClient(api_key=os.getenv("ACONTEXT_API_KEY"))

# Create a space for a user
space = client.spaces.create(
    user="alice@example.com",
    configs={"name": "Alice's Workspace"}
)

# Create a session for the same user
session = client.sessions.create(
    user="alice@example.com",
    space_id=space.id
)

# Create a disk for the user
disk = client.disks.create(user="alice@example.com")
import { AcontextClient } from '@acontext/acontext';

const client = new AcontextClient({ apiKey: process.env.ACONTEXT_API_KEY });

// Create a space for a user
const space = await client.spaces.create({
  user: 'alice@example.com',
  configs: { name: "Alice's Workspace" }
});

// Create a session for the same user
const session = await client.sessions.create({
  user: 'alice@example.com',
  spaceId: space.id
});

// Create a disk for the user
const disk = await client.disks.create({ user: 'alice@example.com' });

Filter Resources by User

All list operations now support user filtering:

# List only Alice's resources
spaces = client.spaces.list(user="alice@example.com")
sessions = client.sessions.list(user="alice@example.com")
disks = client.disks.list(user="alice@example.com")
skills = client.skills.list_catalog(user="alice@example.com")
// List only Alice's resources
const spaces = await client.spaces.list({ user: 'alice@example.com' });
const sessions = await client.sessions.list({ user: 'alice@example.com' });
const disks = await client.disks.list({ user: 'alice@example.com' });
const skills = await client.skills.listCatalog({ user: 'alice@example.com' });

Cascade Delete Users

When a user leaves, clean up everything in one call:

# Delete user and ALL associated resources
client.users.delete("alice@example.com")
// Delete user and ALL associated resources
await client.users.delete('alice@example.com');

Use Cases

Scenario

Before

After

Multi-tenant apps

Self-managed user-resource mapping

Native user parameter

User offboarding

Manual cleanup across resources

One users.delete() call

Per-user queries

Self-maintained filtering logic

Native user filter parameter

The feature is available now in:

  • Python SDK: pip install acontext --upgrade
  • TypeScript SDK: npm install @acontext/acontext@latest


Have feedback or questions? Join us on Discord or open an issue on GitHub.