Persona Chat

A full example app in examples/persona_chat/ that exercises most of SkillKit's primitives. Users create AI personas through conversation, then chat with them — each user gets isolated conversation history and per-user memory.

cd examples/persona_chat
mix deps.get

# Create personas (first user becomes owner)
mix persona_chat --user alice --manage

# Chat with a persona
mix persona_chat --user alice --persona captain_nova

What it exercises

FeatureHow
Agent identityAGENT.md at root of each agent directory
Skills7 skills across lobby and memory kits drive all behavior
Subagent delegationLobby delegates file writing to a persona_writer subagent
Dynamic context injection!`command` in skills runs at render time, injecting live persona lists and user memories
Conversation persistencePer-user conversation isolation via Conversation.Store.Filesystem
Scope-based authorizationOwner vs visitor permissions — owners create/delete, visitors chat
Scope variable resolution$USERNAME and $PERSONA replaced in skill bodies and system prompts
Shell tool as kitSkillKit.Tools.Shell registered alongside filesystem kits

Only two .ex files in the example. Everything else is markdown.

See examples/persona_chat/README.md for the full walkthrough.

Directory structure

examples/persona_chat/
 agents/
    lobby/                          # Lobby kit — identity + creation tools
       AGENT.md
       skills/
          brainstorm/SKILL.md
          develop-voice/SKILL.md
          build-backstory/SKILL.md
          finalize-persona/SKILL.md
          list-personas/SKILL.md
          delete-persona/SKILL.md
       agents/
           persona-writer.md
    personas/
        valentina_restrepo/
            AGENT.md
 skills/                             # Shared skills
    user-memory/SKILL.md
 data/
 lib/persona_chat/
     cli.ex
     scope.ex

How it uses start_agent

# Lobby — identity from lobby kit, shared skills added separately
SkillKit.start_agent("agents/lobby",
  skills: ["skills", SkillKit.Tools.Shell],
  scope: scope
)

# Persona — identity from persona kit, shared skills composed in
SkillKit.start_agent("agents/personas/valentina_restrepo",
  skills: ["skills", SkillKit.Tools.Shell],
  name: "valentina_restrepo:sam",
  scope: scope,
  conversation_store: {SkillKit.Conversation.Store.Filesystem, path: "data/conversations"}
)

The lobby kit provides agent identity AND its own skills (brainstorm, develop-voice, etc.) via the first argument. The persona kit provides only identity — shared tools come from the skills: option. No tool inheritance conflict.

Sample Agents and Skills

examples/
  agents/
    neve/AGENT.md           # General-purpose coding assistant
    researcher/AGENT.md     # Research and investigation agent
    fixer/AGENT.md          # Bug fixing agent
    code-reviewer/AGENT.md  # Code review subagent
  skills/
    bash/SKILL.md           # Shell command guidelines
    memory/SKILL.md         # Persistent memory management
    code_review/SKILL.md    # Code review checklist
    elixir_style/SKILL.md   # Elixir conventions

Run any agent: mix skill_kit.chat neve or mix skill_kit.chat researcher