Docs GitHub ↗

An operating system for knowledge work.

Your notes, your mail and messaging, your task queue, and durable AI agents, one system, in a place you control. Nothing slips through the cracks, and your assistant actually remembers you.

MIT Open source Host your graph yourself or let us host it so it syncs across your devices, and export any page as a plain file whenever you like.
★ View on GitHub
01 · one graph

Everything is a page

People, meetings, agent definitions, tasks: all outline pages in one graph, all linkable, all searchable. Record something once and it is connected to everything it touches.

02 · one triage

Everything is triaged

Mail, messages, reminders, and agent results flow through one triage engine you configure: what interrupts, what queues, what files silently. Decide once what "urgent" means.

03 · gated agents

Capable, but gated

Agents read your graph, draft replies, run analyses, and remember what they learn, but anything consequential waits for your approval, and every run is recorded and inspectable.

A knowledge base that acts, and absorbs the tools you use.

You have an outliner, an inbox, a calendar, a to-do app, a CRM you never update, and an AI subscription that forgets you between sessions. Subspace is what happens when those are one system.

  • Your notes, mail, tasks, and calendar sit in five apps that don't know about each other, so the joins only live in your head.
  • Your AI assistant forgets you between sessions and never sees your actual work.
  • Things slip: the follow-up you meant to send, the idea you had six months ago, the decision from a call you can't find.
  • Every tool wants your knowledge on its servers, in its format.
The bullet is the primitive

Everything is a bullet, so everything composes

Every line is a bullet, and the bullet is the unit of everything: a note, a table, a code cell, a running workflow, or a whole embedded app. Fold it to collapse a subtree, zoom in to make it the whole view, or open it as a pane.

One mental model covers your notes, your data, and your apps. Give a bullet a custom viewer and it renders as a live card. Docs ›
Live: click a bullet to zoom, fold with the arrow at its left, ⌥↵ to open a pane
workspace / Project X
⌘Ksynced
Project X · outline
Weekly goals for the Acme rollout
pipeline rollup · custom viewer● live
$385k
weighted
3
open deals
1
at risk
Open questions · 3
Which val slice do we promote first?
Do we need the addendum before the pilot?
Who owns the SOC2 evidence pack?
mail · unreadthe full app, embedded inline
Rachel KimAcme, revised terms9:42
Priya Nairingest pipeline sync notesJul 9
Try it: click a bullet to zoom in · hover the arrow at a bullet's left to fold · click a line, then press ⌥↵ to open it as a pane
bullet
A real knowledge base underneath

Everything you expect from a PKM

Subspace is not an AI layer bolted onto a note-taker. Take the agents away and what remains is a complete personal knowledge base, so arriving from Roam, Logseq, Obsidian, or Notion costs you none of the primitives you actually use.

Live: pick a feature to see it
projects / Q3 planning
⌘Ksynced
Q3 planning
cash:: 812k · runway to March
Revenue plan · the pipeline table below feeds [[acme-account]]
▦ pipeline+ row · + col
A
B
C
account
stage
value
1
Acme
contract
240,000
2
Vertex
pilot
90,000
3
Northwind
lead
55,000
4
weighted total
=SUM(C1:C3)
Committed coverage 47.9% of [[Q3 planning]]:cash, recomputed on every edit.
Changing a table cell updates every dependent formula on other pages on commit. Docs ›
people / Rachel Kim
⌘Ksynced
Rachel Kim
VP Engineering at [[Acme]] · owns the #soc2 review · met at [[Q2 offsite]]
Introduced by [[Priya Nair]], who still runs the #ingest-pipeline work
((Acme SOC2)) — the target page, embedded live:
((Acme SOC2))live view of the source page
Type II audit window closes March 14
Evidence pack owner: [[Rachel Kim]]
Rename the page and the graph follows. One transaction rewrites every [[ref]], ((embed)), and #tag that pointed at it, and the old title survives as an alias. Docs ›
workspace / search
⌘Ksynced
when does the acme audit window close|
pageAcme SOC2Type II audit window closes March 14
nodeQ3 planning…report expected within three weeks of close
fileMSA_v3.pdfp. 7 · "the assessment period shall end…"
mailAcme, revised termsRachel Kim · "Legal wants it in writing"
memoryabout youPrefers dates written out, not relative
↑↓ to move · ↵ to open · ⇧↵ to ask an agent insteadlexical + vector, fused
Two arms, one ranking. Keyword matching and embedding similarity run per query and merge by reciprocal-rank fusion, so a typo'd or roundabout phrasing still lands the page that never used your words. Docs ›
accounts / Acme
⌘⇧Msynced
Acme
acv:: 240,000 — signed, three-year term
renewal:: 2027-03-01
⌕ querylive · re-runs on every write
source { dir: "accounts" }
where stage ≠ "lost" · acv > 50000
group stage   view board
lead
Northwind55,000
pilot
Vertex90,000
contract
Acme240,000
Properties are values, not decoration. A saved query filters by directory, tag, page type, or checkbox state and renders as table, list, board, card, or calendar. Describe what you want and an agent writes the element — the built-in Todos page is one of these. Docs ›
files / MSA_v3.pdf
⌘Ksynced
▤ MSA_v3.pdfask this file · open as page ↗
page 7 / 24
Assessment period ends March 14 — matches [[Acme SOC2]] #soc2
§7.2 caps liability at 12 months of fees. Flag for [[Priya Nair]].
Your annotations are ordinary bullets, so they link and backlink like everything else.
The document's text is indexed, not just its name. PDFs, Word, PowerPoint, Excel, and plain text are extracted on upload and surface in ⌘K as file hits that open at the passage. Docs ›
Your comms, inside the graph

