Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Multi Profile Workflows

Varun Pratap Bhardwaj edited this page May 24, 2026 · 2 revisions

Multi-Profile Workflows

What are profiles, use cases, and best practices - Separate work/personal contexts, multi-client management, and experimentation with complete isolation guarantees.


What Are Profiles?

Profiles are isolated memory contexts in SuperLocalMemory. Each profile has its own:

  • SQLite database
  • Knowledge graph
  • Learned patterns
  • Configuration settings

Think of profiles as completely separate workspaces. Memories in one profile never affect another profile.

Example:

Profile: work
 - 500 memories about work projects
 - Graph: FastAPI, PostgreSQL, microservices
 - Patterns: Python backend, REST APIs
Profile: personal
 - 200 memories about personal projects
 - Graph: React, Firebase, Next.js
 - Patterns: TypeScript frontend, serverless
No context bleeding between them!

Why Use Profiles?

1. Work/Personal Separation

Problem:

Without profiles:
- Work memories mixed with personal projects
- AI gets confused about which project you mean
- Privacy concerns (work info in personal context)

Solution:

# Work context
slm switch-profile work
slm remember "Company API uses OAuth2" --tags work,security
# Personal context
slm switch-profile personal
slm remember "My side project uses simple JWT" --tags personal

2. Multi-Client Management

Scenario: Freelancer working with 5 clients

# Client A
slm switch-profile client-acme
slm remember "Acme uses AWS, PostgreSQL, React"
# Client B
slm switch-profile client-techcorp
slm remember "TechCorp uses GCP, MySQL, Vue"
# Each client's context completely isolated

Benefits:

  • No accidental data leaks between clients
  • Clear context switching
  • Easy to archive old clients

3. Experimentation

Scenario: Testing new patterns without polluting main database

# Create experiment profile
slm switch-profile experiment
# Try new patterns
slm remember "Testing new architecture pattern"
slm build-graph --clustering
# If experiment fails, delete profile
slm switch-profile delete experiment --confirm

4. Team Collaboration

Scenario: Team sharing common knowledge base

# Team profile (shared via git)
slm switch-profile team
slm remember "Team standard: Use TypeScript" --tags team
slm remember "Team uses Jest for testing" --tags team
# Each member switches to team profile for shared context

Profile Operations

List Profiles

slm switch-profile list

Output:

Available Profiles:
* default (active)
 Location: ~/.claude-memory/profiles/default/
 Memories: 247
 Last used: 2026εΉ΄02月07ζ—₯ 14:23
 work
 Location: ~/.claude-memory/profiles/work/
 Memories: 538
 Last used: 2026εΉ΄02月06ζ—₯ 09:15
 personal
 Location: ~/.claude-memory/profiles/personal/
 Memories: 123
 Last used: 2026εΉ΄02月05ζ—₯ 18:42
 client-acme
 Location: ~/.claude-memory/profiles/client-acme/
 Memories: 89
 Last used: 2026εΉ΄01月28ζ—₯ 11:30

Create Profile

# Basic creation
slm switch-profile create work
# With description
slm switch-profile create work --description "Work projects and decisions"
# With custom location (advanced)
slm switch-profile create work --path /custom/path/work

What happens:

  1. Creates new directory: ~/.claude-memory/profiles/work/
  2. Initializes fresh SQLite database
  3. Creates empty graph and pattern tables
  4. Sets up profile metadata

Switch Profile

# Switch to profile
slm switch-profile work
# Verify switch
slm status

Output:

βœ“ Switched to profile: work
Current Profile: work
Total memories: 538
Knowledge graph: 342 nodes, 789 edges

What changes:

  • All subsequent commands use work profile
  • Database path: ~/.claude-memory/profiles/work/memory.db
  • Graph and patterns specific to work

Delete Profile

# Delete profile (requires confirmation)
slm switch-profile delete experiment
# Force delete without confirmation
slm switch-profile delete experiment --confirm

Warning: This permanently deletes all memories in that profile!

Backup first:

# Backup before deletion
cp -r ~/.claude-memory/profiles/experiment/ ~/backups/experiment-$(date +%Y%m%d)/
slm switch-profile delete experiment --confirm

Profile Isolation Guarantees

Complete Data Isolation

Each profile has:

~/.claude-memory/profiles/work/
β”œβ”€β”€ memory.db # Separate SQLite database
β”œβ”€β”€ graph_data.db # Separate graph storage
β”œβ”€β”€ patterns.db # Separate learned patterns
└── config.json # Profile-specific config

