Integration Guide
Connect FlowSquad to Jira, Confluence, GitHub, GitLab, Bitbucket, Gitea, Azure DevOps, LDAP/AD, SAML 2.0 (any IdP), and OAuth2 providers. For a full Keycloak reference walkthrough, see the Reference Guide.
1. Integration Overview
FlowSquad integrates with your existing toolchain to eliminate context-switching and keep all your artefacts in sync. Integrations are configured in two places:
- Setup Wizard steps 5-6 -- during initial deployment
- Admin Panel -> Settings -- at any time after setup
Supported Integrations
| Integration | Category | What It Enables |
|---|---|---|
| Jira | Project Management | Import tickets as requirements; push Epics, Stories, Tasks, and Design cards back to Jira |
| Confluence | Documentation | Import pages as source documents; publish design documents to Confluence spaces |
| GitHub (Cloud + Enterprise) | Source Control | Clone and analyse private repositories for codebase insights |
| GitLab (Cloud + Self-hosted) | Source Control | Clone and analyse repositories using personal access tokens or OAuth |
| Bitbucket Cloud (bitbucket.org) | Source Control | Clone repositories using username and App Password via the Bitbucket v2.0 API |
| Bitbucket Server / Data Center | Source Control | Clone repositories on self-hosted Atlassian Bitbucket via the v1.0 REST API |
| Azure DevOps | Source Control | Clone repositories using Personal Access Token (PAT) via the Azure DevOps REST API |
| Gitea / Forgejo (Self-hosted) | Source Control | Clone repositories from Gitea or Forgejo instances using token-based authentication |
| LDAP / Active Directory | Identity | Authenticate enterprise users; auto-assign FlowSquad roles from AD groups |
| SAML 2.0 | SSO | Single Sign-On with any SAML 2.0 compliant identity provider |
| OAuth2 | SSO | Social or enterprise login via GitHub, Google, Microsoft, Okta, and custom OAuth2 providers |
2. Jira Integration
Setup
- Go to Admin Panel -> Settings -> Jira (or Setup Wizard Step 6)
- Enter your Jira URL (e.g.
https://yourcompany.atlassian.net) - Enter your Jira account email and an API token (generate at id.atlassian.com -> API tokens)
- Click Test Connection to verify -- a green status confirms success
- Click Save
Jira Cloud uses email + API token authentication. Jira Server (self-hosted) uses username + password. Select the correct type in the Jira settings.
Using Jira in FlowSquad
Smart Import
In the Analyze or Refine tab, click "Import from Jira". You can:
- Enter a single ticket key (e.g.
PROJ-123) to import one requirement - Enter a JQL query (e.g.
project = PROJ AND sprint in openSprints()) for bulk import
FlowSquad maps the Jira summary and description into a structured requirement ready for refinement.
Push Artefacts to Jira
Every Epic, Story, Task, and Design card has a "Push to Jira" button. Click it to create a corresponding Jira issue. The card then displays the created Jira issue key for easy cross-reference.
Bulk Export
Select multiple artefacts using the bulk action bar and choose "Export to Jira" to push them all in one operation.
You can push individual artefacts to Jira one at a time using the per-card button -- a full bulk export is not required.
3. Confluence Integration
Setup
- Go to Admin Panel -> Settings -> Confluence
- Enter the full Confluence base URL -- include the
/wikipath for Confluence Cloud:
https://yourcompany.atlassian.net/wiki
- Enter your Confluence account email and API token
- Click Save first, then click Test Connection
You must click Save before clicking Test Connection. If you test without saving, the Confluence URL may show as blank in the Analyze tab even if testing appeared to succeed.
Using Confluence in FlowSquad
Import Documents from Confluence
In the Analyze tab, under "Load Documents", enter a Confluence page URL. FlowSquad fetches the page content and makes it available as a knowledge source for AskProduct and requirement generation.
Push Design Documents to Confluence
In the Design tab, open a design card and click "Push to Confluence". FlowSquad publishes the formatted design document to your Confluence space, creating or updating the page automatically.
4. Source Control Integration
FlowSquad automatically detects your Git provider from the repository URL you supply. Six providers are supported out of the box. All use HTTPS with token-based authentication -- SSH is not required.
| Provider | URL Pattern | Auth Type | Token / Credential Required |
|---|---|---|---|
| GitHub Cloud | github.com/... | PAT (classic or fine-grained) | Scope: repo (private repos) or public_repo (public) |
| GitHub Enterprise | github.yourcompany.com/... | PAT | Same scopes as GitHub Cloud; enterprise host auto-detected |
| GitLab Cloud | gitlab.com/... | PAT | Scope: read_repository |
| GitLab Self-hosted | gitlab.yourcompany.com/... | PAT | Scope: read_repository |
| Bitbucket Cloud | bitbucket.org/... | App Password | Permission: Repositories > Read (generate at bitbucket.org -> Personal Settings -> App passwords) |
| Bitbucket Server / DC | bitbucket.yourcompany.com/... | HTTP Basic / PAT | Username + password or project-scoped token |
| Azure DevOps | dev.azure.com/org/... | PAT | Scope: Code > Read (generate in Azure DevOps -> User Settings -> Personal access tokens) |
| Gitea / Forgejo | gitea.yourcompany.com/... | API Token | Generate in Gitea -> Settings -> Applications -> Access tokens |
Setup
- Go to Admin Panel -> Settings -> Source Control (or Setup Wizard Step 5)
- Enter the Git base URL (e.g.
https://github.comorhttps://bitbucket.org) - Enter your username and the appropriate token or App Password for your provider (see table above)
- Enter the Project / Repository key in the format required by your provider (see below)
- Click Test Connection to validate access and load available branches, then click Save
Project Key Format by Provider
| Provider | Project Key Format | Example |
|---|---|---|
| GitHub | owner/repo | acme-corp/backend-api |
| GitLab | group/project or numeric project ID | acme/backend-api |
| Bitbucket Cloud | workspace/repo-slug | acme-workspace/backend-api |
| Bitbucket Server | PROJECT/repo-slug (PROJECT is uppercase key) | BACKEND/api-service |
| Azure DevOps | project/repo | MyProject/backend-api |
| Gitea / Forgejo | owner/repo | acme/backend-api |
Using Source Control in FlowSquad
In the Analyze tab, click "Add Codebase" and enter the full Git repository URL. FlowSquad detects the provider automatically and uses the stored credentials to clone and analyse the codebase. The analysis results power Quality Score, AskProduct, and Security Scan.
Bitbucket Cloud does not accept your account password over HTTPS. You must generate an App Password at bitbucket.org → Personal Settings → App passwords with the Repositories: Read permission.
If your organisation enforces SAML SSO, you must also authorise the personal access token for that organisation via github.com/settings/tokens → Configure SSO.
FlowSquad passes the token as both an HTTP Basic password and a Bearer token header, so both classic Gitea and newer Forgejo instances are supported without any additional configuration.
5. LDAP / Active Directory
Setup
- Go to Setup Wizard Step 4 → LDAP / Active Directory
- Fill in the following fields:
| Field | Example Value | Notes |
|---|---|---|
| LDAP Server URL | ldap://ad.company.com:389 | Use ldaps:// on port 636 for secure connections |
| Bind DN | CN=svc-flowsquad,OU=Users,DC=company,DC=com | Service account used to search the directory |
| Bind Password | (service account password) | Stored encrypted in the config database |
| User Search Base | OU=Users,DC=company,DC=com | Use DC=company,DC=com to search the entire domain |
| User Object Class | person | Typically person or user |
| Username Attribute | sAMAccountName | Use uid for OpenLDAP |
| Email Attribute | mail | Used to populate the user's email in FlowSquad |
| Group Search Base | OU=Groups,DC=company,DC=com | Required for group-to-role mapping |
| Group Member Attribute | memberOf | Attribute on the user object listing group memberships |
Group-to-Role Mapping
Map Active Directory or LDAP groups to FlowSquad roles. Assignments are re-evaluated on every login.
CN=FlowSquad-Admins,OU=Groups,DC=company,DC=com-> Global AdminCN=FlowSquad-ProdAdmins,OU=Groups,DC=company,DC=com-> Product AdminCN=FlowSquad-Users,OU=Groups,DC=company,DC=com-> Regular User
Manual role assignments made in the Admin Panel take precedence over group-based assignments.
Testing the Connection
Click Test Connection in the LDAP settings. FlowSquad validates the bind credentials and fetches a sample user from the directory. A successful test shows the user's attributes, confirming that attribute mapping is correct.
6. SAML 2.0 SSO -- Overview
How It Works
FlowSquad implements SP-initiated SAML 2.0 SSO:
- User clicks "Login with SAML" on the FlowSquad login page
- FlowSquad (the Service Provider) redirects the user to the configured Identity Provider (IdP)
- The user authenticates at the IdP
- The IdP sends a signed SAML assertion back to FlowSquad's ACS (Assertion Consumer Service) URL
- FlowSquad validates the assertion and creates a session -- the user lands on the Dashboard
Supported Identity Providers
Any SAML 2.0 compliant IdP is supported, including: Keycloak, Okta, Azure AD, OneLogin, ADFS, Google Workspace, Ping Identity, and custom implementations.
Configuration Location
SAML is configured in Setup Wizard Step 4 → Authentication → SAML.
Required Configuration Fields
| Field | Where to Find It |
|---|---|
| IdP SSO URL | IdP metadata -- the SingleSignOnService Location value |
| IdP Entity ID | IdP metadata -- the entityID attribute |
| IdP Certificate | IdP admin console -- X.509 signing certificate in PEM format |
| SP Entity ID | Auto-filled: https://yourflowsquad.com:5000/saml/metadata |
| SP ACS URL | Auto-filled: https://yourflowsquad.com:5000/saml/callback |
| Attribute Mapping | Map IdP attribute names to: username, email, firstName, lastName |
Optional Features
- Designated Admin Auto-Promotion -- comma-separated list of usernames or emails that are automatically granted Global Admin on first SAML login
- SAML Request Signing -- FlowSquad generates an RSA key pair; upload the public certificate to your IdP to verify requests
- Single Logout (SLO) -- logging out of FlowSquad also terminates the IdP session
7. OAuth2 Providers
FlowSquad supports OAuth2 login for: GitHub, Google, Microsoft (Azure AD), Okta, Keycloak, and custom OAuth2 providers.
General Setup
- Create an OAuth app in the provider's developer console (see provider-specific steps below)
- Set the redirect / callback URI to:
https://yourflowsquad.com/oauth2/<provider>/callback
# Examples:
https://flowsquad.yourcompany.com/oauth2/github/callback
https://flowsquad.yourcompany.com/oauth2/google/callback
https://flowsquad.yourcompany.com/oauth2/microsoft/callback
https://flowsquad.yourcompany.com/oauth2/okta/callback
https://flowsquad.yourcompany.com/oauth2/keycloak/callback
https://flowsquad.yourcompany.com/oauth2/custom/callback
- Copy the Client ID and Client Secret
- Enter them in Setup Wizard Step 4 → OAuth2 → [Provider] → Test → Save
GitHub
- github.com -> Settings -> Developer settings -> OAuth Apps -> New OAuth App
- Application Name:
FlowSquad - Homepage URL:
https://flowsquad.yourcompany.com - Authorization callback URL:
https://flowsquad.yourcompany.com/oauth2/github/callback - Click "Register application" -> copy Client ID and generate a Client Secret
- console.cloud.google.com -> APIs & Services -> Credentials -> Create Credentials -> OAuth 2.0 Client ID
- Application type: Web application
- Authorised redirect URI:
https://flowsquad.yourcompany.com/oauth2/google/callback - Copy Client ID and Client Secret
Microsoft (Azure AD)
- portal.azure.com -> Azure Active Directory -> App registrations -> New registration
- Redirect URI (Web):
https://flowsquad.yourcompany.com/oauth2/microsoft/callback - After registering: Certificates & secrets -> New client secret -> copy the value
- Copy the Application (client) ID from the Overview page
- Grant admin consent: App registrations -> FlowSquad -> API permissions -> "Grant admin consent for [Tenant]"
Okta
- Okta Admin -> Applications -> Create App Integration -> OIDC / OAuth2 -> Web Application
- Sign-in redirect URI:
https://flowsquad.yourcompany.com/oauth2/okta/callback - Copy Client ID and Client Secret -> enter in FlowSquad -> OAuth2 -> Okta section
Keycloak (OAuth2 / OIDC)
- Keycloak Admin -> select your realm -> Clients -> Create client
- Client type: OpenID Connect, Client ID:
flowsquad-oauth2 - Enable Client authentication (Confidential access type)
- Under Valid redirect URIs, add:
https://flowsquad.yourcompany.com/oauth2/keycloak/callback - Go to Credentials tab -> copy the Client Secret
- Enter in FlowSquad -> OAuth2 -> Keycloak section:
- Keycloak Server URL:
https://keycloak.yourcompany.com - Realm:
master(or your custom realm name) - Client ID:
flowsquad-oauth2 - Client Secret: (copied from Credentials tab)
- Keycloak Server URL:
For a complete step-by-step Keycloak configuration covering SAML, OAuth2, and LDAP together, see the Reference Guide — Keycloak Configuration.
Custom OAuth2 Provider
FlowSquad supports any standards-compliant OAuth2 / OIDC provider. Configure in Setup Wizard Step 4 → OAuth2 → Custom Provider:
| Field | Description | Where to Find It |
|---|---|---|
| Provider Name | Display name shown on the login button | Choose any label (e.g. "Acme SSO") |
| Authorization URL | The OAuth2 authorization endpoint | Provider's developer docs or /.well-known/openid-configuration |
| Token URL | Endpoint to exchange the code for a token | Provider's developer docs |
| User Info URL | Endpoint to fetch the authenticated user's profile | Provider's developer docs |
| Client ID | Application ID from the provider's console | Provider's OAuth app settings |
| Client Secret | Secret key for the application | Provider's OAuth app settings |
| Scopes | Space-separated OAuth2 scopes to request | Typically openid email profile |
| Callback URL | Register this in the provider console | https://yourflowsquad.com/oauth2/custom/callback |
8. Webhook Configuration
Outbound webhook configuration is planned for an upcoming release. When available, it will be accessible from Admin Panel → Settings → Webhooks. This section will be updated with full setup instructions when the feature ships.
Planned Events
The following events are planned for the initial webhook release:
| Event | Triggered When |
|---|---|
artifact_generated | An AI-generated artefact (design, test case, etc.) is produced |
artifact_saved_to_db | An artefact is saved to the product database |
jira_pushed | An artefact is pushed to Jira |
quality_scan_complete | A Quality Score analysis finishes |
security_scan_complete | A Security Scan analysis finishes |
10. Session Backend — Redis Opt-In
By default FlowSquad stores user sessions in its built-in SQLAlchemy config database (flowsquad_engine.db). This works out of the box on every deployment type with no extra software and survives server restarts. Most deployments never need to change this.
If you already run Redis in your infrastructure, or simply prefer sessions stored outside the application database, you can switch to Redis by installing Redis on your system and setting one environment variable.
When to Consider Redis
| Scenario | Recommended Backend |
|---|---|
| Standard single-node deployment | SQLAlchemy (default) — no action needed |
| You already run Redis in your infrastructure | Redis — reuse your existing server |
| You prefer sessions stored outside the application database | Redis |
| Air-gapped / no external services allowed | SQLAlchemy (default) |
Step 1 — Install Redis on your system
Redis is a separate open-source service. Install it on the same host as FlowSquad, or point to any reachable Redis server on your network:
| Platform | How to install |
|---|---|
| Ubuntu / Debian | sudo apt-get install -y redis-server && sudo systemctl enable --now redis |
| RHEL / Rocky / Alma Linux | sudo dnf install -y redis && sudo systemctl enable --now redis |
| Windows | Download and run the Windows Redis installer (community port), or run Redis inside WSL2 using the Ubuntu command above |
| Docker sidecar | docker run -d --name redis -p 6379:6379 --restart unless-stopped redis:7-alpine |
| Existing Redis server | No installation needed — use its hostname and port in Step 2 |
Step 2 — Set the SESSION_REDIS_URL environment variable
Set this variable on the machine where FlowSquad runs, before starting or restarting it:
SESSION_REDIS_URL=redis://<host>:<port>/<db-index>
| Scenario | Value |
|---|---|
| Redis on the same machine, no password | redis://localhost:6379/0 |
| Redis on a separate server | redis://192.168.1.50:6379/0 |
| Redis with a password | redis://:yourpassword@localhost:6379/0 |
| Redis with TLS (Redis 6+) | rediss://localhost:6380/0 (note the double s) |
Windows installer — System Environment Variables
Open Start → System Properties → Advanced → Environment Variables and add a new System variable, or run this in PowerShell as Administrator:
[System.Environment]::SetEnvironmentVariable('SESSION_REDIS_URL', 'redis://localhost:6379/0', 'Machine')
Linux installer / portable package
# Add to /etc/flowsquad/flowsquad.env (loaded automatically by the FlowSquad service)
SESSION_REDIS_URL=redis://localhost:6379/0
Docker
# docker run
docker run -e SESSION_REDIS_URL=redis://redis:6379/0 ... flowsquad
# docker-compose.yml
services:
flowsquad:
environment:
- SESSION_REDIS_URL=redis://redis:6379/0
redis:
image: redis:7-alpine
restart: unless-stopped
Step 3 — Restart FlowSquad
Restart the FlowSquad service normally. On startup the log confirms the active backend:
INFO Session backend = redis (localhost:6379/0)
That is all. FlowSquad detects the variable automatically and switches to Redis. No reinstall, no rebuild, no other files to change.
Reverting to SQLAlchemy
Remove or unset SESSION_REDIS_URL and restart FlowSquad. No data migration needed. Users currently logged in will need to log in again (their session no longer exists in the new backend).
SESSION_TYPE=filesystem forces the old file-based backend. This is not recommended — session files accumulate on disk without bound and cannot be shared across multiple FlowSquad nodes.11. Troubleshooting Integrations
| Symptom | Cause | Resolution |
|---|---|---|
| Confluence URL not saving / shows blank in Analyze tab | Settings were not saved before testing | Re-enter the Confluence URL and click Save before clicking Test Connection |
| Jira API returns 401 Unauthorized | API token is incorrect or has expired | Generate a new Jira API token and update it in Admin Panel -> Settings -> Jira; verify you are using your email address, not a username |
| GitHub "Repository not found" for a private repo | Personal access token does not have repo scope |
Edit the token at github.com/settings/tokens → enable repo scope → update in FlowSquad |
| SAML "Invalid SAML Response" | SP certificate not uploaded to the IdP, or ACS URL mismatch | Upload the SP certificate to your IdP; verify the ACS URL matches exactly including port |
| LDAP "Invalid Credentials" | Bind DN format is incorrect or the service account password has expired | Verify the Bind DN is in full DN format: CN=svc-account,DC=company,DC=com; reset the service account password if expired |
| OAuth2 "redirect_uri_mismatch" | The callback URL registered in the OAuth app does not match FlowSquad's | Update the OAuth app's redirect URI to exactly match: https://yourflowsquad.com/oauth2/<provider>/callback |
| Bitbucket Cloud "401 Unauthorized" | Account password used instead of App Password | Go to bitbucket.org → Personal Settings → App passwords, create a new App Password with Repositories: Read, and use that as the password in FlowSquad |
| Gitea repository not found | Token lacks repository read permission or wrong project key format | Verify the token at Gitea → Settings → Applications and confirm the project key is in owner/repo format |
| Azure DevOps "TF401019: Repository not found" | PAT scope is too narrow or the repository name is incorrect | Re-generate the PAT with Code → Read scope; use format project/repo for the project key |