Multi-Persona Workflow
Switch between work/personal/coaching personas with one slash command — same agent, different system prompt, different memory scope.
- Channels
telegramdesktopios- Uses
personas
Your agent helps with code at 10 AM, drafts a personal note at 2 PM, reviews a sales pitch at 4. Each context wants a different voice and different memory access. Flowly's personas system lets you flip between modes — work, personal, coaching — without losing conversation history.
What it does
/persona <name>switches active persona- Each persona has: own system prompt, own default memory tags, optionally own model + tool restrictions
- Conversations stay in shared session but the agent's behaviour shifts immediately
- Default persona resumes if not switched
- Each persona can scope which channels it's active on (e.g., "coaching" only on Desktop, never Telegram)
What you'll need
- Flowly's built-in personas system (no plugin needed)
- A clear sense of what your different contexts are
Setup
1. Define personas
Edit ~/.flowly/personas/ — create one file per persona:
# ~/.flowly/personas/work.yamlname: workdescription: "Engineering and product work — code, architecture, deep technical reasoning"system_prompt: |You are working with a senior software engineer. Communication style:- Direct, technical, no preamble- Code samples > prose explanations- Show alternatives with tradeoffs- Skip the "great question!" energyDefault memory scope: tags starting with "work:", "code:", or "project:".Avoid pulling personal-life memory unless explicitly asked.model: anthropic/claude-sonnet-4-6allowed_tools:- exec- read_file- write_file- memory_search- memory- browser_tabmemory_tag_prefix: "work"
# ~/.flowly/personas/personal.yamlname: personaldescription: "Personal life — health, family, hobbies, personal finance"system_prompt: |Casual, warm tone. I might be:- Planning meals or trips- Tracking habits or health- Asking about books or hobbies- Working through a personal decisionMemory scope: anything not tagged "work:". Lean toward life-relatedcontext.model: anthropic/claude-haiku-4-5memory_tag_prefix: "personal"
# ~/.flowly/personas/coach.yamlname: coachdescription: "Reflection, decision support, goal setting"system_prompt: |Act as a thoughtful coach. Style:- Ask before asserting- Reflect what I'm saying back to test understanding- Surface contradictions gently- Don't fix; help me think- 70% questions, 30% observationsChannels: Desktop only. If I switch to this persona on Telegram, ignorethe switch (probably accidental).allowed_channels:- desktop
2. Switch in conversation
Type:
Reply: "Persona: work — engineering and product work". Subsequent messages use the work persona's system prompt + tool restrictions
- memory scope.
Switches. The conversation continues but behaviour shifts.
3. Auto-switch by context (optional)
Use a hook:
# ~/.flowly/plugins/auto-persona/__init__.pyfrom datetime import datetimedef register(ctx):def auto_persona(hook_ctx):now = datetime.now()# Work hours weekday → work persona by defaultif now.weekday() < 5 and 9 <= now.hour < 18:ctx_memory = hook_ctx.session_id # check current persona# If user is using default, hint towards workreturn None # actual switching done by command, this is just a nudgectx.register_hook("on_session_start", auto_persona)
(Auto-switching by hook is a hint. Explicit /persona always wins.)
4. Per-channel persona pinning
Pin "coach" to Desktop only, "casual" to Telegram, "work" to iOS
(for fast on-the-go technical questions). Configure via the
allowed_channels field in each persona file.
Tips
- Don't over-fragment. 3 personas is enough for most. More than 5 and you'll never remember which is active.
- System prompt specificity matters. "Be technical" is vague; "Skip 'great question' openers, lead with code, show 2 alternatives with tradeoffs" is actionable.
- Memory tag prefixes prevent leakage. Work-persona shouldn't surface personal memory by default. The tag prefix is the cleanest separator.
- Channels matter. A coaching persona on Telegram is awkward — the medium doesn't match the depth. Pin personas to where they fit.
- Model choice per persona. Casual life chat doesn't need Sonnet; Haiku is faster and cheaper. Work-mode picking the bigger model is worth it.
/personashows current. Without args, returns the active persona name + description. Quick mental reset.- Default persona = your "neutral". If you don't pick one, you get the default. Make this one balanced — not too technical, not too casual. It's where new contexts land.