FlowState by DialectForge
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FLOWSTATE_DB | No | The database file path. Defaults to platform-specific locations (Windows: %LOCALAPPDATA%\flowstate\flowstate.db, macOS: ~/Library/Application Support/flowstate/flowstate.db, Linux: ~/.local/share/flowstate/flowstate.db). | |
| FLOWSTATE_MODEL | No | Model name for desktop apps. Used when the app doesn't supply it via the X-FlowState-Model header or tool argument. | |
| FLOWSTATE_TOOLS | No | Set to 'core' to list only the 9 core tools to save context. The other tools still work if called. | |
| FLOWSTATE_WORKSPACE | No | The machine or workspace name. Defaults to this computer's name. | |
| FLOWSTATE_MEANING_MODEL | No | The model for meaning-based search. Default is all-MiniLM-L6-v2. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| start_hereA | CALL THIS FIRST in every conversation about a project. Returns a brief (max 4,000 characters) with the project's hard rules (never break them), any handoff note from the last AI, open todos, open problems, recent changes, recent decisions and key learnings, and opens a FlowState session automatically. Pass project="" (or id). size=quick (short) or deep (longer, up to 12,000) if needed. Unknown project? Call with no arguments, or with folder="", to get the list of projects. |
| log_workA | Record work as you go (write; project required). kind: decision (a choice made and why), change (something changed), problem (bug or blocker), learning (lesson or gotcha), todo (follow-up). summary: one short line. details: optional. component: optional component name (changes and problems default to 'General'). suggested=true: you are not sure the user wants this recorded, so it goes to the review queue instead of being saved. priority (todos; severity for problems): critical, urgent, normal (default), low. source: user_stated (the user said it), ai_inferred (your conclusion) or from_code (read in code or commits). Never include secrets (writes containing keys, tokens or passwords are refused). |
| review_listA | List items waiting in the review queue (auto-captured session summaries and records logged with suggested=true). Read-only. Show them to the user; approving or rejecting is the user's decision. |
| review_approveA | Approve a review item so it becomes a normal FlowState record. To edit then approve, pass the corrected summary/details (or priority/category/component). ONLY call this when the user has explicitly told you, in this chat, to approve or reject this specific item. Never decide on your own initiative, and never approve your own suggestions unless the user explicitly says so. user_request must quote the user's words. Write: requires project="". |
| review_rejectA | Reject a review item. It is kept, marked rejected, with the user's reason (nothing is deleted). ONLY call this when the user has explicitly told you, in this chat, to approve or reject this specific item. Never decide on your own initiative, and never approve your own suggestions unless the user explicitly says so. user_request must quote the user's words. Write: requires project="". |
| linkA | Link things across projects (write for add/remove; project required). Use when projects share something, e.g. several apps use one protocol: link(action="add", project="App A", link_type="uses", target_project="Owner", target_component="Wire Protocol"). Source is the project, or component="", or item_type+item_id (decision, change, learning, problem, todo). Target: target_project (+ target_component), target_type+target_id, or url (a GitHub/Linear link to keep on a record). link_type: uses, depends_on, part_of, same_as (also supersedes, subtask_of, blocks). Changes logged on a shared component alert every project linked to it (an update todo + a note in its brief). FlowState only alerts; it does not change other apps' code. remove: link_id (or the add fields). list: links of the project or of one item. |
| review_modeA | Read or change the review mode: which new records wait in the review queue for the user's OK. Modes: off (nothing waits), auto_only (default: only auto-captured items), types (also the listed kinds), everything. action=get is read-only. action=set ONLY when the user has explicitly asked you, in this chat, to change the review mode; never change it on your own initiative or to get your writes saved. user_request must quote the user's words; every change is logged with them. project=... sets an override for one project (clear=true removes it); no project = the whole install. |
| historyA | Edit history of FlowState records, and undo. action=list (read): recent edits and deletes in a project, or of one record (record_type + record_id), with old and new values. action=undo (write; project required): put back the last change to that record (a deleted record comes back); recorded too, so undoing again redoes it. Refused if the record changed again since. New records are not undone here (set them done/cancelled). action=who (read): who did what, newest first, across projects or one project: app, model, machine and how the app was identified, for edits, review decisions, links, handoffs, rules and new records; filters by_app, by_model, by_machine, since, until (local time, e.g. 2026-10-17 or 2026-10-17 14:30), page. |
| cleanup_suggestA | Find likely duplicates, stale todos and records filed in the wrong project, and put them in the review queue as suggestions (write; project required; additive: nothing is moved, closed or deleted). The user approves or rejects each one; approving applies only that suggestion and it can be undone with history. Suggestions the user rejected are not repeated. kinds: any of duplicate, stale, misfiled (default all). |
| import_memoryA | Bring memories or notes into a project's REVIEW QUEUE (write; project required; nothing is saved as a record until the user approves). format=memory (default): a Claude or ChatGPT memory export or copy, as text/markdown (one per line) or JSON. format=flowstate_markdown: a file made by |
| rulesA | A project's HARD RULES: things never to do in it (e.g. "Never push to main"). They are shown first in every start_here brief, in full. action=list (read). action=add (write; project required): rule = one short sentence (max 300 characters; 2,000 per project); add one when the user states a rule. action=remove (write): rule_id, ONLY when the user asks you in this chat; user_request must quote their words. |
| handoffA | Handoff notes between AIs. Stopping mid-task (out of time, context or tokens, or the user ends the chat)? action=leave (write; project required) with where_i_was (what was being done and its state) and next_step. The next AI sees it first in start_here. When you continue from a note, action=pickup with handoff_id so it stops showing. action=list (read). |
| verifyA | Keep facts current. action=stale (read): facts (paths, ports, hosts, URLs, config) in a project not checked for 60+ days; check them. action=mark (write): you confirmed a record still holds (record_type + record_id; optional source). action=source (write): set where a record came from: user_stated, ai_inferred or from_code. If a fact changed, log the change instead. |
| askA | Ask FlowState a question in plain words (read-only), e.g. "which port does the LAN server use?". Returns a short answer quoted from the best-matching records, with their ids (type #id), plus matching hard rules and handoff notes. Local only (meaning search if a local model is installed, keywords otherwise). If nothing matches it says so; it never guesses. project optional (default: all projects). |
| list_projectsB | List all projects with their status. |
| create_projectC | Create a new project. |
| update_projectB | Update project details. Write: requires project="" (or project_id). |
| get_contextB | Get project context. Use lean=True (default) for minimal tokens at session start. Use lean=False for full details when needed. |
| create_componentA | Create a component within a project. Write: requires project="" (or project_id). |
| list_componentsC | List components in a project. |
| update_componentB | Update a component. Write: requires project="" (or project_id). |
| log_learningB | Capture an insight or learning. This is your memory - use it! Write: requires project="" (or project_id). |
| get_learningsC | Get learnings. Use compact=True to save tokens. |
| log_changeB | Log a change to a component. Write: requires project="" (or project_id). |
| get_recent_changesC | Get recent changes. Use compact=True to save tokens. |
| searchA | Search todos, decisions, changes, learnings, problems and solutions. Matches words (and word endings); also by meaning when a local model is installed (the reply's mode says which was used). |
| problemC | Manage problems. Actions: log, list, solve, get_tree Write: requires project="" (or project_id). |
| attemptC | Manage solution attempts. Actions: log, outcome Write: requires project="" (or project_id). |
| todoA | Manage todos. Actions: add, update, list, next (what to do next: open, unblocked, highest priority), block / unblock (todo_id waits on blocked_by todos or blocked_by_problem). add takes parent_todo_id for a subtask. Priority: critical, urgent, normal (default), low (older names high and medium also work). list filters by priority or min_priority and sorts by priority (default), due or newest. Write: requires project="" (or project_id). |
| sessionC | Manage sessions. Actions: start, end, current, log_conversation, list_conversations, list_sessions Write: requires project="" (or project_id). |
| fileB | Manage file attachments. Actions: attach, list, remove, search Write: requires project="" (or project_id). |
| gitC | Git operations. Actions: init, status, sync, set_remote, clone, history |
| variableB | Manage project variables (servers, credentials, config). Actions: create, list, update, delete Write: requires project="" (or project_id). |
| methodB | Manage project methods (auth flows, deployment steps, patterns). Actions: create, list, update, delete Write: requires project="" (or project_id). |
| self_improveC | Manage Claude's learned skills and session state. Actions: learn_skill, get_skills, confirm_skill, save_state, get_state, log_metric, get_metrics Write: requires project="" (or project_id). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| flowstate-start | Load FlowState project memory and work with it for this conversation. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 35 tools
Several tools overlap meaningfully: log_work(kind=change/learning/problem/todo) duplicates log_change, log_learning, problem, and todo; ask/search/get_learnings/get_recent_changes all retrieve records; and start_here vs get_context both return session context. Descriptions do help an agent pick correctly, but boundaries are genuinely blurred in the write path.
Two clear conventions coexist: verb_noun tools (create_project, log_learning, review_approve, get_recent_changes) and bare resource nouns that dispatch via an action parameter (todo, session, file, git, variable, method, rules, problem). Each family is internally predictable, but the split is roughly half-and-half rather than a minor deviation.
35 tools is above the 25+ heavy threshold for a project-memory server. While many consolidate multiple operations behind an action parameter, the surface is still large and the count alone makes selection cost high.
Coverage is broad and coherent: projects, components, learnings, changes, problems, attempts, todos, sessions, files, git, variables, methods, links, review workflow, rules, history/undo, import, and cleanup. The main gap is explicit deletion for projects, components, learnings, and changes (partially mitigated by history undo), which agents can work around.