Skip to content

About

Open source agentic programming environment for building, running, and inspecting AI workflows.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

OpenProgram

OpenProgram

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

arXiv Version License Python Platforms Build status

English · 简体中文 · Documentation · API · Paper

OpenProgram is an AI assistant and a Python framework in one. In the framework, Python owns the control flow, validation and recovery, and the model is called only where judgment or writing is needed. Every call lands in an execution graph you can inspect, branch and reuse. The assistant runs on the same runtime: a desktop and web workspace where chats, files, a terminal and a built-in browser sit side by side, and the agent can work in all of them.

  • It programs itself. Agents write and revise their own methods as Python files, and a watcher loads each change for the next turn.
  • Agents as programs. An agent is a Python class. Branches, loops and checks are ordinary code; self(...) is a model call.
  • A graph, not a transcript. User turns, model calls and function calls are nodes. Context is a selection of nodes, so sub-agents get their own branch and hand back only their result.
  • Checked decisions. The model proposes, code validates, and a bad pick goes back for another try instead of running.
  • One workspace. Chat, files, terminal and a browser the agent can drive, in split panes, on macOS, Windows, Linux or a server.
  • Any model. Anthropic, OpenAI, Gemini, local inference servers and more, with several accounts per provider.

Install

macOS and Linux:

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

Windows x86_64 or arm64 CLI and server, when the selected release includes its runtime assets:

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

The macOS desktop App ships as a signed, notarized DMG. Windows desktop installers are available when a signed win-x64.exe or win-arm64.exe is attached to the release. See installation for platform requirements, source installation and troubleshooting.

Quick start

Start the setup wizard and the terminal chat:

openprogram

Open the browser interface at http://localhost:18100:

openprogram web

Check the configured provider with one reply:

openprogram --print "Introduce yourself in one sentence"

Run openprogram setup to change provider settings. Continue with getting started, model configuration or the documentation overview.

How it works

Agent classes

Agent classes: Python runs the program and the model makes the calls

An agent is a Python class with ordinary methods. The docstring describes the call, the arguments carry the data, and self(...) asks the model. Branching, retries and checks stay in Python, so the parts that must happen always happen.

from openprogram import Agent

class SupportAgent(Agent):
    def triage(self, ticket: str) -> str:
        """Classify the ticket, then draft a reply."""
        kind = self(ticket, choices=["bug", "question"])
        if kind == "bug":
            logs = search_logs(ticket)  # your own helper
            return self(f"Reply using:\n{logs}")
        return self("Draft a short reply.")

reply = SupportAgent().triage("The export button crashes the app.")

See writing agents and the Agent reference.

DAG context

Execution DAG: every call is a node and context is a selection of nodes

User turns, model calls and function calls are recorded as nodes in one graph. Each call reads a selection of earlier nodes rather than a growing private transcript. A sub-agent runs on its own branch, optionally in its own Git worktree, and only its result joins the main line. Branches also let you retry from any point or keep alternative histories. See context and collaboration.

Self-evolving agents

Self-evolving agents: an agent adds a method to its own class

An agent can write and revise the methods of its own Agent class with ordinary file tools. A watcher checks the files every two seconds and reloads eligible changes, so a new method is available as a tool from the next turn. See workflows.

Checked decisions

decision.make(prompt, options) offers the model a fixed menu. Code checks the pick before anything runs, and an unknown option or bad argument goes back to the model to choose again. See choosing the next step.

Events

One process-wide bus carries typed events from the agent loop, context, files, channels and memory. Subscribers observe the event types they ask for, and a plugin can subscribe to tool.before as a gate that allows or denies a tool call.

from openprogram.events import get_event_bus

unsubscribe = get_event_bus().subscribe(
    lambda event: print(event.type, event.payload),
    types={"context.compacted", "file.changed"},
)
# Call unsubscribe() when the subscriber is no longer needed.

See events, plugins and feature status.

What you can do with it

Desktop App and built-in browser Split chats, files, terminals and web pages into panes. The agent reads and operates pages in the built-in browser while you watch.
Computer use Let the agent operate desktop apps, built-in browser pages or a remote VM, step by step or as a task handed to a new agent.
Permissions Approve, deny or deny with a note before a tool runs; the model reads your note and adjusts.
Memory Stored evidence, retrieval and background writing across conversations.
Goals Keep a long-running objective alive across ordinary conversations.
Agents Save a model, instructions, capabilities and memory access as a reusable Agent.
Channels Talk to your agents from Telegram, Discord, Slack and WeChat.
Models Anthropic, OpenAI, Gemini, local servers and multiple accounts per provider.
Skills, MCP and plugins Extend what the agent knows and which tools it can call.
Interfaces Desktop App, web UI, terminal UI, CLI and ACP.

Related projects

Project Purpose
GUI Agent Harness Desktop automation through screenshots and actions.
Research Agent Harness Literature review, experiments and paper preparation.
Scriptorium Source-cited Markdown memory through MCP.

Install programs with openprogram programs install <owner>/<repo>. See program installation.

News

  • 2026-10-11: deny with a note: a declined approval carries your reason to the model.
  • 2026-10-11: split view tiles like macOS windows, with a Mission Control style overview.
  • 2026-10-01: local inference servers, with optional authentication.
  • 2026-09-30: configurable Agents with scoped memory.
  • 2026-08-17: built-in browser with panes, bookmarks, history and agent interaction.
  • 2026-07-21: sub-agents, cross-session messaging and Git worktree isolation.
  • 2026-06-22: paper accepted at the KDD 2026 Workshop on Agentic Software Engineering.
  • 2026-06-07: installable programs and multiple provider accounts with key rotation.
  • 2026-04-03: initial release with agentic functions and an execution DAG.

Citation

LLM-as-Code: Agentic Programming for Agent Harness. KDD 2026 Workshop on Agentic Software Engineering (AgenticSE). arXiv:2606.15874.

@inproceedings{qi2026llmascode,
  title     = {LLM-as-Code: Agentic Programming for Agent Harness},
  author    = {Qi, Junjia and Fu, Zichuan and Gao, Jingtong and Zhang, Wenlin and Yan, Hanyu and Wu, Xian and Zhao, Xiangyu},
  booktitle = {KDD 2026 Workshop on Agentic Software Engineering (AgenticSE)},
  year      = {2026},
  eprint    = {2606.15874},
  archivePrefix = {arXiv},
  url       = {https://arxiv.org/abs/2606.15874},
}

License

AGPL-3.0 © 2026 Fzkuji. See the license for use, modification, distribution and network-service obligations.

Acknowledgements

Thanks to contributors who provide code, reports, reproductions, tests, documentation and reviews.

Maintainer Qi202 GithungDang basil-k-aji-dev binyangzhu000-sudo

Issues · Pull requests

About

Open source agentic programming environment for building, running, and inspecting AI workflows.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages