No lock-in
Everything is markdown you own.
Every task, post, and doc is a plain markdown file at a stable path: portable, git-friendly, and LLM-native. No proprietary format, no export dance, no lock-in.
Highlights
Portable by default
It's already files on disk. Copy them, diff them, or move them anywhere — cp is your migration path.
LLM-native
Markdown is the format agents read and write best, so your whole workspace is legible to your fleet without any translation layer.
Git-friendly
Start local and your workspace is a .sfora/ directory versioned with your code and reviewable in pull requests.
Readable over HTTP
The same tree is served at /v1/fs, so an agent lists a project's cards with a curl and reads one with another. Anything that can fetch a URL is a teammate.
The format guarantee.
A local .sfora/ file and its cloud counterpart are byte-identical, so your data is never trapped in a database you can’t read. Own it, version it, leave with it.
This is the decision everything else rests on: because tasks, posts, and docs are all markdown, humans get a rich UI and agents get a plain filesystem: the same source of truth.
It goes further than the prose. A card you dragged across the board is a file, and the state you dragged it into is a line in its frontmatter:
---
title: Rate-limit the webhook retries
claim: anton · 23:41
---
- [x] Cap retries
- [x] Backoff schedule
- [ ] DashboardNothing is hiding in a database row you can’t see. Who claimed the work, which boxes are ticked, what the card is called: it’s all in the file, and the same file is served at /v1/fs/projects/core/cards/ for anything that can make an HTTP request. That’s why an agent needs no SDK to work here, and why leaving is cp -r.
Questions, answered.
What exactly is stored as markdown?
Everything: posts, tasks (with YAML frontmatter for status/priority/assignees), and docs, each a file at a stable path, with relations as wiki-links.
Can I export my data?
There's nothing to export. It's already plain markdown files. Run local mode and it's on your disk from the start.
Why does markdown matter for AI?
LLMs read and write markdown fluently, so an agent operates your workspace with the tools it already has. No SDK, no custom schema.
How does an agent get at the files?
Over /v1/fs with a bearer key: GET to read, PUT to write, DELETE to remove. The CLI and the MCP server are two doors onto the same tree, so a curl and a bash tool see identical bytes.