Guarantee: Memories in one profile NEVER appear in another profile.

Independent Graphs

# Build graph in work profile
slm switch-profile work
slm build-graph
# Creates work-specific graph
# Build graph in personal profile
slm switch-profile personal
slm build-graph
# Creates completely separate graph

No shared nodes or edges between profiles.

Separate Pattern Learning

# Work profile learns work patterns
slm switch-profile work
# Learns: Python, FastAPI, microservices
# Personal profile learns different patterns
slm switch-profile personal
# Learns: JavaScript, Next.js, serverless
# No pattern leakage

Use Cases

Use Case 1: Consultant with Multiple Clients

Setup:

# Client profiles
slm switch-profile create client-acme --description "Acme Corp (2026)"
slm switch-profile create client-techcorp --description "TechCorp (2026)"
slm switch-profile create client-startup --description "Startup Inc (2026)"
# Personal profile
slm switch-profile create personal --description "Personal projects"

Daily workflow:

# Morning: Client Acme
slm switch-profile client-acme
slm recall "last meeting notes"
# Work on Acme project
# Afternoon: Client TechCorp
slm switch-profile client-techcorp
slm recall "API architecture"
# Work on TechCorp project
# Evening: Personal
slm switch-profile personal
slm remember "New blog post idea"

Benefits:

  • Clear context separation
  • No accidental leaks
  • Easy billing (track per client)
  • Archive old clients easily

Use Case 2: Work/Personal Split

Setup:

# Work profile
slm switch-profile create work --description "Day job"
# Personal profile
slm switch-profile create personal --description "Side projects"

Work hours:

slm switch-profile work
slm remember "Sprint planning: Implement OAuth2" --tags sprint
slm remember "Code review feedback: Add error handling" --tags review

After hours:

slm switch-profile personal
slm remember "Side project: Build portfolio site with Next.js" --tags project
slm remember "Learn Rust for fun" --tags learning

Benefits:

  • Mental separation
  • Privacy (work info not in personal)
  • Different pattern learning

Use Case 3: Project-Based Organization

Setup:

# One profile per major project
slm switch-profile create project-api --description "REST API rewrite"
slm switch-profile create project-frontend --description "React dashboard"
slm switch-profile create project-mobile --description "React Native app"

Benefits:

  • Clear project boundaries
  • Easy to archive finished projects
  • Project-specific knowledge graphs
  • No cross-project confusion

Use Case 4: Experimentation

Setup:

# Experiment profile
slm switch-profile create experiment --description "Testing new patterns"
# Try new approaches
slm remember "Experimenting with GraphQL"
slm remember "Testing microservices with gRPC"
slm build-graph --clustering

Cleanup:

# Experiment failed, delete profile
slm switch-profile default
slm switch-profile delete experiment --confirm

Benefits:

  • Safe to try new patterns
  • No pollution of main database
  • Easy to discard failed experiments

Use Case 5: Team Shared Knowledge

Setup:

# Create team profile
slm switch-profile create team --description "Team shared knowledge"
# Save team decisions
slm remember "Team standard: TypeScript for all new code" --tags standard
slm remember "Team uses Jest for testing" --tags standard
slm remember "Code review checklist: Security, tests, docs" --tags checklist

Sharing (via git):

# Export team profile
cd ~/.claude-memory/profiles/
tar czf team-profile.tar.gz team/
# Team members import
cd ~/.claude-memory/profiles/
tar xzf team-profile.tar.gz
slm switch-profile team

Benefits:

  • Shared context across team
  • Consistent recommendations
  • Onboarding new members

Best Practices

1. Name Profiles Clearly

Good:

slm switch-profile create work-project-api
slm switch-profile create personal-blog
slm switch-profile create client-acme-2026

Poor:

slm switch-profile create p1
slm switch-profile create test
slm switch-profile create stuff

2. Add Descriptions

slm switch-profile create work \
 --description "Day job at TechCorp - API team (2026)"

Benefits:

  • Easy to remember what profile is for
  • Shows in list output
  • Helps team members understand context

3. Use Default Profile for General Knowledge

# General programming knowledge
slm switch-profile default
slm remember "Python best practices" --tags reference
slm remember "Git cheatsheet" --tags reference
# Switch to project-specific for work
slm switch-profile work

4. Archive Old Profiles

# Archive completed project
tar czf ~/archives/client-acme-$(date +%Y%m%d).tar.gz \
 ~/.claude-memory/profiles/client-acme/
# Delete profile
slm switch-profile delete client-acme --confirm

5. Regular Backups

