openase

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 4, 2026 License: MIT

README ΒΆ

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.

Quick Start User Guide Architecture CLI

Go SvelteKit Tailwind PostgreSQL Embedded SSE


✨ Key Features

πŸ“‹ Ticket-Driven Orchestration

Core

Kanban Board & List Views

Parent/Child & Dependency Tracking

Custom Statuses & Priorities

Repository Scope Binding

πŸ€– Multi-Agent Support

Agents

Claude Code / Codex / Gemini CLI

Real-time Streaming Output (SSE)

Agent Lifecycle Management

Concurrent Execution Control

⚑ Workflow Engine

Automation

Markdown Harness Documents

Skill Binding & Lifecycle Hooks

Scheduled Cron Jobs

Built-in Role Templates

πŸ–₯️ Machine Management

Infra

SSH / Local / Cloud VMs

Health Monitoring & Probes

CPU / Memory / Disk Metrics

Connectivity Diagnostics

πŸ” Auth & Security

Security

OIDC Browser Login (Auth0, Entra ID)

Agent Platform Token Auth

Org & Project RBAC

GitHub Credential Management

πŸ“‘ Observability

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:

  1. Database β€” start a Docker PostgreSQL automatically, or enter an existing DSN
  2. CLI detection β€” checks for git, claude, codex, gemini on PATH
  3. Auth mode β€” disabled (local dev) or oidc (browser login)
  4. Service mode β€” config-only, or install a systemd --user service
  5. 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:

  1. Configure ticket statuses and connect a repository
  2. Register a machine and an AI agent
  3. Create your first workflow and ticket
  4. 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

  1. --config <path> flag
  2. ./config.yaml (or .yml, .json, .toml)
  3. ~/.openase/config.yaml
  4. 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

Output Formatting

--jq '<expr>'              # JQ filter
--json field1,field2       # Select fields
--template '{{...}}'       # Go template

Both --kebab-case and --snake_case flag spellings are accepted.


πŸ”Œ Agent Platform

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

Document Description
User Guide Complete guide to every UI module
Getting Started 5-step quick start for new users
Module Architecture How modules work together
FAQ Common questions & troubleshooting
Source Build & Run Detailed build & deployment guide
OIDC & RBAC Authentication & authorization setup
Observability Monitoring checklist
WebSocket Rollout WebSocket transport guide
Gemini CLI Adaptation Gemini CLI integration
Stream Protocol Claude Code streaming protocol

πŸ“„ License

See LICENSE.


OpenASE
Create the ticket. The agent does the rest.

Directories ΒΆ

Path Synopsis
cmd
openase command
ent
internal
app
cli
tools
atlasdiff command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL