OpenASE
Issue-Driven Automated Software Engineering
OpenASE is an all-in-one platform that turns tickets into working code β AI agents automatically pick up issues, execute workflows on your machines, and deliver results with full traceability.
β¨ Key Features
π Ticket-Driven Orchestration
Kanban Board & List Views
Parent/Child & Dependency Tracking
Custom Statuses & Priorities
Repository Scope Binding
|
π€ Multi-Agent Support
Claude Code / Codex / Gemini CLI
Real-time Streaming Output (SSE)
Agent Lifecycle Management
Concurrent Execution Control
|
β‘ Workflow Engine
Markdown Harness Documents
Skill Binding & Lifecycle Hooks
Scheduled Cron Jobs
Built-in Role Templates
|
π₯οΈ Machine Management
SSH / Local / Cloud VMs
Health Monitoring & Probes
CPU / Memory / Disk Metrics
Connectivity Diagnostics
|
π Auth & Security
OIDC Browser Login (Auth0, Entra ID)
Agent Platform Token Auth
Org & Project RBAC
GitHub Credential Management
|
π‘ Observability
Live Activity Event Stream
Agent Run Step Tracking
GitHub Webhook Ingestion
Project Update Threads
|
π€ What is OpenASE?
OpenASE is a single Go binary that ships an API server, workflow orchestrator, and embedded web UI together. It follows an issue-driven model: every piece of work is a ticket, every ticket has a workflow, and AI agents automatically pick up and execute tickets based on status triggers.
You create a ticket β Orchestrator detects pickup status
β Agent claims the ticket β Executes workflow on a Machine
β Activity stream records every step β Ticket completes
No Node.js at runtime β the SvelteKit frontend is compiled and embedded into the Go binary via go:embed.
π From Zero to Running
This section walks through everything you need on a fresh machine β from installing system dependencies to opening the web UI.
Step 0: System Prerequisites
Install Go 1.26+
# Download (adjust version and OS/arch as needed)
wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz
# Extract to /usr/local (requires sudo)
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.26.1.linux-amd64.tar.gz
# Add to PATH β append to ~/.bashrc or ~/.zshrc
export PATH=$PATH:/usr/local/go/bin
# Verify
go version # go1.26.1 linux/amd64
Alternative: if using a project-local toolchain:
export PATH=$PWD/.tooling/go/bin:$HOME/.local/go1.26.1/bin:$PATH
Install Node.js 18+ & pnpm (build-time only)
Node.js is only needed to build the frontend. It is not required at runtime.
# Option A: via nvm (recommended)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
# Option B: via package manager (Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
# Enable corepack for pnpm
corepack enable
# Verify
node --version # v22.x.x
pnpm --version # 10.x.x (via corepack)
Install PostgreSQL
You have two choices β let OpenASE setup start a Docker-backed PostgreSQL automatically, or install one yourself.
Option A: Docker (recommended for local dev)
# Install Docker if not present
sudo apt-get update && sudo apt-get install -y docker.io
sudo usermod -aG docker $USER
newgrp docker # or re-login
# OpenASE setup will create the container for you automatically
Option B: System PostgreSQL
# Ubuntu/Debian
sudo apt-get install -y postgresql postgresql-client
# Create database and user
sudo -u postgres psql -c "CREATE USER openase WITH PASSWORD 'openase';"
sudo -u postgres psql -c "CREATE DATABASE openase OWNER openase;"
# Verify
psql postgres://openase:openase@localhost:5432/openase?sslmode=disable -c "SELECT 1;"
Install Git & other tools
# Ubuntu/Debian
sudo apt-get install -y git make curl wget
# Verify
git --version
make --version
(Optional) Install AI Agent CLIs
OpenASE setup will auto-detect these if present on PATH:
| Agent |
Install |
| Claude Code |
npm install -g @anthropic-ai/claude-code |
| Codex |
npm install -g @openai/codex |
| Gemini CLI |
npm install -g @anthropic-ai/gemini-cli |
These can also be installed later β setup will seed detected providers.
Step 1: Clone & Build
git clone https://github.com/PacificStudio/openase.git
cd openase
# Build frontend + Go binary in one command
make build-web
This runs the following under the hood:
corepack pnpm --dir web install --frozen-lockfile
corepack pnpm --dir web run api:generate
corepack pnpm --dir web run build
go build -o ./bin/openase ./cmd/openase
Verify the build:
./bin/openase version
Step 2: Run First-Time Setup
./bin/openase setup
The interactive terminal setup will walk you through:
- Database β start a Docker PostgreSQL automatically, or enter an existing DSN
- CLI detection β checks for
git, claude, codex, gemini on PATH
- Auth mode β
disabled (local dev) or oidc (browser login)
- Service mode β config-only, or install a
systemd --user service
- Seed data β creates org, project, ticket statuses, and detected providers
Setup creates the following under ~/.openase/:
~/.openase/
βββ config.yaml # Runtime configuration
βββ .env # Platform auth token
βββ logs/ # Service logs
βββ workspaces/ # Agent workspaces
Docker PostgreSQL note: When choosing Docker, setup uses predictable defaults β container openase-local-postgres, port 127.0.0.1:15432, database openase. It generates the password automatically.
Step 3: Launch
# All-in-one: API server + orchestrator in a single process
./bin/openase all-in-one --config ~/.openase/config.yaml
The control plane is now available at:
http://127.0.0.1:19836
Tip: Run ./bin/openase doctor --config ~/.openase/config.yaml to diagnose any issues.
Step 4: Verify
# Health checks
curl -fsS http://127.0.0.1:19836/healthz
curl -fsS http://127.0.0.1:19836/api/v1/healthz
# Or use the built-in doctor
./bin/openase doctor --config ~/.openase/config.yaml
Open http://127.0.0.1:19836 in your browser β you should see the OpenASE control plane.
What's Next?
Now that the platform is running, follow the User Guide β Quick Start to:
- Configure ticket statuses and connect a repository
- Register a machine and an AI agent
- Create your first workflow and ticket
- Watch the agent execute automatically
π§ Alternative Run Modes
Managed User Service
Setup can install a systemd --user service automatically. You can also manage it manually:
./bin/openase up --config ~/.openase/config.yaml # Install & start
./bin/openase logs --lines 100 # Tail logs
./bin/openase restart # Restart
./bin/openase down # Stop & uninstall
Split-Process Mode
Run API server and orchestrator as separate processes:
./bin/openase serve --config ~/.openase/config.yaml
./bin/openase orchestrate --config ~/.openase/config.yaml
Environment-Only Mode
If you prefer env vars over config files:
export OPENASE_DATABASE_DSN=postgres://openase:openase@localhost:5432/openase?sslmode=disable
export OPENASE_SERVER_PORT=19836
export OPENASE_ORCHESTRATOR_TICK_INTERVAL=2s
./bin/openase all-in-one
Or source from ~/.openase/.env:
set -a && source ~/.openase/.env && set +a
./bin/openase all-in-one
βοΈ Configuration
Environment Variables
| Variable |
Default |
Description |
OPENASE_SERVER_PORT |
19836 |
HTTP server port |
OPENASE_DATABASE_DSN |
β |
PostgreSQL connection string (required) |
OPENASE_ORCHESTRATOR_TICK_INTERVAL |
5s |
Orchestrator polling interval |
OPENASE_LOG_FORMAT |
text |
Log format (text or json) |
OPENASE_LOG_LEVEL |
info |
Log level |
Config File Lookup Order
--config <path> flag
./config.yaml (or .yml, .json, .toml)
~/.openase/config.yaml
OPENASE_* environment variables + built-in defaults
Authentication
| Mode |
Description |
Use Case |
disabled |
No auth required |
Local development |
oidc |
Browser login via OIDC provider |
Production, team use |
OIDC supports standard providers: Auth0, Azure Entra ID, and any OpenID Connect compliant IdP. See OIDC & RBAC Guide for setup.
ποΈ Architecture
Product Shape
| Principle |
Description |
| All-Go Monolith |
API server, orchestrator, setup flow, and embedded UI in one binary |
| Binary-first |
Web UI embedded via go:embed β no Node.js at runtime |
| Issue-driven |
Tickets, workflows, statuses, and activity are the core operating model |
| Multi-agent |
Adapter-based support for Claude Code, Codex, and Gemini CLI |
| Git-backed |
Workflow harnesses and skills are repo-aware at runtime |
Repository Layout
openase/
βββ cmd/openase/ # CLI entrypoint
βββ internal/
β βββ app/ # App wiring (serve / orchestrate / all-in-one)
β βββ httpapi/ # HTTP API, SSE, webhooks, embedded UI
β βββ orchestrator/ # Scheduling, health checks, retries
β βββ workflow/ # Workflow service, harness, hooks, skills
β βββ agentplatform/ # Agent token auth
β βββ setup/ # First-run setup
β βββ builtin/ # Built-in role & skill templates
β βββ webui/static/ # Embedded frontend output
βββ web/ # SvelteKit control plane source
βββ docs/
β βββ guide/ # User guide (per-module docs)
βββ config.example.yaml
βββ Makefile
βββ go.mod
System Flow
flowchart LR
U[User / Scheduled Job] --> T[Ticket]
T --> O[Orchestrator]
O -->|status trigger| A[Agent]
A --> W[Workflow + Harness]
W --> S[Skills]
A -->|executes on| M[Machine]
M --> R[Results]
R --> E[Activity Stream]
E --> UI[Web Control Plane]
π₯οΈ Control Plane
The embedded web UI provides a complete project management experience:
| Module |
Capabilities |
| Tickets |
Kanban board, list view, filtering, comments, dependencies, repository scoping |
| Agents |
Registration, real-time run monitoring, pause/resume/retire lifecycle |
| Machines |
SSH/local/cloud registration, health probes, resource metrics |
| Workflows |
Harness editing, status binding, skill binding, version history, impact analysis |
| Skills |
Built-in & custom skill management, workflow binding |
| Scheduled Jobs |
Cron-based ticket creation, manual trigger, enable/disable |
| Activity |
Real-time event stream, type filtering, keyword search |
| Updates |
Team progress threads, comments, revision history |
| Settings |
Statuses, repositories, notifications, security, archived tickets |
π» CLI Reference
OpenASE follows a GitHub-style dual-layer CLI contract:
Resource Commands
openase ticket list --status-name Todo --json tickets
openase ticket create --title "Fix login bug" --description "..."
openase ticket update --status_name "In Review"
openase ticket comment create --body "Blocking dependency found"
openase ticket detail $PROJECT_ID $TICKET_ID
openase workflow create $PROJECT_ID --name "Codex Worker"
openase scheduled-job trigger $JOB_ID
openase project update --description "Latest context"
Raw API Escape Hatch
openase api GET /api/v1/projects/$PID/tickets --query status_name=Todo
openase api PATCH /api/v1/tickets/$TID --field status_id=$SID
Live Streams
openase watch tickets $PROJECT_ID
--jq '<expr>' # JQ filter
--json field1,field2 # Select fields
--template '{{...}}' # Go template
Both --kebab-case and --snake_case flag spellings are accepted.
Agent workers inherit environment variables from the workspace wrapper:
| Variable |
Purpose |
OPENASE_API_URL |
Platform API endpoint |
OPENASE_AGENT_TOKEN |
Agent authentication token |
OPENASE_PROJECT_ID |
Current project context |
OPENASE_TICKET_ID |
Current ticket context |
π οΈ Development
Build Commands
make hooks-install # Set up git hooks (lefthook)
make check # Run formatting + backend coverage checks
make build-web # Build frontend + Go binary
make build # Build Go binary only (uses existing frontend)
make run # Run API server in dev mode
make doctor # Run local environment diagnostics
Frontend Quality Gates
make web-format-check # Prettier formatting
make web-lint # ESLint checks
make web-check # Svelte type checking
make web-validate # All of the above
OpenAPI Contract
make openapi-generate # Regenerate api/openapi.json + TS types
make openapi-check # Verify committed artifacts are up-to-date
Testing
make test # Go test suite
make test-backend-coverage # Full backend tests + coverage gate
make lint # Lint changes since origin/main
make lint-all # Full lint suite
π Documentation
π License
See LICENSE.
OpenASE
Create the ticket. The agent does the rest.