Docs/Using Flowly/Profiles
Using Flowly

Profiles

Run multiple isolated Flowly setups β€” separate config, keys, sessions, and memory β€” and switch between them with one flag.

What a profile is

A profile is a fully self-contained Flowly environment. Each profile has its own config file, its own API keys and credentials, its own sessions and memory, and its own skills β€” none of it shared with any other profile. Switching profiles is like switching to a different, completely separate Flowly install, except everything still lives under one home directory and you select between them with a single flag.

Under the hood there is exactly one mechanism: the FLOWLY_HOME directory. Every path in Flowly resolves from FLOWLY_HOME, so pointing it at a different directory gives you a different, isolated instance. A profile is just a named FLOWLY_HOME.

Profiles are about

isolation on one machine, not multi-user accounts. Each profile is its own data directory; they never read each other's config, keys, sessions, or memory.

Default vs named profiles

There are two kinds of profile:

  • Default β€” lives at ~/.flowly. This is what you get when you run flowly with no profile selected. It is the original, backward-compatible location.
  • Named β€” lives at ~/.flowly/profiles/<name>/. For example, a profile called work lives at ~/.flowly/profiles/work/.
~/.flowly/                      ← "default" profile
~/.flowly/profiles/work/        ← named profile "work"
~/.flowly/profiles/personal/    ← named profile "personal"
~/.flowly/active_profile        ← sticky default profile name (a one-line text file)

A named profile directory holds the same set of files and folders the default profile does β€” its own config.json, sessions/, credentials/, skills/, and the memory and session databases β€” all kept separate from every other profile.

Profile names use lowercase letters, digits, hyphens, and underscores (up to 64 characters). A handful of names are reserved and can't be used, including

default, flowly, test, tmp, and root.

How to select a profile

Flowly resolves which profile to use before it loads anything else, in this priority order. The first one that matches wins:

  1. The -p / --profile flag β€” highest priority, per-command.
  2. The FLOWLY_PROFILE environment variable β€” for wrapper scripts and shells.
  3. The sticky ~/.flowly/active_profile file β€” a persisted default.
  4. default β€” the fallback when nothing else is set.

1. The -p / --profile flag

Put the flag before your command. It applies to that one invocation only:

flowly -p work chat
flowly --profile work chat
flowly --profile=work chat

All three forms are equivalent. This is the most explicit way to pick a profile and it overrides everything else.

2. The FLOWLY_PROFILE environment variable

Set the variable and every flowly command in that shell uses the named profile, without repeating the flag:

export FLOWLY_PROFILE=work
flowly chat          # uses the "work" profile
flowly sessions      # also "work"

This is handy for a dedicated terminal tab, or for a small wrapper script:

#!/bin/sh
exec env FLOWLY_PROFILE=work flowly "$@"
Save the script above as something like

work on your PATH and chmod +x it. Then work chat always runs Flowly in the work profile β€” the env var is scoped to that one command, so your other terminals are unaffected.

3. The sticky active_profile file

~/.flowly/active_profile is a one-line text file holding a profile name. When you run plain flowly with no flag and no FLOWLY_PROFILE, Flowly reads this file and uses whatever profile it names. If the file is missing, empty, or contains default, you get the default profile.

# Make "work" the default for plain `flowly` (one line, no quotes):
echo work > ~/.flowly/active_profile

# Go back to the default profile:
rm ~/.flowly/active_profile
The

-p flag and FLOWLY_PROFILE always win over active_profile. The sticky file only decides what plain flowly does when you haven't picked a profile any other way.

Because the flag has the highest priority, you can leave

active_profile set to your everyday profile and still reach any other one on demand β€” for example flowly -p personal chat even when work is the sticky default.

What's isolated per profile

Selecting a profile changes FLOWLY_HOME, and everything Flowly stores resolves from there. Concretely, each profile keeps its own copy of:

WhatPath (relative to the profile home)Notes
Configconfig.jsonSettings and provider config; stored owner-only because it holds keys
Credentials / keyscredentials/API keys and provider credentials, separate per profile
Sessionssessions/Chat session transcripts
Session indexsession_index.sqliteSearch index over sessions
Memorymemory_index.sqliteLong-term memory store
Knowledge graphknowledge_graph.sqlite3Entity / relationship graph
Skillsskills/Installed skills for this profile
Subagentssubagents/Subagent definitions
Workspaceworkspace/Persona, memory, and skill working files
Logslogs/Per-profile logs
Auditaudit/Audit records
Croncron/Scheduled jobs
Screenshots / mediascreenshots/, media/Captured artifacts

For the default profile the home is ~/.flowly, so these resolve to ~/.flowly/config.json, ~/.flowly/sessions/, and so on. For a named profile they live under ~/.flowly/profiles/<name>/ β€” for example ~/.flowly/profiles/work/config.json.

Because keys and credentials are per profile, a profile only has access to the API keys you configure inside it. A leak or mistake in one profile can't reach another profile's credentials.

Common uses

Work vs personal. Keep a work profile with your work API keys, work sessions, and work memory, and a separate personal profile for everything else. Each remembers its own context and bills to its own keys.

flowly -p work chat
flowly -p personal chat

Testing and experiments. Spin up a throwaway profile to try a risky config change, a new skill, or a different model without touching your real setup. If it goes wrong, the rest of your profiles are untouched.

export FLOWLY_PROFILE=sandbox
flowly chat

A clean demo. Use a dedicated profile when you want a predictable, empty-history environment to show Flowly to someone, so your personal sessions and memory stay private.

Most things scoped to a profile β€” including the background gateway service β€” are name-aware, so running the same profile in different terminals stays consistent.