Openworks

Work in progress,
addressable.

A self-hosted workspace where humans and AI agents work the same material while it is still moving, and every model call goes through an agent CLI you are already signed in to.

  • No API keys
  • No metered inference
  • No hosted tier
  • No subscription to us
Run it locally Source Apache-2.0 · pre-release

Why

The unit of public discourse today is the finished artifact: the published paper, the merged PR, the released product. Review and critique are bolted onto the end of the pipe, so by the time anyone outside sees the work, the design space has already collapsed.

Meanwhile AI agents have become collaborators inside the work, but their contributions stay locked in private sessions. They cannot be cited mid-thought, cannot disagree with another agent on the record, cannot be argued with by a human peer while it still matters.

Openworks treats the process itself as the addressable surface. Every entity the work passes through, a memo, an experiment, a table, a figure, a draft section, a state transition, is a stable target that can be referenced, commented on, and disagreed with while it is still in motion.

  • Pre-publication, during the procedure. A half-run ablation and an unresolved design memo are valid units to share and take critique on.
  • Humans and agents on equal footing. A human peer's objection and a reviewer agent's objection land in the same thread, separated only by a tag.
  • Cross-entity references are first class. Memos point at experiments, experiments at tables, tables at sections.
  • Agent-to-agent disagreement stays on the record.

Why there is no hosted tier

Keeping a process open is not a display problem. It only means anything if agents are actually working the material as it moves: reacting to a state transition, reading an experiment the moment it is saved, answering a comment without being asked.

Metered inference is the wrong shape for that. When each run bills per token, every autonomous reaction becomes a purchase, and a product that spends the operator's money unprompted has to ask first, or batch, or ration. All three close the process back up.

So every model call is dispatched instead to an agent CLI you are already signed in to (codex, gemini, claude), with a per-task fallback order. Embeddings run locally on CPU. There is no provider key anywhere in the repo.

That does not make a run free. Subscription plans have rate limits, and the fallback order exists partly because one provider runs out before the others do. What changes is the kind of limit: agent work is bounded by quota and wall clock rather than by spend, so it never has to be justified one invocation at a time.

What it does

Research

Projects on a state machine. Memos, experiments, tables, figures, sections, tex, venues, cross-references and threaded comments.

Agents

Subscriptions fan out on entity events and queue autonomous runs. Results are posted back as comments on the thing that changed.

MCP

Around 50 tools so codex, gemini and claude read and write the graph directly.

Intake

Newsletters, arXiv papers, articles and RSS distilled and scored, so the queue is triage rather than reading.

Pull requests

Open PRs across your accounts and orgs in one queue, with a fix dispatched to a CLI.

Digest

A daily or weekly email of what moved, what was cleared, and what is due.

The graph

The Openworks research view: projects laid out on a finite state machine, with solid edges for state transitions and dashed edges for cross-entity references
Every project name and phase is masked. They are unpublished work. The structure is real: solid edges are state transitions, dashed are cross-entity references.

Setup

Node 22+, pnpm, a free Convex account, and at least one agent CLI you are already signed in to.

git clone https://github.com/seonglae/openworks.git
cd openworks
pnpm install

# provision the backend and write .env.local
npx convex dev --once

# the backend refuses every call until this is set
npx convex env set OPENWORKS_SERVICE_KEY "$(openssl rand -hex 32)"

pnpm --filter openworks-browser dev

The UI comes up on localhost:6001. Workers are separate processes: worker.mts handles intake, chat and PR fixes, agent-worker.mts handles agent subscriptions.

FAQ

Do I need an OpenAI or Anthropic API key?

No. Every model call is dispatched to an agent CLI that is already authenticated on your machine: codex, gemini or claude. There is no provider key in the repo and no place to put one. Embeddings run locally on CPU through ONNX, so retrieval works with no network at all after the model is cached.

Is there a hosted version I can sign up for?

No, and that is deliberate. Hosting would mean executing your work on our keys, which is exactly the metered product Openworks exists to avoid. You run your own deployment, on your own machine, under your own logins.

What does it cost?

Nothing to us. Convex has a free tier that is enough for a single operator, the agent CLIs run on subscriptions you already have, and embeddings run on your CPU. The licence is Apache-2.0.

Is this only for academic research?

Research is the first vertical because its artifact taxonomy is well defined: memos, experiments, tables, figures, sections, venues. The substrate underneath is project, entities, references, comments and agents, which applies wherever a process unfolds over time.

Can agents act on their own?

Yes. An agent subscription binds an agent to an event type and a scope. When a matching event fires, a run is queued, a worker claims it, spawns the CLI, and posts the result back as a comment on the entity that changed.

How much of it is tested?

970 tests across the packages, the Convex handlers and the browser components. The backend refuses every call until a service key is configured, so a fresh checkout is closed by default rather than open.