Skip to content

feat: user-defined personality preset CRUD API #756

@Aureliolo

Description

@Aureliolo

Summary

Allow users to create, update, and delete custom personality presets via the REST API, persisted to the database alongside builtin presets.

Motivation

Users need to define organization-specific personality profiles beyond the builtin presets. The underlying PersonalityConfig model already validates arbitrary personality dicts, and templates already support inline personality dicts -- but there's no way to save reusable custom presets.

Proposed Endpoints

  • POST /api/v1/personalities/presets -- create a custom preset (validated against PersonalityConfig)
  • PUT /api/v1/personalities/presets/{name} -- update a custom preset
  • DELETE /api/v1/personalities/presets/{name} -- delete a custom preset (builtin presets cannot be deleted)

Design Considerations

  • Custom presets persisted via PersistenceBackend (SQLite initially)
  • Builtin presets remain frozen in code; custom presets overlay at runtime
  • Name collisions: custom presets cannot shadow builtin preset names (reject on create)
  • Validation: all custom presets must pass PersonalityConfig(**preset) before persistence
  • API responses should include a source: "builtin" | "custom" field to distinguish origin

Dependencies

  • Personality preset discovery API (list/get endpoints) -- for the read side
  • PersistenceBackend already supports generic key-value storage patterns

Current State

  • Templates support personality_preset (name lookup) and personality (inline dict) -- see src/synthorg/templates/schema.py
  • PersonalityConfig in src/synthorg/core/agent.py validates all fields with Pydantic
  • No persistence layer for custom presets exists yet

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions