# Store with User



Associate resources with user identifiers for multi-tenant apps, per-user isolation, and simplified cleanup.

## Supported Resources [#supported-resources]

| Resource        | Create                     | List                       | Cascade Delete |
| --------------- | -------------------------- | -------------------------- | -------------- |
| Sessions        | `user="alice@example.com"` | `user="alice@example.com"` | ✓              |
| Disks           | `user="alice@example.com"` | `user="alice@example.com"` | ✓              |
| Skills          | `user="alice@example.com"` | `user="alice@example.com"` | ✓              |
| Learning Spaces | `user="alice@example.com"` | `user="alice@example.com"` | ✓              |

## Create Resources with User [#create-resources-with-user]

<CodeGroup>
  ```python title="Python"
  import os
  from acontext import AcontextClient, FileUpload

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

  # Session
  session = client.sessions.create(user="alice@example.com")

  # Disk
  disk = client.disks.create(user="alice@example.com")

  # Skill
  with open("skill.zip", "rb") as f:
      skill = client.skills.create(
          file=FileUpload(filename="skill.zip", content=f.read()),
          user="alice@example.com"
      )

  # Learning Space
  space = client.learning_spaces.create(user="alice@example.com")
  ```

  ```typescript title="TypeScript"
  import { AcontextClient, FileUpload } from '@acontext/acontext';
  import * as fs from 'fs';

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

  // Session
  const session = await client.sessions.create({ user: "alice@example.com" });

  // Disk
  const disk = await client.disks.create({ user: "alice@example.com" });

  // Skill
  const fileContent = fs.readFileSync("skill.zip");
  const skill = await client.skills.create({
      file: new FileUpload({ filename: "skill.zip", content: fileContent }),
      user: "alice@example.com",
  });

  // Learning Space
  const space = await client.learningSpaces.create({ user: "alice@example.com" });
  ```
</CodeGroup>

<Note>
  Users are created automatically when first referenced. No explicit user creation needed.
</Note>

## Filter by User [#filter-by-user]

<CodeGroup>
  ```python title="Python"
  # Sessions
  sessions = client.sessions.list(user="alice@example.com")

  # Disks
  disks = client.disks.list(user="alice@example.com")

  # Skills
  skills = client.skills.list_catalog(user="alice@example.com")

  # Learning Spaces
  spaces = client.learning_spaces.list(user="alice@example.com")
  ```

  ```typescript title="TypeScript"
  // Sessions
  const sessions = await client.sessions.list({ user: "alice@example.com" });

  // Disks
  const disks = await client.disks.list({ user: "alice@example.com" });

  // Skills
  const skills = await client.skills.listCatalog({ user: "alice@example.com" });

  // Learning Spaces
  const spaces = await client.learningSpaces.list({ user: "alice@example.com" });
  ```
</CodeGroup>

## Get User Resources [#get-user-resources]

Check how many resources a user has before cleanup or for analytics:

<CodeGroup>
  ```python title="Python"
  resources = client.users.get_resources("alice@example.com")
  print(f"Sessions: {resources.counts.sessions_count}")
  print(f"Disks: {resources.counts.disks_count}")
  print(f"Skills: {resources.counts.skills_count}")
  ```

  ```typescript title="TypeScript"
  const resources = await client.users.getResources("alice@example.com");
  console.log(`Sessions: ${resources.counts.sessions_count}`);
  console.log(`Disks: ${resources.counts.disks_count}`);
  console.log(`Skills: ${resources.counts.skills_count}`);
  ```
</CodeGroup>

## Delete User (Cascade) [#delete-user-cascade]

Deleting a user removes all associated Sessions, Disks, and Skills:

<CodeGroup>
  ```python title="Python"
  client.users.delete("alice@example.com")
  ```

  ```typescript title="TypeScript"
  await client.users.delete("alice@example.com");
  ```
</CodeGroup>

<Warning>
  This permanently deletes all resources associated with the user.
</Warning>

## Complete Example [#complete-example]

<Accordion title="Full workflow">
  <CodeGroup>
    ```python title="Python"
    import os
    from acontext import AcontextClient

    client = AcontextClient(api_key=os.getenv("ACONTEXT_API_KEY"))
    user_id = "demo@example.com"

    # Create resources
    session = client.sessions.create(user=user_id)
    disk = client.disks.create(user=user_id)

    # List resources
    sessions = client.sessions.list(user=user_id)
    disks = client.disks.list(user=user_id)
    print(f"User has {len(sessions.items)} sessions, {len(disks.items)} disks")

    # Get resource counts
    resources = client.users.get_resources(user_id)
    print(f"Total: {resources.counts.sessions_count} sessions, {resources.counts.disks_count} disks, {resources.counts.skills_count} skills")

    # Delete user and all resources
    client.users.delete(user_id)
    ```

    ```typescript title="TypeScript"
    import { AcontextClient } from '@acontext/acontext';

    const client = new AcontextClient({
        apiKey: process.env.ACONTEXT_API_KEY,
    });
    const userId = "demo@example.com";

    // Create resources
    const session = await client.sessions.create({ user: userId });
    const disk = await client.disks.create({ user: userId });

    // List resources
    const sessions = await client.sessions.list({ user: userId });
    const disks = await client.disks.list({ user: userId });
    console.log(`User has ${sessions.items.length} sessions, ${disks.items.length} disks`);

    // Get resource counts
    const resources = await client.users.getResources(userId);
    console.log(`Total: ${resources.counts.sessions_count} sessions, ${resources.counts.disks_count} disks, ${resources.counts.skills_count} skills`);

    // Delete user and all resources
    await client.users.delete(userId);
    ```
  </CodeGroup>
</Accordion>

## Next Steps [#next-steps]

<CardGroup cols="2">
  <Card title="Disk Storage" icon="database" href="/store/disk">
    File storage API
  </Card>

  <Card title="Sessions" icon="folder" href="/store/messages/multi-provider">
    Message storage API
  </Card>

  <Card title="Skills" icon="wand-magic-sparkles" href="/store/skill">
    Skills storage API
  </Card>

  <Card title="Learning Spaces" icon="brain" href="/learn/learning-spaces">
    Organize agent knowledge by user
  </Card>
</CardGroup>
