OpenProgram is a free, open source automation project written in Python and released under AGPL-3.0. It has 520 GitHub stars, 63 forks and 1 open issues, and was last pushed 4 hours ago. On this registry it ranks #90 of 96 tracked projects in Automation, with 5 head-to-head comparisons available.

Self-Programming AI Assistant. Capture, automate, and refine all your workflows.

arXiv Release License Python Platforms Build status

Getting Started · Install · Docs · API Reference · Philosophy · 中文


"The more constraints one imposes, the more one frees oneself."Igor Stravinsky, Poetics of Music

We propose Agentic Programming. An LLM is flexible; code is deterministic. Let the model run everything and you get chaos — unpredictable execution, context explosion, no output guarantees; hard-code everything and you lose the intelligence. A harness balances the two, interleaved moment to moment — Python for the flow you want fixed, the LLM for the judgement you can't script. (the full rationale →)

Contents

Install

curl -fsSL https://openprogram.io/install | sh

Windows x86_64 or arm64 CLI/server (requires a release with Windows runtime assets):

irm https://openprogram.io/install.ps1 | iex

If the selected release has no Windows runtime ZIP and checksum, use the Windows source-development installation.

Desktop: macOS releases use the signed and notarized DMG; Windows uses a signed win-x64.exe or win-arm64.exe when that artifact is attached to the GitHub Release. Linux and Windows without that EXE use the complete CLI/server runtime and Web UI.

Platform matrix, PATH, openprogram doctor, and source-checkout install: Installation.

Quick start

The first openprogram run opens a provider setup wizard, then the terminal chat. Re-run the wizard with openprogram setup.

openprogram

Open the Web UI at http://localhost:18100:

openprogram web

Confirm with one printed reply:

openprogram --print "Introduce yourself in one sentence"

Details: Getting Started.

Integrated Projects

Our open-source projects cover desktop automation, research workflows, and agent memory. Visit their repositories for source code, documentation, and contributions.

Project What it does
GUI Agent Harness GUI Automation
Operates desktop apps with screenshots and actions.
Research Agent Harness Research Automation
Automates literature reviews, experiments, and paper drafts.
Scriptorium Agent Memory
Stores and retrieves source-cited Markdown memories via MCP.

Install more: openprogram programs install / (guide).

News

  • 2026-08-17 — Built-in browser: multiple panes, bookmarks, History, and Agent control of visible pages.
  • 2026-07-21 — Multi-agent: spawn sub-agents, message across sessions, file-touching branches in git worktrees.
  • 2026-06-22 — 📄 Paper accepted at the KDD 2026 Workshop on Agentic Software Engineering (arXiv:2606.15874).
  • 2026-06-07 — Installable harnesses and multi-account providers with automatic key rotation.
  • 2026-05-28 — The Web UI design system.
  • 2026-04-04 — Built-in Anthropic / OpenAI / Gemini providers.
  • 2026-04-03 — 🌱 First release: @agentic_function and the execution DAG.

Why OpenProgram?

OpenProgram supports macOS and Linux installations, native Windows x86_64/arm64 CLI/server, multiple providers, and a Web interface (Desktop App or openprogram webhttp://localhost:18100). The Windows Desktop distribution path produces a signed per-user installer and embeds the same complete runtime; Windows sandbox execution remains a separate level. The harness itself provides four mechanisms — one primitive and the three capabilities it enables.

1. Agentic Function — the primitive everything else is built on

An agent is a Python function. You write it like any other function. The docstring is the system prompt: it tells the model what this agent does. Each argument is input for this run. A str argument is the task. In this example the task is the ticket to classify. You do not store the prompt or the JSON as separate variables. They are written as code. choices=[...] asks again until the answer is one of those words.

Here is an example, compared with the common way:

OpenProgramThe common way
@agentic_function
def triage(ticket: str, runtime=None) -> str:
    """Classify the ticket as bug / feature /
    question, then draft a reply."""
    kind = llm(                             # 🤖 LLM decides
        ticket, choices=["bug", "feature", "question"])
    if kind == "bug":                       # 🐍 you decide
        logs = search_logs(ticket)          # 🐍 plain Python
        return llm(                         # 🤖 LLM writes
            f"Reply using:\n{logs}")
    return llm("Draft a short reply.")

🤖 llm() is the model call
🐍 everything else is ordinary Python, and it runs every time

TRIAGE_PROMPT = """You are a triage
agent. Classify the ticket as bug,
feature, or question. Reply as JSON."""

TOOLS = [{"type": "function", "function": {
  "name": "triage",
  "parameters": {"type": "object",
    "properties": {"ticket": {"type": "string"}},
    "required": ["ticket"]}}}]

resp = client.chat(TRIAGE_PROMPT, tools=TOOLS)
kind = json.loads(resp)["kind"]     # hope it parses
if kind not in ("bug", "feature"):
    ...                             # and re-prompt by hand

2. DAG Context — for native multi-agent systems

<source media="(prefers-color-scheme

readme truncated — read the full docs on github

Frequently asked questions

Is OpenProgram free to use?

OpenProgram is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does OpenProgram do?

Self-Programming AI Assistant. Capture, automate, and refine all your workflows.

What is OpenProgram written in?

OpenProgram is primarily written in Python. Its source is publicly available at https://github.com/Fzkuji/OpenProgram, and it has 520 GitHub stars.