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.

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 offboarding | Manual cleanup across resources | One |
Per-user queries | Self-maintained filtering logic | Native |
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↗.