Formstr · open-source work tools on Nostr

Work tools for people and their agents.

Forms, documents, calendars, files and email, built on Nostr, an open protocol. Your work is signed with your key and encrypted on your device. The people and AI agents you trust can work with it directly. There are no API keys to provision and no integrations to maintain.

Explore the suite
What a person sees
Site visit feedback
One question, no names. A demo: answers are encrypted, and this page publishes the key that opens them, so results show here live.
How was the visit?

Encrypted in your browser before sending

=
What an agent readskind 30168 · signed
{
  "kind": 30168,
  "pubkey": "13a6b6351139490448f9ec5f…",
  "created_at": 1792908865,
  "tags": [
    ["d", "902336a8"],
    ["name", "Site visit feedback"],
    ["field", "f0", "option", "How was the visit?", …]  1
    ["relay", "wss://relay.formstr.app"], …
  ],
  "sig": "35aa55aa2ef514d1…"
}
One form, two readers. People get a form. Agents get the signed event it's made of, in a public format any Nostr client can parse, with no Formstr API in between.
01 — The suite

Five apps. One key. Everything in an open format.

Each app stands on its own. They share an identity and a data format, so they also work together, and with anything else that speaks Nostr. Each one is listed with the event kinds it stores your work as.

Forms

kind 30168 · 1069

Formstr

Surveys and forms with end-to-end encrypted responses, anonymous submissions and AI-assisted building. Only you and the people you add can read the answers.

Address
formstr.app
Responses
NIP-44 encrypted
Source
nostr-forms · MIT
Open Formstr
formstr.app / site-visit-feedback / responses
How was the visit?
Loading results…
Smooth0
Mixed0
Rough0

Latest

Nothing yet. The form at the top of this page is this one: answer it and watch it land here.

Calendar

kind 31923 · 32678 private

Calendar

Events, RSVPs, recurring schedules and booking pages. Private events are encrypted; public ones can be shared with anyone on Nostr.

Address
calendar.formstr.app
Sign-in
extension · NIP-46
Source
nostr-calendar · MIT
Open Calendar
calendar.formstr.app
Formstr Calendar, month view
Documents

kind 33457

Pages

Documents and notes in Markdown, encrypted by default, with live editing for everyone you share with, people and agents alike.

Address
pages.formstr.app
Collaboration
real-time · multi-writer
Source
nostr-docs
Open Pages
pages.formstr.app / q4-supplier-review
Encrypted · shared with 2
PSAIDO

Q4 supplier review

Three of our five suppliers met every delivery window this quarter. Two slipped by more than a week, both during the port strike in November.

Actions

  • Renew the Halden contract on current terms Priya
  • Ask Norvik for a revised lead-time commitment Agent · drafting
  • Send the site-visit feedback summary to facilities
Files

kind 34578

Drive

File storage where Nostr keeps the index and Blossom servers you choose keep the bytes. Use a public server, or run one inside your own network.

Address
drive.formstr.app
Storage
Blossom · your choice
Source
formstr-drive · MIT
Open Drive
drive.formstr.app
My Drive / Operations4 items · 61.2 MB
NameSizeStored onModified
Halden-contract-2027.pdf1.8 MBblossom.yourco.internalOct 21
q4-deliveries.xlsx412 KBblossom.yourco.internalOct 20
site-visit-photos.zip58.6 MBnostr.downloadOct 18
badge-process.md4 KBblossom.yourco.internalOct 17
Email

kind 1301 · gift-wrapped

Mailstr

A real email address for your Nostr key. Mail sent to you@mailstr.app arrives encrypted to your key and opens in Mailstr or any compatible client.

Address
mailstr.app
Delivery
NIP-59 gift wrap
Source
nail · MIT
Open Mailstr
mailstr.app / inbox
Mailstr inbox
02 — Agents

Agents don't need an integration. They can generate their own key.

Most software keeps programs out until someone signs off: a developer account, an API key, a review, a scope. Nostr doesn't work that way. Every app reads and writes the same signed events over the same open protocol, so an agent with a key can do what any other client does. It can read a form's responses, put a meeting on a calendar or edit a shared document. And it doesn't have to wait to be issued that key: it can create its own identity in one step, or act for you through a remote signer.

@formstr/mcp packages that for MCP hosts such as Claude, Cursor and Goose: more than seventy tools across the suite, set up with one command.

Formstr's agent mascot, a small white robot, wavingDraft a survey?Open FormstrYour agentnpub1ag3…k9qz
Your agent, with an identity of its own. Every action it takes is signed by its key, so you can always tell its work from yours.
sessionmcp.json
$ npx -y @formstr/mcp login
? Sign in with › Create a new key
✓ New identity npub1ag3…k9qz, stored encrypted in the keystore.
you ›Put Thursday's supplier workshop on my calendar, make a feedback form for it, and email the link to everyone who's attending.
create_calendar_eventSupplier workshop · Thu 10:00done
create_formWorkshop feedback · 5 questionsdone
send_mail14 recipientsneeds your OK
Creating things is on by default. Sending, sharing, editing and deleting wait for --allow-writes and an explicit confirmation.

Its own key

An agent can create its own identity, stored NIP-49 encrypted in the OS keychain, or act for you through a remote signer (NIP-46).

Guardrails

Outward and destructive actions need --allow-writes and confirm: true.

Any model

Works with any MCP host, including local models through Goose and Ollama.

Install

npx -y @formstr/mcp
npm · AGENTS.md · llms.txt

03 — Storage

Hosted or self-hosted. Encrypted either way.

You decide where your work lives: on your device, on a relay you run, on relays you pick, or on ours. Whichever you choose, it's encrypted on your device first, so the host only ever stores ciphertext.

Where should your work live?

New accounts start with a default list, the Formstr Relay plus public relays. Change it in any app's settings.

Your device

Encrypts with your key

Stored on

relay.yourco.internal

Hosted by
You
Lives in
Your infrastructure
Leaves your device
Encrypted
Who can read it
Only you, and people you share with
On relay.yourco.internal:
"content": "AgT7x9Qd2Kf8mPz1rR4vN6wYbH3eL0cJs5Uo9aZ…8B=="
Pick any option: what gets stored is the same ciphertext, readable only with your key. You can mix options, too, such as your own relay plus a public one for redundancy.
04 — Security

Security you can check, not just trust.

Encryption happens in your browser before anything is sent. Relays store ciphertext and signatures. They can't read your content, and neither can we. The code that does this is open for your security team to review.

Identity
A key pair, not an account. Sign in with a browser extension, a remote signer (NIP-46) or a local key.
Encryption
NIP-44, performed on your device. Shared items are delivered with NIP-59 gift wraps.
Data location
Hosted, self-hosted or on your device. See Storage.
Files
Blossom servers you choose, public or self-hosted.
Audit trail
Every change is a signed event. Each one says which key, person or agent, made it.
Tracking
No analytics and no advertising. Privacy policy
On the relay · kind 1069
"content": "AgT7x9Qd2Kf8mPz1rR4vN6wYbH3eL0cJs5Uo9aZqW1tE8yRbN2mKc4Vh7LpXs0dF3gJ6nQ9uY2iO5wT8rA1zC4vB7eH0kM3pS6…8B=="
On the owner's device
How was the visit?Smooth
What should we change?Badge pickup took twenty minutes. Could the passes be ready the day before?
A form response as stored and as read. Only the form owner's key turns one into the other.

Bring Formstr to your organization.

We'll walk your team through the architecture, the security model and running your own relays and storage.