Skip to content
/

AndAI

andai · andrejsstepanovs/andai · ★ 5 · last commit 2025-07-08

Self-hosted AI development loop using Redmine + Aider + YAML-configurable workflows with multi-model routing and human review gates.

Best whenThe developer must maintain engineering accountability over AI-generated code; approval gates and review cycles are non-negotiable.
Skip ifFully autonomous merging without human review, Working without structured tickets and defined workflows
vs seeds
taskmaster-ai(structured task workflow with AI execution) but requires a full local Docker stack (Redmine + MariaDB), uses Aider as t…
Primitive shape 5 total
Commands 5
00

Summary

AndAI — Summary

AndAI is a Go-based local tool that combines Redmine (ticket system) + Aider (AI coding agent) + configurable YAML-driven workflows into an end-to-end AI-assisted development system. The operator defines issue types (Epic, Story, Task, Bug), states, transitions, and workflow steps in a YAML config; AndAI then loops through tickets: pulling next unfinished work, building LLM context from ticket + comments + wiki + children/siblings, running AI coding commands via Aider, posting results back to Redmine as comments, and creating git branches per issue. The human reviews Aider's code changes in a browser UI and approves/rejects/edits each piece of work. Multi-model support is native: different LLM providers (Anthropic, OpenAI, Ollama, etc.) can be assigned to different workflow commands.

Compared to seeds: most similar to taskmaster-ai (workflow-driven task execution with AI) but dramatically more complex — full local stack (Docker Redmine + MariaDB + Aider), YAML-configurable workflows, multi-model routing per step, and a full web UI for review. Closer to a self-hosted Devin than a lightweight PM tool.

01

Overview

AndAI — Overview

Origin

Created by Andrejsstepanovs. 5 GitHub stars, Apache-2.0 licensed, Go, last commit 2025-07-08.

Philosophy

"A no-nonsense tool for organizing AI-assisted coding tasks for real-world developers."

"AndAI is a disposable, configurable tool that combines local ticketing with git branching to manage AI-assisted development tasks."

"By using this project you will be programmatically calling LLMs resulting in costs that you will be responsible for."

Key Principles

  • Engineering accountability: "Your name will be under final code, so you will need to QA and groom it. AI just helps you with the heavy lifting."
  • Structured git integration: every ticket and subtask gets its own git branch
  • Controlled merging: changes merged only after explicit human approval
  • Local-first: everything runs on your system — no cloud dependencies
  • Disposable: set up in seconds, tear down just as quickly
  • Offline capable: works with local or external LLMs

Architecture Metaphor

AndAI is closest in spirit to a "self-hosted Devin" — it loops through a ticket queue, gives Aider a ticket context + LLM, gets back code changes, posts them to Redmine, and waits for human approval. The workflow topology is configurable: different teams can define their own issue types, state machines, and LLM command assignments.

02

Architecture

AndAI — Architecture

Distribution

Go binary + Docker Compose (Redmine + MariaDB):

# Download config templates
wget .andai.aider.yaml .andai.project.yaml docker-compose.yaml .redmine.env

# Start ticket system
docker-compose up -d

# Configure
andai setup all
andai validate config
andai ping all

# Work loop
andai work next

Required Runtime

  • Go (for building binary)
  • Docker + Docker Compose (for Redmine + MariaDB)
  • Aider (AI coding agent)
  • LLM API key (Anthropic, OpenAI, Ollama, etc.)

Directory Tree

<project-dir>/
├── .andai.aider.yaml         # Aider configuration
├── .andai.project.yaml       # AndAI project config (issue types, workflows, LLMs)
├── docker-compose.yaml       # Redmine + MariaDB setup
└── .redmine.env              # Redmine environment variables

<code-repo>/
├── main-branch/              # Primary code repo
└── branch-per-ticket/        # feature/bugfix branches per issue

Config Files

  • .andai.project.yaml — main config: projects, issue types, workflows, LLM models
  • .andai.aider.yaml — Aider-specific settings
  • docker-compose.yaml — Redmine + MariaDB Docker setup

LLM Configuration Example

llm_models:
  - name: "normal"
    temperature: 0.2
    model: "claude-3-7-sonnet-latest"
    provider: "anthropic"
    api_key: "****"

Supported providers: anthropic, openai, cohere, groq, mistral, google, openrouter, deepseek, ollama (local), custom HTTP endpoint.

Target AI Tools

Aider (primary AI coding agent), any LLM provider.

Source Layout

internal/
├── ai/         # LLM integration
├── cmd/        # CLI commands
├── employee/   # Aider worker integration
├── exec/       # Command execution
├── redmine/    # Redmine API client
└── settings/   # Config management
03

Components

AndAI — Components

CLI Binary: andai

Command Purpose
andai validate config Validate .andai.project.yaml
andai setup all Configure Redmine (issue types, workflows, users)
andai ping all Check all services are up
andai work next Process next unfinished ticket in queue
andai work loop Continuous work loop

Workflow Step Commands (defined in YAML config)

Command Purpose
next Move issue to next state
merge-into-parent Merge current branch into parent branch
project-cmd Execute predefined project command (lint, test, etc.)
create-issues Create child issues via LLM
context-files Include relevant files in LLM context
ai Execute LLM task (code generation, analysis)
aider Run Aider with current context

Context Sources (for LLM context building)

Source Content
ticket Issue subject, ID, type, description
comments All Redmine issue comments
last-comment Most recent comment only
children All child issues (non-closed)
siblings All sibling issues (non-closed)
parent Parent issue details
parents All ancestor issues
wiki Project wiki content
affected-files Files touched by closed children's git commits
issue_types All issue type names and descriptions

Configurable Workflow Example

workflow:
  issue_types:
    Story:
      description: "A specific functionality or component."
      jobs:
        In Progress:
          steps:
            - command: create-issues
              action: Task
              prompt: "Break this story into implementation tasks"
              context: [ticket, wiki]
            - command: ai
              action: analyze
              context: [ticket, children]
              remember: true
            - command: aider
              context: [ticket, comments]

Redmine Integration

Full Redmine REST API integration: issues, comments, branches, wiki, user management. Redmine serves as the visual review UI and audit log.

05

Prompts

AndAI — Prompt Files

AndAI does not ship fixed prompt templates. Prompts are assembled dynamically from context sources at runtime.

Verbatim Excerpt 1: Context assembly documentation (CONTEXT.md)

Prompting technique: Declarative context graph — operator specifies which data sources to include; AndAI assembles the full prompt at runtime.

## workflow.issue_types[].jobs[].steps.context

Context is building knowledge prompt that is given to LLM. Available context values are:
- `ticket` - Includes redmine issue subject, id, type name and description.
- `comments` - Includes all comments from redmine issue.
- `last-comment` - Includes last comment from redmine issue.
- `children` - Includes all children issues with same info as `ticket`.
- `siblings` - Includes all siblings issues with same info as `ticket`.
- `parent` - Includes first single parent issue with same info as `ticket`.
- `wiki` - Includes project wiki. Defined in `projects[]` ends up in redmine project wiki.
- `affected-files` - Includes all files that were touched by closed children git commits.
- `issue_types` - Includes all issue type names with descriptions.

Verbatim Excerpt 2: LLM models documentation

Prompting technique: Multi-model routing via YAML config

llm_models:
  - name: "normal"
    temperature: 0.2
    model: "claude-3-7-sonnet-latest"
    provider: "anthropic"
    api_key: "****"
    # Optional: commands this model handles (evaluate, summarize-task, create-issues, ai)
    commands: [ai, create-issues]
  - name: "fast"
    model: "claude-haiku-3"
    provider: "anthropic"
    commands: [summarize-task]

Verbatim Excerpt 3: Commands documentation

Prompting technique: YAML-driven workflow steps with named context sources and LLM instructions

workflow:
  issue_types:
    Story:
      jobs:
        In Progress:
          steps:
            - command: create-issues
              action: Task
              prompt: "Break this story into implementation tasks"
              context: [ticket, wiki]
              comment: true   # Post stdout to Redmine
            - command: aider
              context: [ticket, comments]
              remember: true  # Output available in next step context
09

Uniqueness

AndAI — Uniqueness & Positioning

Differs from Seeds

AndAI doesn't closely match any seed framework — it occupies a different tier of complexity. The most similar seed is taskmaster-ai (structured task workflow with AI execution) but AndAI is dramatically more heavyweight: it requires a local Docker stack (Redmine + MariaDB), uses Aider as the coding agent (not Claude Code/Codex), and implements a fully configurable YAML state machine for workflow definition. Unlike every seed framework (which are CLI tools or skill packs layered on top of existing AI tools), AndAI is a complete self-contained development environment. The multi-model routing per workflow step (different LLMs for different commands) is not found in any seed. The Redmine integration as both ticket system and review UI is unique.

Distinctive Positioning

  • Only framework in this batch using Redmine as ticket backend (Jira-like but self-hosted)
  • Aider as the AI coding agent (not Claude Code/Codex) — different agent ecosystem
  • YAML-configurable state machine: operator defines issue types, states, transitions, and LLM assignments
  • Multi-model routing per workflow step — unique in this batch
  • remember: true flag for step-to-step context accumulation within a job
  • Most complex local stack in the batch (Docker required)

Observable Failure Modes

  • High setup friction: Docker + Go binary + Redmine + Aider + LLM keys required
  • Very low adoption (5 stars) — likely niche use case
  • Single-tenant design: one Aider job at a time
  • Redmine is the bottleneck: if Docker is down, all work stops
  • No path to GitHub/GitLab/Jira integration — Redmine is the only supported tracker
04

Workflow

AndAI — Workflow

Setup Phase (one-time)

  1. Configure .andai.project.yaml with issue types, states, transitions, LLMs
  2. docker-compose up -d — start Redmine + MariaDB
  3. andai setup all — configure Redmine automatically
  4. Create git repo for code: git init && git commit -am "init"

Work Loop

andai work next

For each ticket:

  1. Pull next unfinished ticket from Redmine queue
  2. Build LLM context from configured context sources (ticket + comments + wiki + children/siblings/files)
  3. Execute workflow steps (create-issues → ai → aider → project-cmd → next)
  4. Post results to Redmine as comments
  5. Create/update git branch for the ticket
  6. Wait for human review in Redmine web UI

Human Review Cycle

Human opens Redmine in browser:

  • Reviews AI-generated code changes
  • Approve: state transitions to next workflow step
  • Reject + comment: agent re-runs with additional context from comment
  • Edit: human edits code directly, then approves

Approval Gates

All transitions are human-triggered via Redmine state changes. No autonomous merging unless configured.

Artifacts

Artifact Location
Tickets Redmine Issues
Progress comments Redmine Issue comments
Code changes Git branches per ticket
Merged code project.final_branch (configurable)
Workflow config .andai.project.yaml
06

Memory Context

AndAI — Memory & Context

State Storage

  • Primary: Redmine (MySQL/MariaDB via Docker) — all tickets, states, comments, wiki
  • Code: Git branches per ticket
  • Config: .andai.project.yaml — workflow definition, LLM assignments

Persistence

  • Scope: Project-scoped local Docker instance
  • Cross-session: Redmine DB persists between andai work next runs
  • State persistence: "stop/restart anytime" is a documented feature

Context Building

At each workflow step, AndAI assembles an LLM prompt from the context: list in the YAML config:

  • Pulls Redmine issue data (ticket, comments, children, siblings, parent, wiki)
  • Includes remembered outputs from previous steps (remember: true)
  • Includes affected files from closed children's git history

remember: true Flag

If a previous step has remember: true, its stdout is automatically included in the context for all subsequent steps in the same job. This enables multi-step context accumulation without re-fetching.

Wiki as Knowledge Base

The Redmine project wiki is available as a context source. Operator writes domain knowledge, conventions, and standards into the wiki; these are injected into LLM prompts automatically.

07

Orchestration

AndAI — Orchestration

Multi-Agent

Limited. AndAI runs one ticket at a time (andai work next). Multiple instances could theoretically run in parallel against the same Redmine instance, but this is not documented.

Orchestration Pattern

Sequential per ticket. Within a ticket, workflow steps execute sequentially as defined in YAML.

The create-issues command does create child issues, enabling a hierarchical decomposition (Epic → Story → Task → Sub-task) that processes top-down.

Isolation Mechanism

Git branches per ticket — each ticket gets its own branch. Manual merges via merge-into-parent step.

Execution Mode

Interactive-loop — andai work next is invoked by human, processes one ticket, returns. Or andai work loop for continuous processing.

Multi-Model

Yes. Different LLM models can be assigned to different workflow commands:

  • ai — main reasoning model (e.g., claude-sonnet)
  • summarize-task — fast summarization model (e.g., claude-haiku)
  • create-issues — planning model
  • evaluate — evaluation model

Supports Anthropic, OpenAI, Cohere, Groq, Mistral, Google, OpenRouter, DeepSeek, Ollama, custom HTTP.

Consensus Mechanism

None. Human approval is the consensus gate.

Prompt Chaining

Yes — remember: true flag carries step outputs into subsequent step contexts within the same job.

08

Ui Cli Surface

AndAI — UI & CLI Surface

CLI Binary

Binary name: andai Language: Go Distribution: Binary download or go build

Subcommands: validate config, setup all, ping all, work next, work loop

Local Web Dashboard

Redmine — full web UI for:

  • Ticket creation and management
  • Workflow state transitions (approve/reject)
  • Comment history (Aider's code changes posted as comments)
  • Code review in browser
  • Wiki editing

Default Redmine port: 3000 (Docker Compose default)

IDE Integration

None explicitly. Aider runs in the background; developer reviews changes in Redmine web UI or IDE.

Observability

  • Redmine issue comments: every Aider output posted as a comment (comment: true flag)
  • Git history: each ticket creates branches with full commit history
  • Docker logs for Redmine/AndAI processes

Related frameworks

same archetype · same primary tool · same memory type

BMAD-METHOD ★ 48k

Provides a full agile delivery lifecycle with named expert-persona AI collaborators that elicit the human's best thinking rather…

Agent OS ★ 4.6k

Extracts implicit codebase conventions into token-efficient markdown standards files and injects them selectively into AI agent…

Claude Conductor ★ 367

Gives Claude Code a persistent, cross-linked, auto-analyzed documentation system so it retains codebase context across sessions.

Spec-Driver (Greenfield Spec-Driven Development) ★ 25

Prevents spec rot in AI-assisted development by making implementation changes flow back into evergreen, authoritative specs via…

Anthropic Knowledge Work Plugins ★ 16k

Role-specialized plugin bundles with live MCP connectors that turn Claude into a domain expert for enterprise knowledge workers.

Codex Integration for Claude Code (skill-codex) ★ 1.3k

Single Claude Code skill that handles Codex CLI invocation correctly (stdin blocking, thinking token suppression, session resume)…