Special pages that are full apps

Mail and IM are pages in the graph that render as complete apps: a thread files itself against the CRM, an agent drafts replies grounded in your own notes, and every send passes the same gates.

An agent cannot send on your behalf without your click. Let a draft agent handle your most repetitive reply; it appears on the thread as a proposal you approve or dismiss. Docs ›
Live: approve or dismiss the drafted reply
mail / Acme, revised terms
rsynced

Acme, revised terms

[[Rachel Kim]]rachel.kim@acme.test · thread of 3 · filed to CRM
Rachel Kim9:42
Can you confirm the SOC2 timeline before we counter-sign? Legal wants the audit window in writing.
mail-draft-reply · proposed reply grounded · 2 sources
Hi Rachel, our SOC2 Type II audit window closes March 14, report expected within three weeks. Happy to put the window in the MSA appendix so Legal has it in writing. Shall I send a redline?
[[Acme SOC2]][[Q3 planning]]
Software that fits you, not the other way around

Wrap the tools you keep, replace the ones you don't

Describe the tool you wish existed and an agent builds it — but it lands as a page in the system you already live in, not a repo with its own deploy and login. Hyperpersonal doesn't have to mean fifteen half-finished apps.

Iterate by editing, or by asking again. For change control, deploy it from git instead (see the Developers tab). Docs ›
Live: describe an app, watch the agent build it
apps / build
synced
youBuild me a subscription tracker: every recurring charge from my invoice mail, the monthly total, and flag anything that got more expensive. Link each charge to its vendor page.
Automation you can read

Rules in plain language

Mail rules are plain-language prompts. A rule can label, skip the inbox, trigger an agent, and set the severity for whatever it matches, so a message from a supervisor is always important while newsletters stay silent.

Any agent or workflow can also run on a clock — a daily digest, a Friday review — landing in the task queue's Scheduled section, inspectable like every other run. Docs ›
A follow-up nudge sends (gated), waits three days durably, checks for a reply, and only nudges on silence. Docs ›
Live: toggle "skip inbox" on a rule
mail / rules
synced
3 rules · edited on the Rules tab
invoicesmatched 47 e-mails
whenAnything that looks like an invoice or a payment receipt from a vendor
thenlabel · skip inbox · run agent: invoice-filer · severity important
newslettersmatched 213 e-mails
whenNewsletters, product updates, and marketing announcements
thenlabel · skip inbox · severity silent
One triage for everything

Escape notification hell

Notifications are engineered to be addictive, and the interruption itself does the damage: merely receiving one measurably fragments attention and degrades performance on a demanding task, even when you never touch the device (Stothart et al., 2015).

So decide once what is genuinely urgent, and let nothing else through. Every event, mail, message, agent result, or reminder flows through triage you configure: what interrupts, what queues, what files silently. Only the level you mark critical pierces focus mode.

Define "urgent" narrowly, in writing. Everything else queues, so you stop checking compulsively and work the rest between tasks, at your own pace, because you trust the wall. Docs ›
Live: pick an event and watch it route
settings / triage
synced
Event triage
Incoming event:
silentfiles quietly to the page inbox, no interruption
normalinto the task queue for later
importanttask queue plus a notification
ultranotifies immediately, pierces focus mode
Deterministic rules run first (outage → ultra never waits on the classifier). Ultra delivery never blocks on a third-party API.
One inbox for all of it

An inbox where everything is something you can do

