Foundry CI
Dashboard Jobs Runs Environments My Dashboards Queue Analytics Capacity Planning Cache Analytics Log Filters
Administration
Secrets Agents API Keys Notifications Plugins Agent Pools Insights Log Search Scheduled Reports Maintenance Step Templates Job Templates Variable Groups Webhooks Webhook Inbox Org Settings Status Page Usage Audit Log
Platform
Users Organizations Platform Stats Signup & Access Database System Info
Build Queue
No builds in the queue.
Build Executor Status
Logout
0
Notifications Mark all read
Notification Settings

Welcome to Foundry CI

Create an admin account to get started.

Foundry CI Beta
Features Cloud
Sign in Get started

CI/CD that you own.

Self-hosted continuous integration and deployment.
Fast builds, full control, zero vendor lock-in.

Get started Try Foundry Cloud

Fast builds

Parallel jobs, caching, and lightweight agents that run anywhere — your hardware, your speed.

Your infrastructure

Runs on your servers. Your code never leaves your network. Full control over data and security.

Pipelines & environments

Multi-stage pipelines, environment promotions, deploy freezes, and approval gates built in.

Teams & orgs

Multi-tenant organizations, role-based access, audit logs, and usage limits per team.

Mobile CI

iOS and Android build support with OTA artifact distribution. Ship mobile apps from your own CI.

Config as code

Define jobs in YAML, store in your repo. Webhooks trigger builds on push. Version everything.

Don't want to manage infrastructure?

Foundry Cloud is a fully managed version of Foundry CI. Same product, we handle the servers.

Starter

$0/month

For personal projects and evaluation.

  • 2 users
  • 1 concurrent build
  • 2 agents
  • 3 jobs
  • 500 MB storage
  • 3 day retention
  • Community support
Request early access
Most popular

Pro

$29/month

For teams shipping production software.

  • 10 users
  • 5 concurrent builds
  • 10 agents
  • 50 jobs
  • 5 GB storage
  • 14 day retention
  • Approval gates
  • Email support
I'm interested

Team

$79/month

For organizations that need control and scale.

  • 25 users
  • 15 concurrent builds
  • 30 agents
  • 200 jobs
  • 20 GB storage
  • 30 day retention
  • Everything in Pro
  • Audit logs
  • Priority support
I'm interested

Foundry Cloud is currently in closed beta. Request access and we'll send you an invite when a spot opens up.

Ready to take control of your CI/CD?

Self-host for free, or let us manage it for you.

Self-host for free Try Foundry Cloud

© 2026 Foundry CI. All rights reserved.

Sign in to Foundry CI

or
Forgot password?
Don't have an account? Sign up
← Back to home

Two-Factor Authentication

Enter the 6-digit code from your authenticator app.

Use a recovery code instead
Back to login

Reset your password

Enter your email and we'll send you a reset link.

Back to sign in

Set new password

Create your account

Set up your workspace on Foundry CI

Lowercase letters, numbers, and hyphens only

Already have an account? Sign in
← Back to home

Change Your Password

You must change your password before continuing.

Welcome to Foundry CI

Let's set up your first CI/CD pipeline in a few quick steps.

  • Create a job linked to your repository
  • Trigger your first build
  • Optionally set up a build agent
Skip setup

Create Your First Job

A job defines what to build and how.

Skip setup

Set Up a Build Agent

You need an agent to run builds. Start one with the command below, or skip to run your build later.

./foundry-agent --server http://YOUR_SERVER:8080 --token YOUR_AGENT_TOKEN

Configure agents later in Settings > Agents.

Run Your First Build

Click below to trigger a build for your new job.

Building...

You're All Set!

Your Foundry CI instance is ready. Head to the dashboard to manage your builds.

📧 Please verify your email address. Check your inbox for the verification link.

Dashboard

Organization Suspended

This organization has been suspended. Builds, jobs, and most operations are disabled. Contact your administrator or upgrade your plan.

Payment Issue

Please update your payment method to avoid service interruption.

Update Billing
⏳
Pro Trial Active — days remaining
Enjoying Pro features? Upgrade before your trial ends.
Total Jobs
-
Running
-
Succeeded (24h)
-
Failed (24h)
-
Queued
-

Favorites

Recent Failures

Agents

Activity Feed

Build Activity (30 days)

Build Duration Trend

Recent Runs

Job Run Status Triggered By Started Duration
Loading...

All Runs

0 selected
Job Run Status Triggered By Started Duration
Loading...

My Dashboards

Queue Analytics

Total Enqueued
-
Avg Wait Time
-
P95 Wait Time
-
Max Wait Time
-

Wait Time Trend

Bottlenecks

Loading...

Capacity Planning

Online Agents
-
Utilization
-
Avg Queue Wait
-
Recommended Agents
-

Build Volume & Concurrency

Projection

Build Trend (WoW)
-
Projected Builds (7d)
-
Projected Builds (30d)
-

Daily Breakdown

DateBuildsPeak ConcurrentAvg ConcurrentAvg Wait

Cache Analytics

Hit Rate
-
Hits
-
Misses
-
Uploads
-
Total Cached
-

By Job

Job Hits Misses Uploads Hit Rate Size
Loading...

Log Filters & Alerts

Saved Filters

Alert Rules

Public Status Page

Enabled

Select jobs to display on the public status page. The page is accessible at

Preview

Enable and add jobs to see a preview.

Environments

Name Last Deployed Last Run Status Actions
Loading...

Deployment History

Jobs

Name Latest Run Status Health Duration Actions
Loading...

Status
N/A
Repository
Branch
Created
Health

Build Duration Trend (30 days)

Stage View

Build Caches

Cache KeyBranchSizeUpdated
No build caches

Triggers

Flaky Tests

TestSuitePassFailFlakinessLast Failure
No flaky tests detected

Duration Forecast

Performance Regression

vs historical average
StepAvgLatestDeltaStatus

Step Metrics

Avg duration across recent runs
StepAvgMinMaxMedianP95Samples

Step Failure Analysis

Failure rates across recent runs
StepRunsFailuresFail RateAvg DurationP95Last Failure

Variable Groups

GroupPriorityActions

Environment Variables

NameValueTypeActions
No environment variables configured

Job Spec


                

Build Badge

Build Status

Webhook

application/json

Recent Deliveries

Event Branch Status Detail Time
No deliveries yet

Runs

Override env vars for this run only. One KEY=value per line.

Run Branch Status Triggered By Started Duration
No runs yet.

Secrets

Add Secret

Name Used By Created
Loading...

Rotation Status

Secret Age Policy Status

Agents

Name Hostname Status Tags Last Seen
Loading agents...

API Keys

Create API Key

New API Key (copy now — it won't be shown again)


                
Name Key Prefix Scopes Expires Last Used Created
Loading...

Users

Pending Invitations

OrganizationRoleFromExpires

Your Email

Change Your Password

Two-Factor Authentication

Add an extra layer of security to your account using a TOTP authenticator app.

Scan this QR code or enter the secret manually in your authenticator app:

Save these recovery codes — you won't see them again!

Active Sessions

Device / Browser IP Address Last Active Created
Loading...

Create User

Username Role Last Active Created
Loading...

Status
Hostname
Last Seen
Tags
Runners
Capabilities

Health Metrics (24h)

CPU %
Memory %
Disk %

Recent Runs

Job Run Status Started Duration
Loading...

System Information

Version
-
Go Version
-
Platform
-
Uptime
-
TLS
-
Encryption
-

Database Stats

Jobs
-
Runs
-
Agents
-
Artifacts
-
Artifact Disk Usage
-

Retention Policy

Max Runs
-
Max Age
-

Notification Settings

General

Slack

Discord

Microsoft Teams

Email (SMTP)

Outbound Webhooks

Add Webhook

Available: run.completed, member.added, member.removed, member.left, webhook.test, or * for all
URL Events Status Last Triggered Actions

No outbound webhooks configured.

Webhooks send HTTP POST requests when events occur in your org.

Delivery Log

Time Event Status Duration Error

No delivery logs yet.

Plugins

Add Plugin

Used in YAML as uses: name
with: params become FOUNDRY_INPUT_* env vars
Name Command Description Status
Loading...

Agent Pools

Create Agent Pool

NameDescriptionMax ConcurrentActions
Loading...

Build Insights

Slowest Steps

JobStepAvgRuns

Most Failing Jobs

JobFailsTotalRate

Build Frequency Heatmap

Log Search

Enter a search term (min 3 characters) to search across all build logs.

Maintenance Windows

Schedule Maintenance Window

TitleStartsEndsStatusActions
Loading...

Scheduled Reports

Create Scheduled Report

NameTypeScheduleChannelLast SentEnabled
Loading...

Notification Preferences

Configure how you receive notifications for this organization.

Step Templates

Add Step Template

Used in YAML as uses: template/name
Template inputs use ${{ inputs.KEY }} syntax
Name Description Spec
Loading...

Job Templates

Add Job Template

Name Description Spec
Loading...

Variable Groups

NameDescriptionVariablesLinked JobsActions
Loading...

Webhook Inbox

Source Event Status Error Received
Loading...

Usage & Billing

Plan
-
Current Period
-
Builds This Month
-
Success Rate
-

Resource Usage

Monthly Usage History

Build Cost Summary

This Month-
Total Runs-
Total Minutes-
MonthRunsMinutesCost

Cost Rates

API Rate Limits

Remaining
-
Limit (RPM)
-

Request History (24h)

API Usage Analytics

Total Requests-
Avg Latency-
Error Rate-

Request Trend

Top Endpoints

MethodPathCountAvg LatencyError %

Top API Keys

KeyRequestsLast Used

Billing

Payment Status-
Current Period-
Subscription-
Payment Issue

Cancellation Scheduled

Build Minute Breakdown

Total Minutes-
Limit-
Usage-
Overage-

Top Jobs by Minutes

JobMinutesRuns

Billing Events

DateEvent

Plan Comparison

FeatureFreeProTeam
Change Plan:

Usage Alerts

DateTypeThresholdMonth

Plan Features

Features available on your current plan. Upgrade for more capabilities.

Email Verification

Loading...

Data Export

Export all organization data (jobs, runs, audit logs, settings) as a ZIP file. Exports are available for 7 days.

Cancel Organization

Cancelling your organization will schedule it for deletion in 30 days. All data will be permanently removed after this period. You can revoke the cancellation at any time before then.

Audit Log

TimeUserActionResourceDetailsIP
Loading...

Organization Settings

Name
-
Slug
-
Plan
-

Members

UsernameRoleJoined
Loading...

Agent Registration Tokens

New token created — copy it now, it won't be shown again:

Use: foundry-agent --org-token <token> ...

NameCreatedExpiresStatus
Loading...

Invitations

Invitation created — share this link/token with the user:
InvitedRoleStatusSentExpires
Loading...

Environment Variables

Organization-level env vars are injected into all jobs. Job-level vars override org-level vars with the same name.

NameValueType
Loading...

IP Allowlist

Restrict API access to specific IP addresses/ranges. Platform admins and agents bypass the allowlist.

CIDRDescriptionAdded

Git Providers (Self-Hosted)

Register self-hosted GitLab or Bitbucket instances for commit status reporting and PR/MR comments.

ProviderBase URL

Danger Zone

Deleting the organization will permanently remove all jobs, runs, logs, artifacts, and members. This cannot be undone.

Organizations

Create Organization

NameSlugPlanStatus
Loading...

Organization

Slug
-
Plan
-
Members
-
Storage
-
Status
-

Resource Limits

Members

UsernameRoleJoined

Platform Statistics

Organizations
-
Users
-
Total Jobs
-
Total Runs
-
Active Runs
-

Database Management

Database Size
-
Tables
-
Last Modified
-

Backup

Download a consistent snapshot of the SQLite database using VACUUM INTO.

Restore

Upload a SQLite database file to restore. The server will need to be restarted to apply the restore.

Warning: This will replace the current database on next server restart. A backup of the current DB will be created automatically.

Signup & Access

Signup Mode

Control how new users can access the platform.

Invite Codes

CodeNoteStatusCreatedUsed
Loading...

Waitlist

EmailNamePlanDate
Loading...

Create Job

When enabled, the build spec is read from the repo on each trigger instead of being defined here.
Config from Repository

The build configuration will be loaded from .foundry-ci.yml in the repository root on each webhook push or manual trigger. The file uses the same YAML format as the editor below.

Leave empty to use the global default.
Standard 5-field cron: minute hour day month weekday. Example: 0 */2 * * * = every 2 hours.
Optional. Jobs with the same group are shown together in the jobs list.
Delete runs older than N days. Leave empty for global default.
Keep at most N runs per job. Leave empty for global default.
Delete artifacts (not runs) older than N days.
Loading...

                                    
                                

Run # for

Status
Triggered By
Branch
Commit
Pull Request
Started
Finished
Environment
Retry

Changelog

Milestone

Retry History

AttemptRunStatusDurationWhen

Pipeline Jobs

Step Timeline

Build Timeline

Build Progress

Error


                    

Build Log

Loading build log...

Artifacts

No artifacts.

Test Results

Step Outputs

No outputs.

Run Comparison: # vs #

Step Comparison

StepRun 1 StatusRun 1 DurationRun 2 StatusRun 2 DurationDelta

Info

Agent Setup Guide

1

Create a Registration Token

Go to Settings > Organization > Agent Registration Tokens and create a new token. Copy it — it’s shown only once.

2

Install & Run

Download the binary for your platform from the latest release artifacts, or build from source:

# From release artifacts
tar -xzf foundry-agent-linux-amd64.tar.gz
chmod +x foundry-agent

# Or build from source
git clone https://github.com/ainoriapps/Foundry-CI.git
cd Foundry-CI
CGO_ENABLED=0 go build -o foundry-agent ./cmd/foundry-agent

Start the agent:

Pull the official image from Docker Hub:

docker pull ainoriapps/foundry-agent:latest

Run the agent container:

Volume mounts explained:

agent-dataPersists agent credentials across restarts
/var/run/docker.sockOptional. Mount if jobs need to build Docker images

Configuration Reference

FlagDefaultDescription
--namerequiredUnique agent name
--server-urlFoundry server URL
--org-tokenrequiredRegistration token from org settings
--tagsos:linux,arch:amd64,runner:nativeComma-separated key:value tags for job routing
--runnersnativeSupported runners: native, docker-local
--hostnameauto-detectedOverride the reported hostname
--configagent_config.jsonPath to config file (stores agent ID/token after first run)

Tags & Job Routing

Tags determine which jobs an agent picks up. Jobs specify required tags in agent-tags — only agents matching all required tags will run the job.

Example: CI agent
--tags os:linux,arch:amd64,env:ci
Example: QA deploy agent
--tags os:linux,env:qa,role:deploy
Example: macOS builder
--tags os:darwin,arch:arm64,xcode:16
Example: GPU runner
--tags os:linux,gpu:nvidia,env:ml

Running as a Service

For production use, run the agent as a systemd service so it starts on boot and restarts on failure:

# /etc/systemd/system/foundry-agent.service
[Unit]
Description=Foundry CI Agent
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=foundry
ExecStart=/usr/local/bin/foundry-agent \
  --name my-agent \
  --server-url \
  --org-token YOUR_TOKEN \
  --tags os:linux,arch:amd64
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

# Then enable & start:
# sudo systemctl enable --now foundry-agent

Use Docker Compose for a persistent, auto-restarting agent:

# docker-compose.yml
services:
  agent:
    image: ainoriapps/foundry-agent:latest
    container_name: foundry-agent
    restart: unless-stopped
    command:
      - ./foundry-agent
      - --name=my-agent
      - --server-url=
      - --org-token=YOUR_TOKEN
      - --tags=os:linux,arch:amd64
    volumes:
      - agent-data:/agent/data
      # Optional: mount Docker socket for image builds
      # - /var/run/docker.sock:/var/run/docker.sock

volumes:
  agent-data:

# Start: docker compose up -d

The agent will register on first run and store its credentials in agent_config.json. On subsequent runs, it reconnects automatically. It appears in this page once online.

Keyboard Shortcuts

?Show this help
Ctrl+KOpen search
g then dGo to Dashboard
g then jGo to Jobs
g then rGo to Runs
g then aGo to Agents
g then sGo to Secrets
g then iGo to System Info
EscClose modal / search