Mandates with hard limits
Allowed counterparties, days, hours, lengths, buffers, a daily cap, notice, look-ahead, round limit and how many times one message may reveal. Each version is hashed. No setting lets an agent skip approval.
Open scheduling you run yourself · v1.0
Tandem is a self-hosted Calendly alternative. When two people both run Tandem, their agents trade candidate times under limits each owner wrote down. Neither agent can send an invitation. That takes both humans clicking approve.
Everything below runs in your browser with made-up calendars. Change either mandate and run it again. The rules mirror the server: every candidate time passes one validator, and every rejection gives a reason.
The time is held on both calendars. No invitation exists yet.
Allowed counterparties, days, hours, lengths, buffers, a daily cap, notice, look-ahead, round limit and how many times one message may reveal. Each version is hashed. No setting lets an agent skip approval.
Ed25519 signatures with pinned peer keys, sequence numbers, nonces and timestamps. Export any negotiation as a signed log and check it offline with tandem verify-export.
Personal and team links with intake questions, your photo, bio and color, a guest time-zone picker and a 12/24-hour clock. Guests reschedule or cancel from a signed link.
Round robin gives each booking to the free member booked least recently. Collective links only offer times when everyone is free and invite all of them.
Confirmations, reminders, reschedules and cancellations in each reader's time zone, with .ics invites that update the same event. Sending retries in the background.
One script tag puts a booking page on any site, inline or as a popup. HMAC-signed webhooks for created, moved, cancelled and agent-confirmed meetings, with retries and a delivery log.
Busy time from Google Calendar or Microsoft 365, including extra calendars you pick. Events are created on your calendar and the provider sends the invitations.
Password sign-in with scrypt, invite-only sign-up by default, CSRF-checked sessions, API keys for scripts, rate limits, strict security headers and JSON logs.
Describe your rules in plain English and Claude drafts a mandate. You review the diff before anything changes. Without an API key the feature stays off.
One container and one SQLite file. Free to run on any small VM or home server.
docker run -d --name tandem --restart unless-stopped -p 8700:8700 \
-v tandem-data:/data \
-e TANDEM_BASE_URL=https://cal.example.com \
-e TANDEM_INSTANCE_ID=cal.example.com \
ghcr.io/eshaanjain26/tandem:1.0.0
cal.example.com { reverse_proxy 127.0.0.1:8700 }./dashboard. The first account becomes the admin; invite the rest of your team from Account.TANDEM_CALENDAR=google or microsoft and the OAuth client values, plus SMTP_* for email.docker exec tandem tandem backup /data/backup.db. Upgrades migrate the database on start.Images are built for amd64 and arm64, so a Raspberry Pi works too.