Mail, calendar invites, reminders, a nudge your assistant drafted, a Slack ping, a call you just finished — they all land in one inbox as small live cards, not a wall of subject lines. Reply, RSVP, sort, or mark it done right there in the card.

It is still your outline underneath. Fold a card open — click it, or focus it and press — to see the page behind it, like the dentist's contact, without leaving the inbox. Or switch to one‑at‑a‑time and clear the queue like a deck of cards.
Live: fold the dentist open (click it, or focus it and use  ), sort a capture, reply on Slack — each card clears once you act. Try  One at a time .
special / inbox
synced
6 to handle 1 of 6
contacts · Dr. Alvarez Dental
Phone(415) 555-0148
Last visitcleaning · 6 months ago
Noteask about the night guard
Ingest pipeline sync Thu 14:00
30 min · with [[Rachel Kim]], [[Sam Ito]], and 2 more
Follow-up: Rachel Kim needs you
No reply in 3 days on the SOC2 redline — your assistant drafted a nudge.
drafted nudgeHi Rachel — just circling back on the SOC2 redline. Happy to walk through the audit-window language whenever suits. No rush.
Clarify this capture GTD
“Local-first sync as a paid plugin — who would actually buy it?”
Your clarify agent suggests Someday / Maybe. File it as:
Debrief · Acme ingest sync just so you know
Your assistant summarized the call — nothing to approve, just so you're caught up.
  • Rachel confirmed the audit window: March 14.
  • SOC2 redline goes out today — the draft is already in your inbox.
  • [[Sam Ito]] owns the pipeline migration; revisit next week.
# Sam Ito Slack · #eng
Did we land on the migration window? Standup in 10 🙂
An assistant with memory and manners

It remembers day 3 on day 300, and asks before it acts

Press one key on any bullet and an agent takes it as an instruction, answering from your whole graph. It remembers what it learns, and that memory feeds every future run.

Anything consequential pauses for your approval; routine reads never interrupt. Agents are pages you can read and edit: narrow the tools, sharpen the prompt, put one on a schedule. Docs ›
Live: approve the gated step to let the run finish
agents / run ⌁
⌘↵synced
Draft a reply to Rachel about the SOC2 window and send it run ⌁
default-agent paused · awaiting approval
✻ llmplanned 3 steps
⚒ kb.search"Acme SOC2 timeline" · 2 hits
⚒ mail.proposeReplydrafted · ungated
⚒ mail.sendawaiting approval
mail.send → rachel.kim@acme.test "Re: revised terms"
Attention you can enforce

Mail, chat, and feeds open on your terms

The failure mode you know: check "real quick", lose forty minutes. Subspace enforces the rules you set. Mail and IM open once every couple of hours; social feeds lock after a quota. Enforcement is central, so reloading the page or switching devices does not help.

Truly urgent still gets through as a triaged notification, which is what makes it safe to keep the rest closed. Genuinely need in? An override asks what you need and reminds you it is your third this week. Docs ›
The not-now screen, mid-lockout · enforcement is central, so reloading won't help
/ mail
synced
frequency rule · once every 2h
MAIL OPENS IN
1:47:12
Nothing urgent is waiting. If it were, it would have interrupted you.
triage watched 14 events this morning · 0 critical
I actually need access
Remember what is worth revisitingplugin

You can't connect ideas you'd have to look up

Insight happens between two things held in mind at once, and nothing you have to search for is ever in the room at the moment it would matter. Spaced review keeps the things you think with in your head — facts, but also the business idea you sketched and the approach you shelved.

The review deck brings an idea back at the moment you might act on it. The not-now screen offers your due cards instead of a locked feed, so an enforced pause becomes time with your own best thinking. Docs ›
Live: click the card to reveal, then grade it
/ flashcards
synced
Review queue1 / 3 due
knowledge · due for review
Why does single-vector embedding search lose accuracy on long documents, and what does late-interaction retrieval (ColBERT) do instead?
Pooling a whole passage into one vector discards token-level detail, so fine-grained matches wash out. ColBERT keeps a vector per token and scores with MaxSim, recovering passages a pooled embedding misses. This is exactly the retrieval quality your shelved [[ideas/rag-plugin]] business idea would need to be worth paying for.
click to reveal
Everywhere you work

A desktop app, a phone in your pocket, capture without deciding

A native desktop app with tabs, split panes, and a global capture hotkey. A phone app with offline capture, voice notes, meeting recording that captures you and the room on separate channels and transcribes onto a page, and full read access on the go: ask your graph through an agent and browse any page. A browser extension that saves any article or a deep research report from Claude/GPT as clean text.

Capture without filing. Sorting is a five-minute review later, on your schedule.
Live: switch the desktop tabs; on the phone try Capture, Ask, Browse, and Record
Project X Mail Acme Corp
Project X · outline
Architecture [[fs.path]]
Ingest pipeline sync notes
Open questions · 3 collapsed
[[Acme Corp]] · account · split pane
Rachel Kim · VP Engineering
Open: SOC2 redline due Mar 14
14 mail · 3 meetings
subspace · mobile
Quick capture
follow up on the SOC2 redline #acme |
#acmeinbox#Q3#[[Project X]]
Routes to the [[acme]] page inbox. Offline? It queues and flushes when you reconnect.
Ask your graph
What did we promise Acme on the SOC2 audit?
reading your graph |
Browse
crm / Acme Corp
Meeting
recording · you and the room on separate channels
meCan we get the audit window in the appendix?
themYes, March 14, I will send a redline today.
Extras

A few more ways to make it yours

Unbundle

Any page as its own app

Open any page as a standalone desktop app with its own window and dock icon: a dedicated Mail app, an app for one project. Every app is a window on the same graph, so links resolve between windows, they share one notification queue, and each app is its own access boundary.

Calendar

Your calendar, in the graph

Connect Google Calendar and your week mirrors in continuously, every attendee resolved to their person page. An agent can add an event on your behalf, waiting for your approval before it writes to your real calendar.

GTDplugin

Getting Things Done, automated

Send an e-mail with an ask and a waiting-for item opens; the reply closes it; a daily sweep nudges whatever has gone quiet. A clarify agent sorts every capture — trash, reference, someday, delegate, defer, or do — and when the next action is a reply, drafts it for your approval. A weekly review keeps the lists honest.

Debriefplugin

Every call gets a debrief

When a meeting ends, a feedback agent critiques the call against a playbook you curate and comes back with specific quotes from the transcript. Point the same agent at a hiring page for interviews or a support page for tickets.

Ingest

The web, distilled into your graph

Configure ingestion for the sources you follow: scrape specific sites, pull the newsletters you subscribe to, watch a handful of social accounts. Scheduled agents capture each new item, compile it into an interlinked wiki, and route it to the project pages that opted in, so what you read becomes knowledge you can search instead of a browser tab you lose.

The graph is programmable, and the config is code.

Subspace runs on Node and tsx, React on the front end, an embedded Postgres, durable workflows compiled by the Workflow Dev Kit (WDK), and the Vercel AI SDK on the model seam — with AI SDK Harnesses slotting whole coding runtimes, Claude Code and Codex, into those same durable workflows as sandboxed background agents. The privileged core stays small — the graph, the command pipeline, the agent engine, gates and audit — and features like CRM, meetings, spaced repetition, outreach, GTD, and the ML research loop ship as plugins on the same contracts you can build on. Every definition, from a page type to an agent, is either a live page you edit or a file you deploy from git. Plugin authoring › · SDKs › · Architecture ›

  • Every SaaS tool is a black box: you can't read what the automation does, let alone change it.
  • Your knowledge is locked in a proprietary format behind an API.
  • Configuration lives in someone's web console, with no diff, no review, no rollback.
  • You want your own scripts and coding agents pointed at your data, and a terminal where the work is.
Write your own functions and workflows

Custom pages, functions, and workflows are just pages

Write a TypeScript function on a page and call it from any bullet. Page types, durable workflows, agents, skills, and tools are pages too, so the whole system is reshapeable without forking anything. A workflow is an ordinary async function whose steps are durable: it can wait days for an approval or a reply and resume exactly where it paused, on the same WDK engine the built-in agents run on. Functions › · Workflows ›

Reactive by construction: an event spine runs under everything — mail received, a run finished, a schedule fired — and your agents and workflows subscribe to it, in the same transaction as the change. Triggers ›
Or drive it from outside, in any language: first-party SDKs (typescript, python) put the whole surface behind one scoped token, from a code cell, a cron job, or CI. A subspace-mcp server exposes the same methods to any MCP client. SDK docs ›
Live: the definition as code, then pick a function from the slash menu below it
agents / workflows / follow-up-nudge.ts
durable workflowsynced
'use workflow'

// durable: suspends for days at zero compute, then resumes right here
export async function followUpNudge(input) {
  const sent = await runTool(input.runId, {
    name: 'mail.send',          // gated: waits for your approval
    args: { to: input.to, subject: input.subject, body: input.body },
  })
  if (sent.output === 'denied') return finishRun(input.runId)

  await sleepFor(input.delay ?? '3 days')   // no process running

  if (!(await hasReply(input.runId, input.threadId))) {
    await runTool(input.runId, {
      name: 'mail.send',
      args: { subject: `Re: ${input.subject}`, body: 'Just following up.' },
    })
  }
  return finishRun(input.runId)
}
projects / Project X
⌘↵synced
/|
pipelineSummary(live rollup of the pipeline tablefn
runwayGauge(months of runway from cash + burnfn
prep-meeting(brief me before a callagent
weekly-reviewcustom workflow · runs every Fridayworkflow
Everything is configuration, all of it in git

Configure the whole workspace from a repo

Agent definitions, page types, mail rules, schedules, skills, and connectors are all pages, and any of them can be owned by a git repo. Subspace pulls the repo and reconciles it into the graph; the managed pages go read-only in the app, so the repo stays the single source of truth. Your automation is code: reviewed in a pull request, versioned, reproducible on a fresh install from the repo alone.

It is per-definition. Keep the agents and rules you depend on under change control; leave one-off experiments as live pages until they earn a commit. GitOps docs ›
Live: reconcile a change from the config repo
repo / subspace-config · main
synced
agents/prep-meeting.md GitOps-managed · read-only in app
approval: propose-only
-schedule: manual
+schedule: "0 8 * * 1-5" # weekdays 08:00
tools: [ kb.read, cal.read ]
Plain files, all the way down

Your whole graph is a folder of Markdown

Subspace continuously mirrors every page to Markdown on disk in the Open Knowledge Format (OKF sync). Point Claude Code, a script, or a teammate's editor at the folder and let it work: Subspace pulls the edits back into your graph automatically, merged three-way per bullet, even while you edit the same page in the app.

The file is the contract, and git is your history. Put other agents to work on the same knowledge base with no API to wire up. Docs ›
Live: run an external agent on the file mirror
files / ~/Subspace/okf
synced
# the whole graph, mirrored as Markdown on disk
okf $ ls
projects/ crm/ agents/ research-wiki/
okf $ claude "add a risks section to Project X"
A terminal where the work is

Real terminals, rooted in your graph

Open a terminal as a tab or split it beside any page, rooted at the repo that page is about. It is a real PTY: your shell, your tools, ssh, a coding agent. The session is hosted by the app, so it survives reloads and a second window can attach to it. The place you think and the place you run commands are the same window. Docs ›

Your task list, synced with beads: point a page at a beads (bd) workspace and its issues mirror onto the page as checkbox bullets, both ways. You and the coding agent share one backlog. Docs ›
Split a terminal next to the project page and run a coding agent against the OKF mirror; its edits fold back into the very page you are reading.
Live: run the command in the split terminal
Project X terminal · ~/segnet
Project X · outline
Add the eval slice [[fs.path]]
terminal · ~/segnet · ● live PTY
# a real shell, hosted by the app · survives reloads
segnet $ git status
On branch main · nothing to commit
segnet $ claude "add the eval slice"
AI SDK Harness · background coding agents

Claude Code in a background harness

AI SDK Harnesses wrap a whole coding runtime — Claude Code, Codex — behind the Vercel AI SDK Subspace already speaks; Subspace runs it sandboxed, as a durable WDK workflow. Link a page to a repo, its beads (bd) issues mirror as checkbox bullets both ways, and a harness run picks one off the backlog — no terminal to babysit — streaming typed progress into the run tree and landing a pull request, a code/ page, or a gated plugin install, each filed as a card. Docs ›

Isolation gates execution; approval gates effects. The sandbox has no host access, and everything touching Subspace crosses the ordinary gates: a scoped, expiring token for reads, edits returned as gated proposals, installs reviewed against the exact bytes you approved. Gates ›
The backlog is the queue. Dispatch is a tool call — agents file issues and start runs, a schedule trigger claims the next ready bd issue — and every landing still crosses your gates. Triggers ›
Live: dispatch the open issue, then approve the gated harness run
projects / segnet
harness · claude-codesynced
sn-41 — fix flaky eval seed · PR #212 merged
sn-42 — add boundary-loss eval slice

Everything above, per person, plus a graph you share.

A team workspace is one graph with two parts: a private part that is yours alone (your inbox, your captures, your drafts) and a shared part the team works in together. So every person gets all the For Individuals benefits, and on top of that the record becomes collective: it accretes as a side effect of the work instead of rotting in a wiki nobody updates. Sharing & ACLs docs ›

  • The wiki is stale the week after you write it, because documenting is separate from doing.
  • When someone leaves, the context leaves with them, buried in their inbox and their head.
  • Everyone triages the same noise independently, all day.
One graph, two parts

Private where it should be, shared where it counts

Your inbox and your half-formed notes stay yours. The account pages, the decisions, the meeting record live in the shared graph, linkable from both. Nobody has to choose between a personal tool and a team tool.

The same link in your private daily note points at the shared account page, so your work and the team's record stay one graph.
Shared and private, side by side in one graph
workspace / acme
⌘Ksynced
◆ shared · whole team
[[Acme Corp]] account
[[Rachel Kim]] · VP Eng
Meeting, Jul 09 · summary
Decision: SOC2 window in appendix
pipeline · weighted total
● private · only you
daily note, Jul 10
links → [[Acme Corp]]
your inbox · 2 captures
draft: reply to Rachel
🔒 not visible to the team
One search, one set of links. Sharing is per-directory, with access controls; the private half never leaves your view.
A client record nobody keepsplugin

Every sender and attendee becomes a shared page

People and companies build themselves from the team's mail and calendar: company, history, decisions, remembered facts. When someone leaves, the context stays on the page. When someone joins, "read the account pages" is the onboarding.

Duplicates are never silently merged: a near-match becomes a confirm-or-dismiss card. Link decisions to the account page as they happen, and "what did we agree with Acme in March" becomes a search. Docs ›
Live: resolve the merge proposal
crm / Rachel Kim
⌘Ksynced
Rachel Kim
RK
Acme Corp ↗rachel.kim@acme.testVP Eng
email history open in mail ↗
↓inAcme, revised termsCan you confirm the SOC2 timeline9:42
↑outRe: pilot scopeSounds good, I will send the redlineJul 6
Needs confirmation
Possible duplicate: merge Rachel Kim and R. Kim (acme.test)?

Both resolve to the same normalized name and the acme.test domain. Confirm merges nodes, joins aliases, and re-points backlinks in one commit. Dismiss keeps both.

See the work as a board

The same pages, as a Kanban board

Any directory page and the task queue render as a board: lanes come from a status field on the child pages, cards are the pages themselves. List and board are two views of one directory, so dragging a card is a real command on the ordinary audited write path — versioned, synced, and visible to agents like any other edit.

Scope a board to a project and it becomes the standup. Everything already links back to the accounts and decisions it came from. Docs ›
Live: click a card to move it forward, then check the List view
projects / Onboard Acme
⌘Ksynced
Backlog2
Draft data-processing addendum
PN legal
Provision sandbox tenant
JM infra
In progress1
SOC2 evidence pack
RK due Fri
Review1
MSA appendix: audit window
PN from [[Rachel Kim]]
Done1
Pilot scope agreed
JM
Lanes are configured on the directory page itself; the move is one audited command.
Meetings become the recordplugin

Where decisions get made, and usually evaporate

Recorded meetings become transcript and summary pages, linked from the calendar event and from every attendee. The decision reached out loud becomes a durable, linked note the whole team can find.

Add your follow-ups as bullets under the summary and they are already linked to the people and the project they belong to. Docs ›
Live: a meeting page as you talk · click a bullet to zoom, fold the transcript, ⌥↵ for a pane
meetings / Acme, ingest pipeline sync
⌘Ksynced
Meeting, Acme ingest pipeline sync
recording · you and the room on separate channels
Attendees: [[Rachel Kim]] [[Priya Nair]]
Transcript
meCan we get the audit window in the appendix?
themYes, March 14. I will send a redline today.
On Stop, a summary is written at the top of the page and linked from each attendee's CRM page.
Reach out where they areplugin

One outreach sequence, across e-mail and LinkedIn

A multi-channel outreach workflow runs a sequence for each prospect: an intro e-mail, a LinkedIn connection and note, a nudge if it goes quiet. It waits durably between touches and stops the moment they reply on any channel. Every touch is logged to the account page, which becomes the single record of who was contacted, where, and what came back.

Keep sends gated at first, then auto-approve the routine steps and keep a human on the first message to a new company. LinkedIn actions ride your own browser, so you stay within its limits. Docs ›
Live: approve the gated LinkedIn touch
workflows / outreach · Acme expansion
multi-channel-outreachsynced
Sequence for [[Rachel Kim]] · VP Eng, [[Acme Corp]] · every touch logged to the account page
Intro sent, referencing the SOC2 threadday 0 ✓
LinkedInConnection request + note, via the browser extensionday 2 ✓
Nudge, only if no reply on either channelday 5 · waiting
LinkedInDM the case studyneeds you

The operating system for your research loop.

Ask how your team answers these today:

  • "Didn't we try a boundary-aware loss last spring?" The answer lives in a departed engineer's head or a run named exp_final_v3_fixed.
  • "Why is this run in the queue?" The hypothesis it tests was never written down, so the result gets interpreted loosely, or not at all.
  • "What should the new hire read?" The real state of the program is tribal, so onboarding takes months.

These are memory, attention, and orchestration problems, not modeling problems. Everything on the Teams tab applies. The model-agnostic research graph installs on its own; an optional MLOps adapter adds run reading and launch scheduling. Because both are plugins, these loops are yours to configure, not a fixed product you have to accept. Autoresearch docs ›

The research graph · goal dashboard

Your whole research loop on one screen

Goals, hypotheses, observations, concepts, and pending proposals form the core graph. Add the MLOps adapter for runs, ordered backlogs, and a machine-maintained profile (the current recipe derived from your real run configs). From any goal you can walk to every hypothesis raised against it and every source or run that produced evidence. That graph is institutional memory.

Live: switch views, resolve a "Needs you" item
goals / segmentation-iou-val-v3
⌘Ksynced
Segmentation IoU ≥ 0.82 on val-v3 on track · 0.009 to target
repo acme-vision/segnet · tracker W&B · launcher local-runs · A100×6 · budget 20 runs/wk · owner Priya N.
Best IoU
0.811
▲ +0.015 vs baseline
Open hypotheses
4 / 6 lifetime
1 supported · 2 testing
Runs this week
11 / 20
3 today · 9 GPU-hrs left
GPU capacity
2 / 6 free
4 A100 in use
Needs your review
1
blind read overdue
IoU on val-v3 · best-so-far by week
baseline 0.796 → now 0.811 · target 0.820
0.820 target
Hypothesesproposed → accepted → testing → resolved
2
proposed
1
accepted
2
testing
1
supported
1
refuted
H-07
Small-object precision is low because crop augmentation discards them
▲ 2 support1 neutral
testing
H-09
Boundary-aware loss lifts IoU on thin structures
▲ 1 support▼ 1 contra· mixed
testing
H-11
Class-balanced sampling fixes rare-class recall
queued · 4×A100 · waiting on capacity
accepted
Recent runsevery run linked to the hypothesis it tests
RunHypothesisIoUΔWhenReading
segnet-2451H-09 boundary-loss v20.804+0.0082hsupports
segnet-2449H-07 keep-small-crops0.811+0.0156hyour read
segnet-2447H-09 boundary-loss v10.792−0.0041dneutral
segnet-2440H-04 mixup0.781−0.0155drefutes
Needs you4 gated
Interpret segnet-2449 · blind
your reading before the AI's · +0.015 IoU
Dispatch coding task: boundary-loss v2 cleanup
→ coding agent on segnet · returns a PR
2 new hypotheses proposed
from the 2h heartbeat · accept to add to pool
Launch run: H-11 class-balanced
4×A100 · budget 11/20 ✓ · waiting capacity
Backlog & capacityA100×6
Cluster · 4 in use, 2 free
runrunrunrunfreefree
1H-11 class-balanced sampling4×A100
2H-07 keep-small-crops v2 · from PR #2182×A100
Literatureuntrusted · proposal-only
Boundary-Aware Feature Propagation for Semantic Segmentation
arXiv:2506.14822 · → H-09 · 2h
Scale-Adaptive Crop Sampling for Dense Prediction
arXiv:2505.09117 · → H-07 · 1d
Orchestrator · last heartbeat 2h ago · next in ~4h · proposed 3 items this cycle, 0 executed without approval. Full chain goal → hypothesis → task → PR → run → observation stays inspectable.
Loop 0 · the field, coming to you

Papers, newsletters, and web captures triaged against your goal

Route the sources you already capture — papers, newsletters, web pages, and notes — through a research goal's specialized triage. Each item is injection-screened, distilled to an auditable concept when relevant, and linked to the hypotheses it bears on. Use ordinary triggers with the ingestion connectors you have installed when you want that capture to run on a cadence.

Everything lands untrusted and proposal-only. An ingested paper can suggest a hypothesis, never launch a run; you approve what enters the record. Docs ›
Illustrative: captured sources become screened, auditable proposals
research / ingestion sources
synced
arXivcat:cs.CV AND (segmentation OR "dense prediction")every 6h
newsletterthe 3 you already read, via [[ingestion sources]]Mon/Thu
@labmate, @vision_daily, +2 accountsevery 2h
Loop 1 · every run gets read

Your interpretation goes first, blind

With the MLOps adapter enabled, a terminal run is read against your open hypotheses and drafts observations. Then, deliberately, the AI's reading stays hidden until you commit your own. The merged interpretation enters the record only after the review gate.

A plausible AI take that arrives first anchors everyone who reads it. This protocol keeps your team's judgment trained and primary while routing terminal runs through one consistent, auditable review path.
Live: write a line, then commit to reveal the AI draft
runs / segnet-2449
⌘Ksynced
segnet-2449 finished
testing [[H-07 keep-small-crops]] · goal segmentation-iou-val-v3
IoU · val-v3
0.811
▲ +0.015
Small-object AP
0.63
▲ +0.08
Boundary F1
0.71
▲ +0.01
Val loss
0.142
▼ −0.006
✍︎ Your reading, before the AI'sAI draft hidden · 2 observations

You can see the metrics above. Write what you think this run shows for H-07, then reveal and merge the analyst's draft.

merged interpretation enters the record on both names
🔒 analyst draft · unlocks after you commit
Run strongly supports H-07: small-object AP rises 0.08 while overall IoU gains 0.015, and the confusion matrix shows recovered recall on the three smallest size buckets. Recommend promoting keep-small-crops to the default augmentation.
Merged observation filed → your read (win concentrated in small dense objects, not thin structures) plus the analyst's (recovered recall on the smallest buckets). Next step queued: slice val-v3 by object size before promoting.
Loop 2 · heartbeat and advisory ranking

Pending hypotheses, with evidence and an inspectable rank

A bounded heartbeat gathers one goal's current evidence and drafts pending hypotheses or status changes; it never approves or executes them. An optional Elo sweep compares a bounded set pairwise under a pinned judge rubric and writes advisory ratings. The broader multi-agent architecture is informed by Accelerating scientific discovery with Co-Scientist, but the shipped 1.0 loop remains explicit and human-confirmed.

Nothing here is an always-on autonomous mode. Heartbeats run only when invoked or triggered; Elo sweeps are explicit, ratings never change status, and external effects retain their gates. Docs ›
Live: click a hypothesis to read why it ranks there
research / rare-class recall
advisory Elo sweepsynced
Hypothesis landscape 6 open · pinned judge rubric · unchanged sweeps are no-ops
11642Rare-class recall is capped by annotation noise on boundary pixels, not by sampling
accepted3 evidence links7 sources
21588Boundary-aware loss underperforms because edge weights are not normalized per image
testing3 evidence links4 sources
31497Rare classes co-occur with motion blur; the ceiling is the sensor, not the model
proposed1 assumption flagged
your call
Make the loop your ownplugin

A loop you can reshape

The page types, the loops, the gates, the connectors are plugins on open contracts. Prefer a two-stage review? A different budget rule? A launcher we have not built? Reshape it, or write your own, without forking the app. Docs ›

The loop, defined as a plugin you can edit
plugins / autoresearch + autoresearch-mlops
⌘Ksynced
heartbeat workflow editable
schedule every 2h, per goal · change the cadence on one line
gate launch-run · swap the budget rule for your own
review protocol blind-first · or add a second reviewer
Installed on your data volume, versioned with the graph, upgraded without a redeploy.
Data science, in the graph

Ask a bullet a question, get a code cell back

Write what you want on a bullet and run the default agent on it with ⌘↵. It reads your graph, writes a Python code cell right under the line, and runs it in a kernel that already knows who you are. The analysis lands on the page it answers, next to the runs and hypotheses it came from: re-run it, edit it, or link its figure into a report.

The kernel gets a short-lived, scoped token injected, so import subspace; sb = subspace.Subspace() just works and the blast radius is only the scopes you granted. The same SDK drives cron jobs and CI from outside the app (see the Developers tab). Docs ›
Live: hit ⌘↵ on the bullet (or click it) to run the default agent
research / segnet / analysis
⌘↵synced
create a python code cell that pulls data from [[segnet]] runs and visualises it with matplotlib
Press ⌘↵ or click the bullet to run the default agent on this line
Where this is going

A graph of your own, connected to everyone else's

Every person and every team runs their own graph. The future is federation: mount parts of another graph you have access to, your employer's, a tool you use that hosts one, and reason across them as if they were yours. Talk to another graph's tools over MCP, and expose your own, with access controls and approvals on every boundary.

mounted · read mounted · read mcp · gated + approved your graph notes · comms · agents employer shared docs · runbooks a tool hosts its own graph another agent calls your MCP tools
mounted graph (read, scoped) MCP call (gated, approved) a tool that hosts a graph