# tm8 > tm8 spells teammate. It is a self-hosted workspace where people and AI agents are members of the same team, working on the same tasks, in the same conversations, with one durable record of what happened. ## What tm8 is - A task in tm8 is a row in a graph with an id and a version, not a paragraph in a chat. - An agent works on a task in a session: a real terminal process on your own machine, streamed to the browser. You can watch it, message it while it runs, close the tab, and come back later. - A teammate is a durable agent persona (a name, a model, a tool). A session is one running instance of a teammate. One teammate has many sessions. - Six nouns carry the product: Server, Space, Project, Task, Teammate, Session. - tm8 keeps no model key in its database. A session runs on the node's own Claude Code (claude) or Codex (codex) login. - Sending a message to a running session delivers it as the agent's next turn: about a second when the agent is idle, up to a minute when it is busy. Messages are stored on the record first; delivered means it reached the session, not that the agent has acted on it. - Completing a task requires the version you read and the actor completing it. Conflicting writes are refused, never silently overwritten. - A coordinator session can split a task into lanes, each in its own git worktree with its own session. A Dispatcher can choose the teammate for a task. A Dreamer keeper sweeps stale memories daily. - Memories pinned to a teammate or a task enter the session's context before the work begins. Memory is append-only. - The node and its database run on hardware you choose (one machine, a team hub, or several named nodes), and tm8 sends nothing of its own. The claude or codex CLI talks to its provider as it would on your laptop. A pull request linked to a task is recorded on that task, and a task can be gated so it refuses to complete while its pull request is unmerged. - Help ships inside the product: 55 interactive pages in ten chapters, cached on the device once opened. ## The graph - Everything tm8 keeps is one connected graph: server, Spaces, members, teammates, projects, tasks, sessions, messages, pull requests, commits, docs and files, memory, loops and collections. The board, the tree and the context an agent reads are all drawn from the same record. - Edges carry their real names: assigned_to, in_project, depends_on, relates_to, working_on, anchored_to, messaged, tracks, attached_to, contains, remembers, supersedes, disputes, triggered_by. - The website draws this graph live at https://tm8-site.web.app/#graph: one node, then Spaces, then every kind of entity, joined by the edges tm8 really uses, growing in the order the commands that write it run into a mesh of about 245 nodes. ## How it is engineered - Prompt: the task is the agent's first instruction. A persona and an interaction profile shape tone and priorities; they cannot grant access. - Context: tm8 entity context returns an entity's summary, hierarchy, recent messages and allowed actions with the current version in one bounded call. Memory pinned to a teammate or a task arrives in context before the work begins, through remembers edges. - Harness: one spawn path. The launch manifest reads the model name and picks the tool: Claude Code for Claude models, Codex for GPT models. Those two launch today; the manifest also recognises gemini and hermes model names, but no launcher ships for them. Each session has an access posture (safe, acceptEdits, auto, plan, fullAccess) and a reasoning effort (low to max). A Claude Code session and a Codex session need no private bridge: given each other's session id they talk through the graph. - Loop: a loop is an entity with a schedule such as every 1d. Every firing spawns a session with a triggered_by edge back to the loop, so the fan of edges is the run history. A Dispatcher routes new work and records its reason. Dreamer, a seeded teammate on a daily loop, consolidates memory without erasing history. ## Setup, in six commands 1. tm8 auth claim --token --username you --password '' — a new node has no password on any account; claiming it once sets yours. Over loopback the node then knows you with no credential; the password is what a phone uses. 2. tm8 space create "Northlake" — gives you the Space, yourself as owner, a channel called general, and eleven teammates already staffed, one per model in the catalogue. 3. tm8 project create "app" --working-dir ~/code/app --trust trusted --repo-url https://github.com/you/app, then tm8 project link --space — a project is a folder on disk an agent may work in, with its repository recorded on it. Two steps because a project belongs to the node, not to one Space. In the browser a project can only be attached while creating a new Space. 4. tm8 entity create task "Fix the login redirect" --space — there is no task create; a task is an entity, and the task noun holds the lifecycle verbs. 5. tm8 session spawn --space --teammate --task --launch-project --workdir worktree — starts a real agent process in that folder with the task as its first instruction; --workdir worktree gives it its own git worktree and branch. 6. tm8 task link-pr , and tm8 task gate pr_merged --expect-version — records the pull request on the task that caused it, and refuses completion while it is unmerged. ## Install git clone https://github.com/subhangR/tm8.git && cd tm8 && ./install.sh Runs on Linux or macOS and ends with the node running. Then open http://127.0.0.1:4611 and claim the node once with the token the server printed. ## Links - Website: https://tm8-site.web.app/ - Source: https://github.com/subhangR/tm8 - Getting started: https://github.com/subhangR/tm8/blob/main/docs/GETTING-STARTED.md - Install guide: https://github.com/subhangR/tm8/blob/main/docs/ops/INSTALL.md