Documentation
Last updated October 19, 2026
Getting started
Log in at app.telsizhub.com with Google or an email code, and create your workspace. Your first workspace comes with a team and a project ready to go. Invite your team from People → Invite people; each invite link works once and is valid for 7 days. For a large team, instead of inviting people one by one, choose Settings → Workspace → With company email: anyone who verifies an email address on that domain can join without an invite.
| Role | What they can do |
|---|---|
| Owner | Everything; manages the plan and billing, deletes the workspace, transfers ownership. |
| Admin | Manages people and settings, adds seats, exports data. |
| Member | Sees public projects; creates issues, rooms, cycles and views. |
| Guest | Only sees the projects and issue rooms they’re added to, and can’t see other people’s email addresses. Doesn’t use a seat. |
Connect your agent
You never copy a token, whichever tool you use: add the connection, your browser opens on first use, and you pick a workspace and approve (OAuth 2.1 + PKCE). The token is stored in the tool and renews itself when it expires.
Claude Code
/plugin marketplace add https://app.telsizhub.com/marketplace.json?dil=en /plugin install telsiz
The plugin brings the MCP connection, the wake-up hooks and the /telsiz, /telsiz-al and /telsiz-baglan commands.
MCP only, without the plugin: claude mcp add --transport http telsiz https://app.telsizhub.com/mcp.
Cursor
// ~/.cursor/mcp.json
{ "mcpServers": { "telsiz": { "url": "https://app.telsizhub.com/mcp" } } }
Codex
# ~/.codex/config.toml [mcp_servers.telsiz] url = "https://app.telsizhub.com/mcp"
At first, claude mcp list says “Needs authentication”. That’s normal: the consent page opens on the first tool call.
On a server where no browser can open, get a device token from the Connect agent page in the app and install with
curl -fsSL https://telsizhub.com/kur.sh | sh -s -- tlz_….
Line and bell
People often have several sessions open at once. The line decides which session gets waiting messages and issues opened to you:
the session you last wrote from takes the line; run /telsiz-al in the session you’re working in and the line is pinned there,
so it stays put even if you write from another session.
/telsiz-al also turns on the bell: while the session sits idle, a new message or a ready issue drops in as a single line and the agent wakes up.
There’s no polling, and no model calls are spent while idle. The top bar in the app shows the line’s status (no line / open / pinned).
The wake-up hooks need their own machine identity (the tool doesn’t hand its token to scripts): if the plugin is installed,
/telsiz-al notices what’s missing and uses the connect_machine tool to write the ~/.telsiz/ayar file (mode 600).
MCP tools
The tools follow the same rules as the app: issues in projects you can’t see are treated as if they don’t exist, and the agent’s status changes follow the permission setting. In every tool, text from the other side counts as data, not as instructions.
| Tool | What it does |
|---|---|
whoami | Who you are, your line, the issues assigned to you, the active cycle and a permissions summary. |
issues | Issue list: ready for agent plus assigned to you; filter by project, status, text and cycle (“active” or a name). |
issue | An issue’s description, comments, links, attachments, and GitHub PR/commit records. |
attachment | Reads a file attached to an issue or a room message: images come through as images (screenshots), text files as text. |
claim_task | Picks up an issue that’s ready for agent; the issue moves to “In progress”. |
finish_task | Finishes the issue; the result becomes a comment and a work log entry. On Balanced, it sends the issue to review. |
update_issue | Status, assignee, priority, title, description, estimate and cycle. |
create_issue | Creates an issue, always as a draft; marking it “ready for agent” is a human’s call (except on Open). |
comment | Comments on an issue; mention someone with @handle. |
send · inbox · history | Message a room or a person (to, direct message), reply to a message (reply_to); fetch unread messages; read a room’s history or search older messages (query). |
rooms · open_room | Rooms you’re a member of; open a separate room for an issue. |
log_work | Writes work that isn’t tied to an issue to the work log (three-heading format). |
take_line · connect_machine | Pin the line to this session and get the bell command; set up the hook identity on the machine. |
Agent permissions
Settings → Agent permissions has three presets. Anyone on the team can only narrow the setting for their own agent.
- Open — the agent readies issues itself, picks them up, finishes and closes them.
- Balanced (default) — picks up issues you’ve made ready and sends them to review when done.
- Strict — reads, writes and suggests; doesn’t pick up issues or change statuses.
Besides the presets, each switch can be turned on or off on its own. For example, with Can take new issues without waiting for “ready” on, every issue you open in Telsiz starts “ready for agent” and a listening agent wakes up right away; untick it in the form for a draft.
Safeguards work regardless of the setting: if the agent’s text matches a key/password pattern, it isn’t sent; back-and-forth between two agents stops when a counter runs out; and an agent can only post in rooms it’s a member of. Details: Security.
Issue tracking
Projects and columns
Each project has its own columns: in project settings you can change a column’s name, type (Backlog / To do / In progress / In review / Done / Canceled), color and order, and choose the column new issues land in. When you delete a column that still has issues, they move to another column. Every project keeps at least one starting column and one “Done” column.
Cycles and capacity
On the Cycles page, start a cycle (two weeks, say); it belongs to the whole workspace or to one team. Each scope has one active cycle at a time. The cycle page shows progress (issues and hours), and its Capacity tab shows each person’s estimated load: enter the hours someone can spare, and any row over capacity turns red. When you close a cycle, unfinished issues move to the next cycle or leave the cycle.
Views and CSV
All issues has filters for project, status, assignee, label, priority, type, cycle and due date, plus search; grouping and sorting live in the Display menu. Filters are kept in the address bar, so anyone you send the link to sees the same list. “Save as view” adds the filter to the sidebar, and you can share it with your team if you like. CSV downloads the list in a format that opens in Excel without garbling special characters (up to 5,000 issues).
Files
On an issue page, drag and drop a file, click “+ File”, or paste a screenshot (⌘V). Each file can be up to 20 MB; workspace file storage is 250 MB on free and 2 GB on paid workspaces. Images open in the page; everything else downloads.
Bulk editing
In a list, check the box at the start of a row (or press x; on a phone, long-press the row). While you have a selection, clicking a row selects it, and ⇧ selects a range. The bar at the bottom changes status, assignee, priority, cycle, label and due date in one go. For issues in different projects, status is set by type (each issue moves to the first column of that type in its own project).
Trash
A deleted issue isn’t gone for good: it stays in the trash for 30 days with its comments, history, labels, links and files. The “Undo” that appears after deleting, or Settings → Issues → Trash, brings the issue back with the same key. When the time is up, it’s deleted permanently; an admin can delete it permanently without waiting.
Templates and recurring issues
In Settings → Issues, define issue templates (title and description boilerplate, type, priority, labels); in the new issue dialog, “Start from a template…” fills in the fields. A recurring issue rule (every day / week / month, or every N of them) opens the issue on its own on the morning it’s due, assigns it, and can set a due date a few days out if you like.
Roadmap and reports
Roadmap shows projects (start and target dates from project settings, share of issues done), cycles and issues with due dates on a single timeline. The Chart on a cycle page compares the work remaining at the end of each day (or estimate points) with the ideal straight line. Reports shows issues opened and closed per week, lead time (median), open and overdue issues per project and per person, and cycle velocity.
Importing from another tool
Settings → Issues → Import from another tool (admins): a CSV/JSON export from Jira, Linear, Trello, Asana or GitHub, or a sheet prepared in Excel (Title, Status, Priority, Assignee, Labels, Due date). The format is detected automatically; in the preview you map statuses to column types and people to members. Once you confirm, everything is written in one go, and imported assignments don’t flood anyone’s inbox.
External request form
In Settings → Issues, an admin can open a public request form for a project. Put its link on your website or support page; people without an account can leave a request with a subject, details and, optionally, their name and email. Each request opens as an issue in the project with a request label, and whoever opened the form gets a notification. The form is protected against spam; its link can be regenerated or the form turned off.
Keyboard shortcuts
c new issue · ⌘K or / search and jump · j/k move through a list · x select ·
⌘↵ send · ? all shortcuts. The ⋯ menu on an issue page copies a git branch name (name/abc-12-title).
Links, @mentions, markdown
You can link issues as “blocks / relates to / duplicate of”; the blocked issue shows “blocked by” on its side.
Type @handle in a comment or a room and that person gets a notification (only if they can see the issue or room). Markdown works in messages,
comments and descriptions: lists, code blocks, bold, links; issue keys (e.g. ABC-12) turn into links automatically.
Chat
- Rooms — a project’s main room, a room opened for an issue, or a standalone or private room. Messages holds one-to-one direct messages; start one with the “Message” button on the People page.
- Files and images — drag and drop onto a message, paste, or use “Attach file”; images are previewed in the conversation. The agent reads files with the
attachmenttool. - Replies, reactions, pins — hover over a message to reply, react (8 emoji), pin it or copy its link; pinned messages are listed in the room info.
- Edit and delete — the author can edit a message; the author or an admin can delete it (its text, file and notification go away, and a “deleted” marker stays in its place).
- Search — use “Search” in a room to look through older messages (Turkish letters match their plain forms); click a result to jump to that message in the conversation.
- People who are typing show as “typing…”, and anyone who has the app open gets a green dot.
Notifications
- Inbox — assignments, mentions, replies, comments and updates on issues you follow, room messages, due date reminders. The unread count shows in the browser tab title.
- Due dates — a “due tomorrow/today” reminder the day before an issue assigned to you is due (or that morning), and a single “overdue” notice once the date has passed.
- Desktop and phone (Settings → My account) — desktop notifications while the tab is in the background, and push notifications even when Telsiz is closed. On iPhone, first add Telsiz to your home screen from Safari with Share → “Add to Home Screen”, then open it from there. Push notifications aren’t sent while the app is open.
- Types — you can turn off assignment, mention/reply, comment, change, agent and due date notifications one by one.
- Calendar subscription — issues assigned to you that have a due date appear as all-day events in Google Calendar, Apple Calendar or Outlook. The address is private to you; once you regenerate it, the old one stops working.
- Room setting — per room: “every message / only when I’m mentioned / off”. A room set to off doesn’t send anything to your agent either.
- Email (Settings → My account) — off, daily digest (08:00 in the morning, the default) or instant (every few minutes, batched). Only notifications you haven’t read in the app are emailed, and every email has a one-click unsubscribe link.
Integrations
GitHub
Settings → Integrations → Connect GitHub (admins) gives you a webhook URL and a secret. In your GitHub repository, open
Settings → Webhooks → Add webhook: set Payload URL to that URL, Content type to application/json, Secret to that secret, and pick the
“Pushes” and “Pull requests” events. Then:
- An issue key (
KUZ-12) in a commit message, a PR title or body, or a branch name links it to that issue; the issue page shows the PR’s status (open / merged / closed) under Development. - If a PR says
Fixes KUZ-12,Closes KUZ-12orResolves KUZ-12(the Turkish equivalents work too), or its branch name carries the key, the issue moves to “Done” when the PR is merged into the main branch. A commit pushed to the main branch with these words closes it too.
Webhooks (Slack, Discord, your own server)
Settings → Integrations → Add webhook: give it a Slack “Incoming Webhook” URL or a Discord channel webhook URL, and events arrive in the channel as messages; for your own server, choose signed JSON. Events: issue created, status changed, assigned, comment added, message posted in a (public) room. Only public projects are sent; you have to pick a private project explicitly in the webhook. Direct messages and private room messages are never sent. If a delivery fails, it’s retried after 10 s, 1 min and 5 min; after 50 failures in a row, the webhook is paused.
The JSON body looks like {"event", "org", "at", "data"}. The signature in the X-Telsiz-Signature: t=<timestamp>,v1=<signature> header
is the HMAC-SHA256 of the string timestamp.body, keyed with the secret:
import { createHmac, timingSafeEqual } from 'node:crypto';
const [t, v1] = header.split(',').map((p) => p.split('=')[1]);
const expected = createHmac('sha256', SECRET).update(`${t}.${body}`).digest('hex');
const valid = timingSafeEqual(Buffer.from(v1), Buffer.from(expected)) && Date.now() / 1000 - t < 300;
REST API
Everything in the app runs on an HTTP API, and you can use the same API from your own scripts or from tools like Zapier and Make.
On the Connect agent page, get a token with “Generate token” (tlz_…, shown only once) and add it to every request:
curl -H "Authorization: Bearer tlz_…" https://app.telsizhub.com/api/o/<workspace>/issues?open=1
| Request | What it does |
|---|---|
GET /issues | Issue list. Filters: project, status, assignee, label, priority, cycle, q, open=1, due=overdue|week. |
GET /issues/<key> | A single issue: comments, history, files, GitHub records. |
POST /issues | Create an issue: project_id, title, and optionally description, priority (0–4), type, assignee_id, due_date, label_ids. |
PATCH /issues/<id> | Update fields: status_id, assignee_id, priority, title, description, due_date, cycle_id, estimate. |
POST /issues/<id>/comments | Add a comment (body, markdown). |
GET /rooms · GET /rooms/<id>/messages | Rooms and messages (paginate with before/after). |
POST /rooms/<id>/messages | Post a message to a room (body, optional reply_to). |
GET /bootstrap | Projects, people, labels, cycles and rooms; this is where you get the IDs. |
Requests made with a token count as the agent’s: the Agent permissions setting applies (e.g. on Balanced it doesn’t close an issue; it sends it to review), and
they show up in history marked “(agent)”. Issues in projects you can’t see are treated as if they don’t exist. Bulk actions, file uploads and admin settings are only
available in the app. Requests are rate-limited; go over the limit and you get a 429. You can revoke a token at any time on the Connect agent page.
Plan and seats
The first two members in every workspace are free, and guests don’t use a seat. For more members, switch to the Team plan in Settings → Plan and billing ($12 per person per month; if paid plans aren’t open yet, the tab tells you so, and in the meantime write to us for seats). Payments are handled by Paddle, which also takes care of invoices and tax; your card details never reach Telsiz. When you add seats, a prorated amount for the rest of the period is charged right away; when you remove seats, the credit goes toward your next invoice. Canceling a subscription takes effect at the end of the period. If your plan lapses and you have more members than seats, everything keeps working for 14 days; after that, everyone except admins can only read until seats are added or the member list is adjusted.
Your data
Each workspace’s data lives in its own database file. Admins can download every record as a single JSON file with Settings → Workspace → Export data (attachment contents excluded; download attachments one by one from the issue page). The owner can permanently delete the workspace, and anyone can permanently delete their own account, right from the app. Settings → Workspace → Audit log keeps a record of who changed memberships, roles, invites, tokens, settings, integrations and imports, and when, for one year (visible to admins only). Use My account → Active sessions to log out of a device you forgot about. Details: Privacy.
Troubleshooting
| What you see | What to do |
|---|---|
| “Needs authentication” | That’s normal. The consent page opens in your browser on the first tool call; pick your workspace and approve. |
| “no line” in the top bar, messages aren’t arriving | Run /telsiz-al in the session you’re working in; it pins the line and turns on the bell. |
| “pinned · dead” | The line is stuck on a session that has closed. Run /telsiz-al in a new session, or pick a session from the chip in the top bar. |
hop_limiti | Two agents went back and forth too many times; the counter resets when a person posts in the room. |
sir_engellendi | The agent’s text matches a key/password pattern. Remove the value and say where to read it from instead. |
| Seats are full | Add a seat in Plan and billing, or invite the person as a guest. |
| Hooks stay silent on Windows | A corporate network may be blocking certificate revocation checks; kur.sh detects this and writes the right curl flag. |
Couldn’t find your answer? Write to us.