DevAIFlow officially supports:
- macOS (Intel and Apple Silicon)
- Linux (Ubuntu, Debian, Fedora, RHEL, etc.)
- Windows 10/11 (see Windows Installation below)
-
Python 3.10, 3.11, or 3.12
python --version # Check your versionNote: Python 3.9 may work but is not officially tested. Python 3.13+ has not been tested yet.
-
Claude Code CLI (version 2.1.3 or higher)
- Install from: https://docs.claude.com/en/docs/claude-code/installation
- Verify:
claude --version - IMPORTANT: Version 2.1.3+ is required for slash commands and skills support
-
Git
git --version # Should be 2.x or higher
-
GitHub CLI (
gh)- Install from: https://cli.github.com/
- Verify:
gh --version - Required for:
- Creating GitHub pull requests via
daf complete - Fetching PR templates from private GitHub repositories
- Creating GitHub pull requests via
- Setup:
gh auth login
-
GitLab CLI (
glab)- Install from: https://gitlab.com/gitlab-org/cli
- Verify:
glab --version - Required for:
- Creating GitLab merge requests via
daf complete - Fetching MR templates from private GitLab repositories
- Creating GitLab merge requests via
- Setup:
glab auth login
- GitHub CLI (
gh) - For GitHub Issues integration (see above) - GitLab CLI (
glab) - For GitLab Issues integration (see above) - JIRA API Token - For JIRA integration
- Only needed if you want JIRA integration
- GitHub and GitLab use their respective CLIs instead
- Without any issue tracker, the tool works for local session management only
Install the latest stable release from PyPI:
pip install devaiflowVerify installation:
daf --version
daf --helpCheck dependencies:
daf init --checkThis will verify all required and optional tools are installed. See Verifying Dependencies below.
For development or contributing:
# Clone the repository
git clone https://github.com/itdove/devaiflow.git
cd devaiflow
# Install in editable mode with dev dependencies
pip install -e ".[dev]"DevAIFlow is fully supported on Windows 10 and Windows 11. Follow these steps for Windows-specific installation.
-
Python 3.10, 3.11, or 3.12
# Check if Python is installed python --version # If not installed, download from python.org or use winget: winget install Python.Python.3.12
-
Claude Code CLI
# Install using winget winget install Anthropic.Claude # Verify installation claude --version
-
Git for Windows
# Install using winget winget install Git.Git # Verify installation git --version
-
Optional: GitHub CLI
# Install using winget winget install GitHub.cli # Verify and authenticate gh --version gh auth login
-
Optional: GitLab CLI
- Download from: https://gitlab.com/gitlab-org/cli/-/releases
- Extract to a directory in your PATH
- Or use scoop:
scoop install glab
Using PowerShell:
# Navigate to the repository
cd C:\Users\YourUsername\development\devaiflow
# Install using pip
pip install .
# Verify installation
daf --version
daf init --checkUsing Command Prompt:
# Navigate to the repository
cd C:\Users\YourUsername\development\devaiflow
# Install using pip
pip install .
# Verify installation
daf --version
daf init --checkEnvironment Variables:
Set environment variables in PowerShell (add to your PowerShell profile for persistence):
# Edit your PowerShell profile
notepad $PROFILE
# Add these lines:
$env:JIRA_API_TOKEN = "your-api-token-here"
$env:JIRA_URL = "https://jira.example.com"
# Save and reload:
. $PROFILEOr set them permanently via System Properties:
- Search for "Environment Variables" in Windows Start menu
- Click "Environment Variables" button
- Add new User variables:
- Name:
JIRA_API_TOKEN, Value: your token - Name:
JIRA_URL, Value: your JIRA URL
- Name:
Ensure Python Scripts directory is in your PATH:
# Check if Python Scripts is in PATH
$env:PATH -split ';' | Select-String "Python.*Scripts"
# If not found, add it (typical location):
$env:PATH += ";C:\Users\YourUsername\AppData\Local\Programs\Python\Python312\Scripts"To make it permanent:
- Search for "Environment Variables" in Windows Start menu
- Edit the "Path" variable
- Add:
C:\Users\YourUsername\AppData\Local\Programs\Python\Python312\Scripts
Integration Tests on Windows:
Integration tests (test_collaboration_workflow.sh, test_jira_green_path.sh) require bash and are not supported natively on Windows. Options:
-
WSL (Windows Subsystem for Linux) - Recommended
# Install WSL wsl --install # Run tests in WSL wsl cd /mnt/c/Users/YourUsername/development/devaiflow ./integration-tests/test_collaboration_workflow.sh
-
Git Bash
- Comes with Git for Windows
- Open Git Bash terminal
- Navigate to repository
- Run:
./integration-tests/test_collaboration_workflow.sh
-
Skip Integration Tests
- Unit tests work natively on Windows
- Integration tests are optional for development
- CI/CD covers integration testing
File Locking:
- Windows file locking works differently from Unix systems
- DevAIFlow automatically disables fcntl-based file locking on Windows
- Session files use atomic write operations instead
- No action required - handled automatically
Path Separators:
- DevAIFlow uses
pathlib.Pathfor cross-platform path handling - Both forward slashes (
/) and backslashes (\) work correctly - Long path support (>260 characters) is automatically handled
Signal Handling:
- Windows uses
SIGBREAKinstead of UnixSIGTERM - DevAIFlow automatically uses the correct signal for your platform
- Ctrl+C works as expected to interrupt operations
Problem: daf: command not found
Solution:
# Ensure Python Scripts is in PATH
python -m pip show devaiflow
# Note the "Location" path
# Add Location\Scripts to your PATH environment variableProblem: ModuleNotFoundError: No module named 'devflow'
Solution:
# Reinstall the package
pip uninstall devaiflow
pip install .Problem: Permission errors during installation
Solution:
# Install for current user only
pip install --user .Problem: Git commands fail with "git: command not found"
Solution:
# Ensure Git is in PATH
git --version
# If not found, add Git to PATH:
# Typical location: C:\Program Files\Git\cmdProblem: Claude Code doesn't launch from PowerShell
Solution:
# Verify Claude is in PATH
claude --version
# If not found, find installation directory:
Get-Command claude -ErrorAction SilentlyContinue
# Add to PATH if neededFor more troubleshooting, see Windows Troubleshooting Guide.
If you authenticated the GitHub CLI (gh auth login) as shown in the Prerequisites section, you're already set up! No additional configuration needed.
# Verify authentication
gh auth status
# Test by viewing your issues
gh issue list --assignee @meSee the GitHub Issue Integration Guide for complete documentation.
If you authenticated the GitLab CLI (glab auth login), you're ready to go!
# Verify authentication
glab auth status
# Test by viewing your issues
glab issue list --assignee @meSkip this section if you're using GitHub or GitLab Issues instead.
The tool uses the JIRA REST API directly - no additional CLI tools are needed!
For Atlassian Cloud (https://yourcompany.atlassian.net):
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token"
- Give it a name (e.g., "DevAIFlow")
- Copy the token (you won't see it again!)
For Enterprise JIRA or Self-Hosted:
- Go to your JIRA instance → Profile → Personal Access Tokens
- Create a new token
- Copy the token value
⚠️ IMPORTANT: Authentication setup differs between Cloud and Self-Hosted JIRA.
For Atlassian Cloud:
Add these to your shell profile (~/.bashrc, ~/.zshrc, ~/.profile, etc.):
# Step 1: Create base64-encoded credentials (email:token)
# Replace with YOUR email and token from step 1
echo -n "user@company.com:your-api-token" | base64
# Step 2: Add to shell profile
# CRITICAL: JIRA_AUTH_TYPE=basic is required for Cloud
export JIRA_AUTH_TYPE=basic
export JIRA_API_TOKEN="<base64-output-from-above>"
export JIRA_URL="https://yourcompany.atlassian.net"For Self-Hosted JIRA:
Add these to your shell profile:
# For self-hosted JIRA, use Bearer authentication
export JIRA_AUTH_TYPE=Bearer
export JIRA_API_TOKEN="your-personal-access-token"
export JIRA_URL="https://jira.example.com"Optional debugging:
# Enable debug logging for JIRA API calls (troubleshooting)
export DEVAIFLOW_DEBUG=1Reload your shell:
source ~/.zshrc # or ~/.bashrc, ~/.profile, etc.# Test authentication with curl
curl -H "Authorization: Basic $JIRA_API_TOKEN" \
"$JIRA_URL/rest/api/2/myself"
# If successful, test DevAIFlow integration
daf sync --dry-run✅ If this shows your JIRA tickets, the integration is working!
daf initThis launches an interactive preset-based wizard that:
- Auto-detects your issue tracker from git remotes and environment variables
- Preset selection - Choose your primary use case:
- GitHub Issues - Auto-detected from GitHub remotes, ≤3 questions
- GitLab Issues - Auto-detected from GitLab remotes, ≤3 questions
- JIRA - Auto-detected from JIRA_API_TOKEN, ≤5 questions
- Local sessions only - No issue tracker, 1 question (workspace path)
- Custom configuration - Full wizard for advanced users
- Creates configuration files (automatically, no manual file creation needed):
config.json- Personal preferences (workspace, prompts, GitHub/GitLab settings)backends/jira.json- JIRA URL and field mappings (if using JIRA)organization.json- JIRA project key and transitions (if using JIRA)team.json- Team defaults (workstream, component, comment visibility)enterprise.json- Enterprise-wide settings (optional)
- Shows next steps with preset-specific commands to get started immediately
Preset examples:
- GitHub (≤3 questions): Workspace path + optional labels + auto-close setting
- GitLab (≤3 questions): Workspace path + optional labels + auto-close setting
- JIRA (≤5 questions): JIRA URL + project + workspace + comment visibility
- Local (1 question): Workspace path only
All settings can be changed later using daf config edit.
| File | Purpose | Key Settings |
|---|---|---|
backends/jira.json |
JIRA backend configuration | JIRA URL, field mappings (API metadata) |
organization.json |
Organization settings | JIRA project key, transitions, parent_field_mapping, sync filters |
team.json |
Team-specific settings | Default workstream, component, comment visibility |
config.json |
User personal preferences | Workspace path, prompts, context files |
After running daf init, verify and customize your configuration:
-
Verify JIRA URL in
backends/jira.json# Check JIRA URL is correct daf config show --format split | grep url
-
Set JIRA project key in
organization.json# Verify your default project key daf config show --format split | grep jira_project
-
Configure team defaults in
team.json(optional)# Add default workstream, component, or other team-specific values vim $DEVAIFLOW_HOME/team.json
-
Set workspace path in
config.json# Verify your workspace path for repository discovery daf config show --format split | grep workspace
-
Test JIRA connection
# Verify JIRA integration works daf sync --dry-run
For detailed configuration options and multi-file structure, see Multi-File Configuration System.
After initializing configuration, install the DevAIFlow skills into Claude Code:
daf skillsThis installs all bundled skills globally to ~/.claude/skills/:
- Slash commands (
/daf-*) - Skills withname:field in frontmatter (e.g.,/daf-help,/daf-list,/daf-status) - Reference skills - Skills without
name:field that are auto-loaded (e.g.,daf-cli,gh-cli,git-cli,glab-cli)
These enable you to use DevAIFlow features directly within Claude Code sessions.
Example usage:
# Preview what would be installed
daf skills --dry-run
# Install all skills (slash commands + reference skills)
daf skillsNote: Skills are installed globally to ~/.claude/skills/ and are available in all Claude Code sessions. Claude Code 2.1.3+ is required for slash command support.
Edit $DEVAIFLOW_HOME/config.json:
{
"jira": {
"url": "https://jira.example.com",
"user": "your-username",
"transitions": {
"on_start": {
"from": ["New", "To Do"],
"to": "In Progress",
"prompt": false,
"on_fail": "warn"
},
"on_complete": {
"prompt": true
}
},
"time_tracking": true
},
"repos": {
"workspace": "/Users/your-username/development/workspace",
"detection": {
"method": "keyword_match",
"fallback": "prompt"
},
"keywords": {
"workspace-management-service": ["backup", "restore", "subscription"],
"workspace-sops": ["terraform", "github", "custom-properties"]
}
}
}Key Settings:
jira.url- Your JIRA instance URL (inbackends/jira.json)jira.transitions- Auto-transition configuration (inorganization.json)repos.workspace- Your main development directoryrepos.keywords- Keywords for smart repository detection
See Configuration Reference for detailed configuration options.
Enable tab completion for the daf command:
Bash:
# Add to ~/.bashrc
eval "$(_DAF_COMPLETE=bash_source daf)"
# Reload
source ~/.bashrcZsh:
# Add to ~/.zshrc
eval "$(_DAF_COMPLETE=zsh_source daf)"
# Reload
source ~/.zshrcFish:
# Save to completion file
_DAF_COMPLETE=fish_source daf > ~/.config/fish/completions/daf.fishAfter installation, verify all required and optional tools are installed:
daf init --checkExpected output:
Checking dependencies for DevAIFlow...
Required Dependencies:
┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃ Tool ┃ Status ┃ Version ┃ Description ┃
┡━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ git │ ✓ │ git version ... │ Git version control │
│ claude │ ✓ │ claude 1.2.3 │ Claude Code CLI │
└────────┴────────┴─────────────────┴──────────────────────┘
Optional Dependencies:
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Tool ┃ Status ┃ Version ┃ Description ┃
┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ gh │ ✓ │ gh 2.40.1 │ GitHub CLI │
│ glab │ ✓ │ glab 1.35.0 │ GitLab CLI │
│ pytest│ ✓ │ pytest 7.4.3 │ Python testing framework │
└───────┴────────┴───────────────┴───────────────────────────┘
✓ All required dependencies available
If any required tools are missing:
- See Prerequisites for installation instructions
- See Troubleshooting Guide for help
Run these commands to verify everything is set up:
# 1. Check daf is installed
daf --version
# 2. Check daf can find config
daf list # Should show empty list or existing sessions
# 3. Test JIRA integration (if configured)
daf sync --dry-run # Preview what would be syncedError: python: command not found
Solution:
# Try python3
python3 --version
# If that works, create an alias
alias python=python3Error: Permission denied when installing
Solution:
# Use --user flag
pip install --user .Error: Authentication failed or 401 Unauthorized or JIRA_API_TOKEN not set
Solutions:
- Verify token is set:
echo $JIRA_API_TOKEN - Check token hasn't expired
- For Enterprise JIRA, ensure you're using Personal Access Token (not API token)
- Reload your shell:
source ~/.zshrc - Test with:
daf sync --dry-run
Error: Config file not found
Solution:
# Create it
daf init
# Verify location
ls $DEVAIFLOW_HOME/config.jsonpip install --upgrade devaiflowcd ~/development/workspace/devaiflow
git pull # Get latest code
pip install --upgrade .pip uninstall devaiflow# Backup first!
cp -r $DEVAIFLOW_HOME $DEVAIFLOW_HOME.backup
# Remove all data
rm -rf $DEVAIFLOW_HOMENote: This does NOT delete your Claude Code conversation files in ~/.claude/projects/.
CRITICAL: Claude Code must be configured to allow reading context files from $DEVAIFLOW_HOME/ and $DEVAIFLOW_HOME/. Without this, the tool will fail when Claude tries to read organization context files.
DevAIFlow creates context files in $DEVAIFLOW_HOME/ that Claude Code automatically reads when you run daf open or daf jira new:
$DEVAIFLOW_HOME/backends/JIRA.md- JIRA integration rules$DEVAIFLOW_HOME/ENTERPRISE.md- Enterprise-wide policies and standards$DEVAIFLOW_HOME/ORGANIZATION.md- Organization-wide standards (JIRA templates, Wiki markup requirements)$DEVAIFLOW_HOME/TEAM.md- Team conventions$DEVAIFLOW_HOME/USER.md- Personal notes and preferences
By default, Claude Code may block access to these directories because they are dotfiles (start with .).
CRITICAL: These files must be readable from ALL working directories, including temporary directories created by daf jira new. This is why the allow list MUST be in the global ~/.claude/settings.json, not in project-specific settings files.
Add file access permissions to your global Claude Code settings file:
Location: ~/.claude/settings.json
IMPORTANT: Use the global settings file (~/.claude/settings.json), NOT the project-local file (.claude/settings.local.json). Project-local settings files are typically not committed to version control and won't be available when using daf jira new or when other team members clone the repository.
Add this configuration:
{
"permissions": {
"allow": [
"Read($DEVAIFLOW_HOME/ENTERPRISE.md)",
"Read($DEVAIFLOW_HOME/ORGANIZATION.md)",
"Read($DEVAIFLOW_HOME/TEAM.md)",
"Read($DEVAIFLOW_HOME/USER.md)"
]
}
}IMPORTANT: Replace $DEVAIFLOW_HOME with your actual DevAIFlow home directory:
- Default location:
~/.daf-sessions(if you haven't customized it) - Custom location: Use the value of your
DEVAIFLOW_HOMEenvironment variable
Example with default location:
{
"permissions": {
"allow": [
"Read(~/.daf-sessions/ENTERPRISE.md)",
"Read(~/.daf-sessions/ORGANIZATION.md)",
"Read(~/.daf-sessions/TEAM.md)",
"Read(~/.daf-sessions/USER.md)"
]
}
}- Create or edit the settings file:
# Check if file exists ls ~/.claude/settings.json # If not, create it (using default ~/.daf-sessions location) mkdir -p ~/.claude cat > ~/.claude/settings.json << 'EOF'
{
"permissions": {
"allow": [
"Read(/.daf-sessions/ENTERPRISE.md)",
"Read(/.daf-sessions/ORGANIZATION.md)",
"Read(/.daf-sessions/TEAM.md)",
"Read(/.daf-sessions/USER.md)"
]
}
}
EOF
**Note:** If you set a custom `DEVAIFLOW_HOME` environment variable, replace `~/.daf-sessions` with your custom path.
2. **Verify the file:**
```bash
cat ~/.claude/settings.json
- Test with daf:
# Create a test context file echo "# Test Organization Context" > $DEVAIFLOW_HOME/ORGANIZATION.md # Open a session and verify Claude can read it daf new --name test-permissions --goal "Test Claude Code permissions" # In the Claude Code session, ask: "Can you read $DEVAIFLOW_HOME/ORGANIZATION.md?"
The allow list must be in the global ~/.claude/settings.json file because:
- Project-local settings aren't portable: Project
.claude/settings.local.jsonfiles are typically git-ignored and not pushed to repositories - daf jira new requires access: When creating JIRA tickets with codebase analysis, Claude needs to read
$DEVAIFLOW_HOME/ORGANIZATION.mdfor organization standards - Team consistency: All team members need the same access permissions, which global settings ensure
Do NOT use .claude/settings.local.json in the project directory for this configuration - it won't be available across different working directories or for team members.
Problem: "Permission denied" when Claude tries to read context files
Cause: Claude Code settings don't allow reading from $DEVAIFLOW_HOME/
Solution: Add the paths to file_access.read array as shown above
Problem: Settings file doesn't seem to work
Cause: JSON syntax error
Solution: Validate your JSON:
python -m json.tool ~/.claude/settings.jsonProblem: Changes not taking effect
Cause: Claude Code caches settings
Solution: Restart Claude Code completely (exit and reopen)
What this allows:
- Claude can read context files from
$DEVAIFLOW_HOME/and$DEVAIFLOW_HOME/ - These directories only contain markdown documentation files
- No sensitive credentials or secrets stored in these locations
What this does NOT allow:
- Writing to these directories (read-only access)
- Accessing other dotfiles or system directories
- Reading files outside the specified paths
After configuration, verify Claude Code can read context files:
# 1. Create test file
echo "# Test Content" > $DEVAIFLOW_HOME/ORGANIZATION.md
# 2. Open a session
daf open PROJ-12345
# 3. In Claude Code, it should automatically read the file
# Check the initial prompt - it should include instructions to read the fileFor troubleshooting, see Troubleshooting Guide - Claude Code Permission Issues.
- Quick Start Guide - Create your first session
- Configuration Reference - Customize the tool
- Commands Reference - Learn available commands