Project State Engine - Registry, sessions, capture, and context management for ADHD-friendly workflow.
| Guide | Description |
|---|---|
| Getting Started Tutorial | Step-by-step introduction (15 min) |
| CLI Command Reference | Complete command documentation |
| Architecture Overview | System design and patterns |
| Visual Diagrams | Mermaid architecture diagrams |
| Programmatic API | Using Atlas as a library |
| Configuration | All settings and preferences |
Atlas is the state management engine that powers the flow-cli workflow system. It can be used standalone or as a library.
┌─────────────────────────────────────────────────────────────────┐
│ flow-cli (ZSH) atlas (Node.js) │
│ ──────────────── ──────────────── │
│ • Shell commands • Clean Architecture │
│ • Fast CLI • State management │
│ • TUI dashboard • Registry + Sessions │
│ Consumes ──────────────────────▶ Standalone engine │
└─────────────────────────────────────────────────────────────────┘
brew tap data-wise/tap
brew install atlascurl -fsSL https://raw.githubusercontent.com/Data-Wise/atlas/main/install.sh | bashgit clone https://github.com/Data-Wise/atlas.git
cd atlas && npm install
npm link # Makes 'atlas' available globallyatlas completions zsh >> ~/.zshrc # or bash/fish# Initialize atlas
atlas init
# Initialize with a project template
atlas init --template node --name my-app
# Sync projects from .STATUS files
atlas sync
# Start a work session
atlas session start myproject
# Quick capture an idea
atlas catch "check VanderWeele 2015 appendix"
# Leave a breadcrumb
atlas crumb "stuck on variance estimation"
# Show context ("where was I?")
atlas whereatlas project add ~/projects/medrobust --tags=r-package,active
atlas project list --status=active
atlas project show medrobust
atlas project remove oldprojectatlas session start medrobust
atlas session status
atlas session end "Completed delta method SEs"
# Session analytics
atlas stats # Weekly summary
atlas stats month # Monthly summary
atlas stats --project medrobust # Project-specific
atlas stats --format json # JSON outputatlas catch "check VanderWeele 2015 appendix"
atlas catch medrobust "add sensitivity plot"
atlas inbox
atlas inbox --project=medrobustatlas where # Current context
atlas where medrobust # Project context
atlas crumb "stuck on variance"
atlas trail # Recent breadcrumbs
atlas trail --days=7atlas status myproject # Show project status
atlas status myproject --set active # Set status
atlas status myproject --progress 50 # Set progress
atlas status myproject --next "Implement X" # Set next action
atlas status myproject --complete # Complete current action
atlas status myproject --increment 10 # Increase progress by 10
atlas focus myproject "Delta method SEs" # Set focusatlas sync # Import from .STATUS files
atlas sync --dry-run # Preview what would sync
atlas sync --watch # Watch mode (5s interval)atlas inbox # Show inbox items
atlas inbox --stats # Show inbox statistics
atlas inbox --triage # Interactive triage modeatlas dashboard # Launch TUI dashboard
atlas dash # Alias for dashboard| Key | Action |
|---|---|
↑↓ |
Navigate projects |
Enter |
Open project detail view |
Esc |
Return to main view / Exit focus mode |
/ |
Search/filter projects |
a |
Filter: active projects only |
p |
Filter: paused projects only |
* |
Clear filter (show all) |
s |
Start session (in detail view) |
e |
End current session |
c |
Quick capture |
r |
Refresh data (reset timer in focus mode) |
o |
Open project folder (detail view) |
f |
Enter focus mode (Pomodoro timer) |
d |
Decision helper ("What to work on?") |
t |
Cycle themes (default/dark/minimal) |
q |
Quit dashboard |
? |
Show help |
| Key | Action |
|---|---|
Space |
Pause/Resume timer |
r |
Reset timer |
+/- |
Adjust time (±5 minutes) |
c |
Quick capture |
Esc |
Exit focus mode |
- Focus indicator: Active session's project highlighted
- Recency column: "Last: 2h ago" shows time since last session
- Quick filters: Press
a/p/s/*to filter by status - Search: Press
/to fuzzy search projects - Session gauge: Visual progress toward daily goal
- Sparkline: Weekly session activity graph
- Inline capture: Quick idea capture without leaving dashboard
- Focus mode: Minimal distraction UI with Pomodoro timer (
f) - Decision helper: "What should I work on?" suggestions (
d) - Break reminders: Notification after Pomodoro completes
- Terminal-adaptive: Adjusts to terminal size, warns if too small
- Theme cycling: Press
tto cycle through themes (default, dark, minimal) - Time-aware suggestions: Decision helper adapts to time of day
- Pomodoro stats: Shows today's completed sessions in focus mode
- Break enforcement: Modal break dialog after Pomodoro completes
- Streak tracking: Consecutive day tracking with visual display
- Time awareness: Gentle time cues without breaking flow
- Celebrations: Positive reinforcement on achievements
- Context restoration: "Last time you were..." on session start
- Anti-perfectionism: "Good enough" session endings
Track your productivity patterns with atlas stats:
- Weekly/monthly summaries: Total sessions, time, flow percentage
- Streak history: Current and longest streaks
- Flow state metrics: Sessions ≥15min = flow state
- Per-project breakdown: See which projects get the most focus
- Multiple formats: Table, JSON, or concise text output
Preferences for these features can be configured:
atlas config prefs get adhd # View ADHD settings
atlas config prefs set adhd.showStreak false
atlas config prefs set adhd.celebrationLevel enthusiastic # minimal|normal|enthusiastic- Project cards: Visual cards with progress bars and next actions
- Contextual UI: Command bar shows available actions
- Zen mode: Minimal distraction mode (
zkey)
atlas init --list-templates # Show available templates
atlas init --template node # Node.js package
atlas init --template r-package # R package
atlas init --template python # Python package
atlas init --template quarto # Quarto document
atlas init --template research # Research project
atlas init --template minimal # Minimal .STATUS
atlas init --template node --name foo # With custom nameADHD-friendly context switching - save your place when you need to switch tasks:
atlas park "working on delta method" # Park current context with note
atlas park --keep-session # Park but keep session running
atlas parked # List all parked contexts
atlas unpark # Restore most recent parked context
atlas unpark abc123 # Restore specific context by IDatlas template list # Show built-in + custom templates
atlas template show node # Display template content
atlas template create mytemplate # Create custom template
atlas template create mynode --from node # Copy from existing
atlas template create mynode --extends node # Inherit from existing (v0.5.2+)
atlas template export node # Export built-in for customization
atlas template delete mytemplate # Delete custom template
atlas template dir # Show custom templates directoryCustom templates are stored in ~/.atlas/templates/ with YAML frontmatter:
---
name: My Template
description: Custom template for my projects
extends: node # Optional: inherit from built-in template
---
## Project: {{name}}
...Define custom variables in config that get replaced in templates:
atlas config prefs set templateVariables.github_user myuser
atlas config prefs set templateVariables.author "My Name"Variables are replaced as {{variable_name}} in templates.
atlas config setup # Interactive wizard
atlas config show # Show all config
atlas config paths # Show scan paths
atlas config add-path ~/myprojects # Add scan path
atlas config prefs show # Show preferences
atlas config prefs get adhd # Get ADHD settings
atlas config prefs set adhd.showStreak false # Set preference
atlas config prefs reset # Reset to defaultsatlas --storage sqlite # Use SQLite backend
atlas migrate --to sqlite # Migrate to SQLite
atlas migrate --to filesystem # Migrate back to JSONimport { Atlas } from '@data-wise/atlas';
// Initialize with options
const atlas = new Atlas({
storage: 'sqlite', // or 'filesystem' (default)
configPath: '~/.atlas' // data directory
});
// Projects API
const projects = await atlas.projects.list({ status: 'active' });
await atlas.projects.register('/path/to/project', { tags: ['r-package'] });
await atlas.projects.setStatus('medrobust', 'paused');
await atlas.projects.setProgress('medrobust', 75);
await atlas.projects.setFocus('medrobust', 'Delta method SEs');
await atlas.projects.incrementProgress('medrobust', 10);
await atlas.projects.completeNextAction('medrobust', 'New task');
// Sessions API
const session = await atlas.sessions.start('medrobust');
await atlas.sessions.end('Completed delta method');
const current = await atlas.sessions.current();
// Capture API
await atlas.capture.add("new idea", { project: 'medrobust', type: 'idea' });
const inbox = await atlas.capture.inbox({ project: 'medrobust' });
const counts = await atlas.capture.counts();
// Context API
const ctx = await atlas.context.where('medrobust');
console.log(ctx.focus); // "delta method SEs"
console.log(ctx.session); // { start: ..., duration: ... }
console.log(ctx.recentCrumbs); // ["stuck on variance", ...]
await atlas.context.breadcrumb("stuck on variance", 'medrobust');
const trail = await atlas.context.trail('medrobust', 7); // last 7 days
// Sync API
await atlas.sync({ paths: ['~/projects'], dryRun: false });
// Clean up (important for SQLite)
atlas.close();Atlas follows Clean Architecture principles:
src/
├── domain/ # Business entities & rules
│ ├── entities/ # Project, Session, Capture, Breadcrumb
│ ├── value-objects/ # ProjectType, SessionState
│ └── repositories/ # Repository interfaces
│
├── use-cases/ # Application business logic
│ ├── project/ # ScanProjects, GetStatus, GetRecentProjects
│ ├── session/ # CreateSession, EndSession
│ ├── capture/ # CaptureIdea, GetInbox, TriageInbox
│ ├── context/ # GetContext, LogBreadcrumb, GetTrail
│ ├── registry/ # SyncRegistry, RegisterProject
│ └── status/ # UpdateStatus
│
├── adapters/ # External interfaces
│ ├── repositories/ # FileSystem + SQLite implementations
│ ├── Container.js # Dependency injection
│ ├── gateways/ # StatusFileGateway
│ └── events/ # Event publishing
│
└── cli/ # Command-line interface
└── dashboard.js # TUI dashboard (blessed-contrib)
Atlas supports two storage backends:
~/.atlas/
├── projects.json # Project registry
├── sessions.json # Session history
├── captures.json # Captured ideas/tasks
└── breadcrumbs.json # Breadcrumb trail
~/.atlas/
└── atlas.db # All data in single SQLite database
Switch backends with --storage sqlite or migrate with atlas migrate.
flow-cli (the ZSH plugin) uses atlas for state management:
# flow-cli command
work medrobust
# Internally calls:
# atlas session start medrobust
# atlas where medrobustThe atlas-bridge in flow-cli provides graceful degradation - flow-cli works without atlas installed, just with reduced features.
# Run tests
npm test
# Run specific test suite
npm run test:unit
npm run test:integration
# Lint
npm run lint
# Format
npm run formatMIT
