termynl documentation

Keyboard-first project management. Teams · tasks · issues · projects · views · docs · agents on one object model. Updated for version 0.25.1.

What is termynl

termynl is a project-management workspace built for people who live on the keyboard. Teams, tasks, issues, projects, saved views and docs all sit on one object model and one change bus, so backlinks, activity, notifications, real-time updates and AI actions are built once and work everywhere. An agent that moves a task leaves the same activity a person would.

Getting started

  1. Sign in with Google, Microsoft (work or school) or GitHub (the buttons at the top of the sign-in page), or with an email link below them. Use the address you were invited with, or one on a domain your workspace has verified. If you have neither an invite nor an address on a verified domain, you'll see a "no workspace" screen: ask an admin for access.
  2. Find your teams. The left sidebar lists your teams under TEAMS. Open the team directory to join an open team.
  3. Create a task: press ^K c t. It lands in the team you're looking at and opens straight away so you can fill in the details.
  4. Pick a layout: on a team's Tasks page, ^K v b switches to the board and ^K v l back to the list.

Keyboard

Every termynl shortcut is the same shape: press Ctrl+K (⌘K on a Mac), then one or two letters. It's identical in every browser and on every OS. Below, ^K means that prefix. You can change the prefix letter in Settings → Keyboard, and ^K ? shows the full list.

KeysDoes
^K then typeSearch and the command palette. Type an item key like PROD-12 to jump to it.
^K g m · g n · g p · g t · g i · g dGo to My work · Inbox · Projects · Tasks · Issues (of the team you're in) · Docs.
^K g 1–9Jump to your first nine teams, in sidebar order.
^K c t · c i · c p · c dCreate a task · issue · project · doc in the current team.
^K c vOn a team's view: save the current view.
^K mMove the open item to another team or project.
^K fOpen the filter builder.
^K v l · v b · v t · v rList · Board · Table · Timeline layout.
^K [ · ^K yToggle the sidebar · cycle the theme (System / Dark / Light).
^K kIn the editor, with text selected: add a link.
^K oIn the editor: open the block menu for the block you're in (duplicate, move, turn into, delete).
^K ?All shortcuts.

Standard keys

KeysDoes
Mod+COn a focused task or issue row: copies a markdown link, [PROD-12 title](…/items/PROD-12).
Mod+EnterIn the editor: leave the block you're in (for example a code block or a quote) and continue on a new line below it. In a comment box: post the comment.
/ · @In any text area: the block menu · mention or link an item, doc or person.
Mod+Z · Mod+B · Mod+IUndo · bold · italic.
Mod+Shift+HIn the editor: highlight the selected text.
Mod+Shift+↑ · Mod+Shift+↓In the editor: move the block you're in up or down.
Mod+Shift+DIn the editor: duplicate the block you're in.
↑ ↓ Enter EscMove · open · close.

Mod is Ctrl on Windows and Linux, ⌘ on a Mac.

Teams

A team owns its projects, tasks, issues and views. People can belong to many teams.

screenshot: sidebar TEAMS tree (coming soon)

SCIM groups → teams

A team linked to a SCIM group

Tasks & issues

Tasks are work to do. Issues are problems to track, with a reporter and the affected area. Both live in a team (or in your personal space) and share the team's numbering.

screenshot: task detail with key, assignees and priority (coming soon)
screenshot: issue with reporter, affected area and linked tasks (coming soon)

Projects

A project groups a team's tasks toward an outcome. Each project has a status, priority, assignees, start and target dates, labels and a color.

The six project statuses: Backlog · Planned · In progress · Paused · Completed · Canceled.

The project page shows its details, its progress, and its tasks. Moving a project to another team takes all of its tasks with it.

screenshot: project page with progress (coming soon)

Views

A team's Tasks, Issues and Projects pages are views: a layout plus filters, grouping, sorting and the fields to show.

Saved views

screenshot: list view grouped by status (coming soon)
screenshot: board view (coming soon)
screenshot: table view with inline editing (coming soon)
screenshot: timeline grouped by status (coming soon)
screenshot: filter builder and chips (coming soon)

Docs & the editor

Docs, task and issue descriptions, and comments all use the same block editor. Text in the editor is a little smaller than before, so more of a doc fits on screen.

Markdown

Every block has a Markdown form, so you can paste Markdown in, export it, and edit docs in other Markdown tools such as Obsidian. Properties at the top of a note (YAML frontmatter between --- lines) come in on import and go out on export: the title, aliases, tags, icon, cover and your shared properties by name. Blocks that plain Markdown has no syntax for are written in a form other tools show sensibly (for example a toggle appears as a collapsible section, and columns appear stacked).

BlockMarkdown
Callout> [!note] Title, then the body on lines starting with >
Folded callout> [!tip]- Title (folded) or > [!tip]+ Title (foldable, open)
Highlight==text==
Footnote[^1] in the text and [^1]: The note. on its own line
Toggle<details><summary>Title</summary> … </details>
Toggle heading<summary><h2>Title</h2></summary> inside the same <details> wrapper
ColumnsA <!-- termynl:columns --> line, a <!-- termynl:col --> line before each column, then <!-- /termynl:columns -->
Table| A | B | with a | --- | --- | line under the header
Code blockThree backticks and a language, such as ```ts
To-do list- [ ] open and - [x] done
EmojiThe emoji character itself (typing :shortcode: in the editor converts it)
Link to a heading[[Title#Heading]]
Link to a block[[Title#^blockid]]
Link with a label[[Title|label]], or [[Title#Heading|label]]
Embed a doc![[Title]] on its own line
Embed a section![[Title#Heading]]: the heading and what follows it, up to the next heading of the same or a higher level
Synced block![[Title#^blockid]]
Tag#tag after a space or at the start of a line
PropertiesYAML between --- lines at the top: title, aliases, tags, icon, cover and shared properties by name
Image![alt](files/name.png) or ![alt](https://...) on its own line
Image or video with caption<figure>, the image or video, <figcaption>Caption</figcaption>, then </figure>
File![[report.pdf]] on its own line (a doc with the same name wins over a file)
Video![[clip.mp4]] (.mp4 or .webm)
Web embedA <!-- termynl:embed --> line, then [Title](https://...) linking to one of the supported providers
Link previewA <!-- termynl:bookmark --> line, then [Title](https://...)
Page iconicon: 🚀 in the properties
Page covercover: files/cover.png or cover: gradient:3 (gradients 1–8) in the properties
Columns without a divider<!-- termynl:columns nodivider --> as the opening line

Things that don't survive a round trip are small: for example column alignment in tables, link titles, and which toggle was open in a closed copy; formatting in a caption; YAML comments and key order in properties; and a link preview's description, site name and image (only the title is kept). Other Markdown tools show a web embed or a link preview as a plain link.

screenshot: slash menu (coming soon)

@-mentions are structured links, never text matching. Each one creates a two-way connection, so every task, issue and doc shows what links to it and what it links to. The connections page draws the live graph of those links.

Shared properties

Add your own fields to items. A property can be defined for the whole workspace (workspace admins), for a team (team and workspace admins) or for a project (people who can edit the project). Each property picks which item types it applies to: tasks, issues, projects and docs. Every item of those types in that scope then has the field.

Members & guests

screenshot: Settings → Workspace → Members and seats, coming soon

Let members share with guests

A workspace admin can turn on Members can share with guests in Settings → Workspace → Members and seats → Sharing (off by default). With it on, anyone who can edit a task, issue or project can share it with an existing guest, and remove a guest from it. Inviting someone new, revoking invites and Stop sharing stay with team admins. MCP: set_join_policy {membersShareGuests: true}.

Settings → Workspace → Members and seats → Sharing

Share one task or issue

Share on the header of every task and issue (👥 People on a project) does the sharing. Type a name or email:

👥 People on a task

Invite & share as guest

Type an email that isn't in the workspace into Share (👥 People on a project), and it becomes a guest invite scoped to that one task, issue or project. Nothing else is granted. It's pending until accepted (one pending share invite per address at a time), and team admins can send it. Addresses on your workspace's verified domains can't be shared with as guests: a workspace admin invites them as members. A workspace admin can also invite guests straight into a team from Settings → Workspace → Members and seats, or ^K Invite people.

What guests see

Share a project

Team admins and workspace admins share a project the same way, through 👥 People on its header.

Invite people into teams

Account ids

Account ids are random, never derived from your email address. Existing workspaces move to the new ids in a short maintenance window; afterwards everyone signs in again once. Links, keys like PROD-12, shares and history are unaffected.

Sign-in & identity

These join rules can be combined, and admins set them in Members → Join policy.

Deleting your account

Notifications & email

Everything that happens to items you're on shows in your inbox in the app. Each kind of notification can also email you:

NotificationWho gets itEmail by default
Assigned to youThe new assigneeOn
Changes to your itemsAssignees, followers and the creator of an itemOff
MentionsThe person you @-mention in an item, a doc or a commentOn
Seat requestsOwners and adminsOn
Domain verificationOwners and adminsOn
Directory and group gateOwners and adminsOn
Settings → Profile → Email notifications
Settings → Workspace → Email delivery: provider, test, deliveries, defaults

Storage

On the hosted service, a workspace admin chooses where file attachments are stored: Google Drive, OneDrive, or an S3-compatible bucket. Your file bytes live in your own cloud. termynl keeps only what it needs to find and link them.

Workspace settings

Tyn, the assistant

Tyn is termynl's built-in assistant. It works through the same pipeline you do, with your permissions and never more. Whatever it changes shows up in activity as "via Tyn".

Ask Tyn about an item. Choose Ask Tyn from an item's ⋯ menu, from a doc's or a project's ⋯ menu, or press ^K t. Tyn starts with the item's key, title and id, so you don't have to explain which one you mean.

MCP & connected apps

Any MCP client, such as Claude Code or claude.ai, can connect to termynl at https://api.termynl.com/mcp. Everything you can do in the app has an MCP tool.

What Tyn and Claude can do

Tyn and Claude over MCP can do what you can do in termynl, as you, with your permissions and never more. The main areas:

Safety rules.

ToolDoes
share_projectShare a project with a guest, or an email not yet in the workspace (a pending guest invite scoped to that project). Team admins or workspace admins.
unshare_projectRemove one guest or pending invite, or stop sharing entirely. The project returns to its team once nobody's left. Team admins or workspace admins.
share_itemShare one task or issue the same way; the guest sees only that item, never its project or team. Team admins or workspace admins.
unshare_itemRemove one guest or pending invite from a task or issue, or stop sharing entirely; it returns under its parent task or project (otherwise its team). Team admins or workspace admins.
list_sharesWho has a task, issue or project beyond its team: its guests and pending guest invites. Team admins or workspace admins, and any member when membersShareGuests is on. can says whether you may invite new guests and manage (revoke invites / stop sharing).
link_team_groupLink a team to one SCIM group from your identity provider. Workspace admins only.
unlink_team_groupUnlink a team's SCIM group: members it added leave the team; hand-added people stay. Workspace admins only.
invite_memberInvite someone by email, with teams to pick which teams they join on acceptance.
get_join_policyGet the workspace's join policy: autoAddSeats, domainJoin, membersShareGuests (whether plain members may share tasks, issues and projects they can edit with existing guests, never invite), and domains. Workspace admins only.
set_join_policySet the join policy, including membersShareGuests (default off; invites stay with team admins). scimAutoSeats: SCIM provisioning buys a seat when none is free (within the monthly limit) and a SCIM deactivation drops one; turning it on needs an owner in the browser. Workspace admins only.
remove_member · deactivate_memberseat: keep (default) keeps the paid seat for someone else; drop lowers paid seats by one (never below what active members use; credited on the next invoice).
set_prefsIncludes emailPaused (pauses every unlocked notification email), notifyEmail (per type) and digest (off / daily: unlocked item notifications batched into one daily email).
get_my_notificationsWhich notifications email you: per type, whether it's on, whether your workspace admin locked it, and the workspace default; the locks your teams set; whether you paused email and whether you get a daily digest.
get_notify_policyThe workspace's notification email policy: per type the default (email on/off) and whether it's locked for everyone. Workspace admins only.
set_notify_policySet notification email defaults; locked = members can't change it. Sign-in, invite and security email is always sent. Workspace admins only; audited.
get_team_notify_policyA team's notification email defaults for its items (assigned, activity, mentioned), the types the workspace locked, and whether you may change them.
set_team_notify_policySet a team's notification email defaults. A type the workspace locked can't be set here. Team admins or workspace admins; audited.
get_mail_statusEmail delivery for this workspace: the provider, the sender, whether delivery webhooks are on, and the last 50 messages it sent with their status. Never shows content. Workspace admins only.
send_test_emailSend a test message to your own primary email (5 per 10 minutes). It never sends to any other address. Workspace admins only.
get_account_deletionsMembers whose account deletion is scheduled, when it runs, who receives their items, and ownDriveFiles (files in their own Google Drive / OneDrive that stop opening once they're deleted). Workspace admins only.
set_account_transferChoose who receives a leaving member's items (an active member, not a guest); transferTo: null = the workspace owner. Workspace admins only; audited.
export_workspaceStart an export. Members' personal spaces stay out unless an owner sets includePersonal: true; an admin who isn't an owner exports only the spaces they can read. The person who started it downloads the file in the browser within 7 days. Workspace admins only.
get_workspace_exportsThe workspace's last 5 exports: status, size and expiry.
get_workspace_deletionWhether the workspace is scheduled for deletion, and when. Workspace admins only.
cancel_workspace_deletionCancel a scheduled workspace deletion. Nothing is deleted and the subscription renews again. Owners only.
request_workspace_deletionDeleting the workspace needs an owner in the browser (recent sign-in and a typed confirmation). Returns where to do it; changes nothing.
set_seatsChanging paid seats spends or refunds money, so an owner does it in the browser. Returns where to do it; changes nothing.
claude mcp add --transport http termynl https://api.termynl.com/mcp
screenshot: consent screen and Connected apps (coming soon)

Models

Admins pick which models Tyn can use.

TierModels
IncludedClaude Haiku 4.5
MeteredClaude Sonnet 5.5 · Claude Opus 5.5
Bring your own keyClaude Fable 5.1 · GPT-6 Luna · GPT-6 Sol · GPT-6 Astra

Metered usage is shown to admins as a percentage of the workspace allowance. Bring-your-own-key models run only on your own Anthropic or OpenAI key, which you add in Settings → Workspace → AI and models.

Each seat includes a monthly AI budget. Metered usage counts against it at the model provider's list price plus 20%. Bring-your-own-key usage is billed by your provider, not by termynl. Buying extra usage beyond the allowance is coming.

Import from Obsidian or Notion

Bring an existing knowledge base in as docs, with links turned into live backlinks. Import currently runs through the API; an import button in the app is coming.

Workspace data

In Settings → Workspace → Data and export:

Settings → Workspace → Data and export

Billing

$35 per seat / month, billed on active members, after a 14-day trial. A new member's seat is added to your next invoice, prorated. Manage payment and cancel in the self-service portal. Owners change paid seats in Settings → Workspace → Data and export (see Workspace data). A self-hosted build is planned (see below).

Self-hosting

Coming soon. A single-tenant build that runs on your own infrastructure is planned, with an open-source release to follow once the license is chosen. Self-hosted, your data stays on your box by default. If you connect outside services, such as a model provider or cloud storage, they receive the data they need to work. It will deploy with Docker, with an updater sidecar to keep it current, and add two options the hosted service doesn't have:

Multi-tenant orchestration and billing are part of the proprietary hosted service, not the self-host build.

Email. Set TERMYNL_MAIL_PROVIDER=smtp (with SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS) or resend (with RESEND_API_KEY), and TERMYNL_MAIL_FROM. For delivery tracking with Resend, add a webhook to https://<your host>/webhooks/resend (events: sent, delivered, delivery delayed, bounced, complained, failed) and set its signing secret as RESEND_WEBHOOK_SECRET. A provider you name without its credentials stops the server from starting. TERMYNL_NOTIFY_MAIL=off pauses all notification email.

First owner. On a fresh install, only the email set in TERMYNL_BOOTSTRAP_EMAIL can claim the first owner account. If it is unset, nobody can claim it, so set it before the first boot.

Deletions and retention jobs run daily only with TERMYNL_LEGAL_JOBS=on (the default in the compose file; unset means off); off stops them all. The operator can put a pending account or workspace deletion on legal hold.

Retention. The server trims its own logs daily (mail log 90 days, ended sessions 30 days); container logs are capped by size; database backups are yours to keep (we keep ours 1 year). Exports go to TERMYNL_EXPORT_DIR (size cap TERMYNL_EXPORT_MAX_MB, default 5120).

More self-hosting detail (compose files, updater, backups) lands here as the open-core build is finalized.

Known limits

Version

termynl versions read 0.MINOR.PATCH. This page describes 0.25.1 (2026-10-18). Admins can see the running version under Settings → Workspace → About.

Coming later: email, calendar, chat and calls

Email, calendar, contacts, chat and calls are turned off while termynl focuses on project management. Nobody can turn them on (not a workspace admin, the API, MCP or an agent), and their tools aren't offered. They'll return in a later release.

The data the earlier email, calendar and contacts features had stored on our hosted service was deleted on 2026-10-07. Your Google and Microsoft connections stay: they're how you sign in, store files and sync your profile, and they'll bring email, calendar and chat back when those return.

Questions? [email protected] · termynl.com