# Backup all profiles (cron)
#!/bin/bash
backup_dir=~/backups/slm-$(date +%Y%m%d)
mkdir -p "$backup_dir"
cp -r ~/.claude-memory/profiles/ "$backup_dir/"

6. Switch Profile at Start of Day

# Add to .bashrc or .zshrc
# Auto-prompt for profile on terminal start
if command -v slm &> /dev/null; then
 echo "Current profile: $(slm status | grep 'Current Profile' | cut -d: -f2)"
 echo "Switch profile? (work/personal/default): "
fi

Profile Configuration

Per-Profile Settings

Each profile can have different settings:

Example: ~/.claude-memory/profiles/work/config.json

{
 "profile_name": "work",
 "description": "Work projects",
 "created_at": "2026εΉ΄02月07ζ—₯T14:23:00",
 "settings": {
 "default_importance": 5,
 "auto_build_graph": true,
 "pattern_learning_threshold": 0.5
 }
}

Shared Global Settings

Global config: ~/.claude-memory/config.json

{
 "default_profile": "work",
 "mcp_server_enabled": true,
 "shell_integration": true
}

Advanced Features

Switch with Environment Variable

# Set profile via env var
export SLM_PROFILE=work
slm status # Uses work profile
# Temporary switch
SLM_PROFILE=personal slm recall "blog ideas"

Profile Auto-Switch by Directory

Setup (zsh/bash):

# Add to .bashrc or .zshrc
cd() {
 builtin cd "$@"
 # Auto-switch profile based on directory
 if [[ $PWD == ~/work/* ]]; then
 export SLM_PROFILE=work
 elif [[ $PWD == ~/personal/* ]]; then
 export SLM_PROFILE=personal
 else
 export SLM_PROFILE=default
 fi
}

Profile-Specific Aliases

# Add to .bashrc or .zshrc
# Work aliases
alias work-slm='SLM_PROFILE=work slm'
alias work-recall='SLM_PROFILE=work slm recall'
# Personal aliases
alias personal-slm='SLM_PROFILE=personal slm'
alias personal-recall='SLM_PROFILE=personal slm recall'
# Usage
work-recall "API architecture"
personal-remember "Blog post idea"

Troubleshooting

"Profile not found"

Cause: Profile doesn't exist

Solution:

# List available profiles
slm switch-profile list
# Create if needed
slm switch-profile create missing-profile

"Cannot switch to active profile"

Cause: Already using that profile

Solution:

# Check current profile
slm status | grep "Current Profile"
# Switch to different profile
slm switch-profile default

"Profile database corrupted"

Cause: Database file damaged

Solution:

# Restore from backup
cp ~/backups/slm-20260207/profiles/work/memory.db \
 ~/.claude-memory/profiles/work/memory.db
# Or rebuild from scratch
slm switch-profile delete work --confirm
slm switch-profile create work

"Memories not showing after switch"

Cause: Switched to wrong profile or profile empty

Solution:

# Verify current profile
slm status
# List all profiles and memory counts
slm switch-profile list
# Switch to correct profile
slm switch-profile work
# Verify memories exist
slm list

Performance

Profile Overhead

Disk space per profile:

  • Empty: ~100 KB
  • 1,000 memories: ~5 MB
  • 10,000 memories: ~50 MB

Switch time:

  • ~10ms (instant)

No performance degradation with multiple profiles.


Migration Between Profiles

Export from One Profile

# Switch to source profile
slm switch-profile work
# Export memories
sqlite3 ~/.claude-memory/profiles/work/memory.db \
 "SELECT json_group_array(json_object(
 'content', content,
 'tags', tags,
 'project_name', project_name,
 'importance', importance
 )) FROM memories;" > work_export.json

Import to Another Profile

# Switch to destination profile
slm switch-profile personal
# Import memories (Python script)
python3 << 'EOF'
import json, sqlite3
conn = sqlite3.connect("/Users/$(whoami)/.claude-memory/profiles/personal/memory.db")
with open('work_export.json') as f:
 data = json.load(f)
 for mem in data:
 conn.execute(
 "INSERT INTO memories (content, tags, project_name, importance) VALUES (?, ?, ?, ?)",
 (mem['content'], mem['tags'], mem['project_name'], mem['importance'])
 )
conn.commit()
EOF
# Rebuild graph in destination
slm build-graph

Related Pages


Created by Varun Pratap Bhardwaj Solution Architect β€’ SuperLocalMemory

GitHub β€’ Issues β€’ Wiki

Clone this wiki locally

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /