throughLine keeps a long problem in focus in LM Studio, across many turns, context compactions and chats. It keeps the state of a project (goal, constraints, plan, findings with sources, decisions and open questions) in a ledger on disk, outside the conversation, and shows the model a compact view of it on every message.
It is meant to stay enabled everywhere. A chat with no project gets nothing added to its messages and no extra tools.
This is version 2.1 at milestone M3 of the design in throughLine-design-v2.md, with every planned feature in place. M4 is the evaluation.
%USERPROFILE%\.lmstudio\throughline\projects\<name>\. ledger.json holds the state, ledger.md is a readable copy you can also edit, events.jsonl logs every change, and versions\ keeps the 50 most recent earlier states./tl off stops it; if the project is still empty, it is removed. /tl start starts one by hand.ledger_view.ledger.md in any text editor, including ones that escape Markdown when saving, and the change is picked up on your next message (or first, if that message is a command), logged as yours, and shown to the model. Only what you changed is applied: if the model recorded something while you had the file open, its work is kept. The file's second line, an HTML comment with a version number, is how throughLine knows which version your copy started from; Markdown viewers hide it. If the file cannot be read back, your version is kept beside it as ledger.edit-not-applied-<time>.md and the ledger is left as it was.recall tool that returns the original wording of earlier messages, with turn numbers, so an exact figure or quote can be found after it has been summarized away. This works in any chat, with or without a project, and adds nothing to your messages. Messages still in the model's view word for word are left out of results. Below the threshold nothing is copied.Type a command as the whole message.
| Command | Effect |
|---|---|
/tl start [goal] | Start a project in this chat. Without a goal, your first message in the chat is used, word for word. |
/tl open <name> | Continue an existing project in this chat. The start of the name is enough if it is unique. |
/tl list | List projects with their progress. |
/tl goal <text> | Set or replace the goal. Without text, shows it. |
/tl constraint <text> | Add a rule for the project. |
/tl status | Show the project's full state and where its ledger file is. |
/tl undo | Undo the last change to the ledger. Repeat to go further back, up to 50 changes. |
/tl handoff | Write handoff.md in the project folder: goal, constraints and decisions; the plan, findings and open questions; and the last four exchanges of this chat. |
/tl recall off | Stop recall in this chat and delete its searchable copy. /tl recall on resumes it. |
/tl off | Stop tracking a project in this chat, and stop this chat from starting one on its own. The project is kept, unless it started automatically and is still empty. |
/tl forget <name> | Move a project to the trash. The full name is required. |
/tl help |
Only you can change the goal and constraints, and only you can undo. The model can propose changes but has no tool for them.
The four ledger tools appear only in a chat with a project, and recall only in a long chat:
| Tool | What it does |
|---|---|
ledger_view | Shows the whole ledger or one section. |
ledger_plan | Adds steps, or changes a step's status, note or wording. |
ledger_record | Records a finding with its source, a decision with its reason, or an open question. Entries that read like personal facts about you are refused; those belong in memory. |
ledger_resolve | Closes an open question, optionally recording the answer as a finding. |
recall | In long chats, with or without a project: searches the chat's earlier messages and returns their original wording with turn numbers. |
Each tool returns a few lines: what changed, where the plan stands, and what to do next.
In the plugin's settings in LM Studio:
| Setting | Default | Meaning |
|---|---|---|
| Recall | On | Keep a searchable copy of long chats and offer the recall tool. |
| Recall starts at | 24,000 tokens | Chat length at which recall starts. |
| Start projects automatically | On | Start a project after two research-heavy turns in a row. |
| Tool calls for a heavy turn | 3 | Tool calls after one message that make it count toward an automatic start. |
| Remind after turns | 2 | Turns that used tools without a ledger update before the reminder. |
| Full state cap | 600 tokens | Largest size of the full project state. |
| Verbatim window | 6,000 tokens | Should match context-compressor's "Recent context kept verbatim". |
| Status line | On | The progress line above each reply. |
Plugins are switched on per chat in LM Studio. Switch throughLine on once; new chats keep the plugins that were on in the last one.
Everything stays in .lmstudio\throughline\ on your machine. The plugin makes no network requests. Ledgers hold whatever the model records about a project. A recall copy is a second copy of a long chat's text; it is deleted as soon as the chat is, /tl recall off deletes it on request, and recall can be turned off entirely in the settings. Cleanup reads only the names of LM Studio's chat files, never their contents. In chats with an attached document, diagnostics.jsonl records one true or false value per message: whether rag-v1 had already processed the message when throughLine received it. Nothing else is written there.
With Node 20 or newer, from this folder:
npm test builds .lmstudio/production.js and runs the tests. To install, copy manifest.json, package.json, install-state.json, .lmstudio\ and node_modules\ into %USERPROFILE%\.lmstudio\extensions\plugins\attitudejacket\throughline\ and restart LM Studio.
PolyForm Noncommercial 1.0.0: free for personal and other noncommercial use. Selling it or using it in a paid product or service needs permission from attitudejacket. See LICENSE.txt.
throughLine keeps a long problem in focus in LM Studio, across many turns, context compactions and chats. It keeps the state of a project (goal, constraints, plan, findings with sources, decisions and open questions) in a ledger on disk, outside the conversation, and shows the model a compact view of it on every message.
It is meant to stay enabled everywhere. A chat with no project gets nothing added to its messages and no extra tools.
This is version 2.1 at milestone M3 of the design in throughLine-design-v2.md, with every planned feature in place. M4 is the evaluation.
%USERPROFILE%\.lmstudio\throughline\projects\<name>\. ledger.json holds the state, ledger.md is a readable copy you can also edit, events.jsonl logs every change, and versions\ keeps the 50 most recent earlier states./tl off stops it; if the project is still empty, it is removed. /tl start starts one by hand.ledger_view.ledger.md in any text editor, including ones that escape Markdown when saving, and the change is picked up on your next message (or first, if that message is a command), logged as yours, and shown to the model. Only what you changed is applied: if the model recorded something while you had the file open, its work is kept. The file's second line, an HTML comment with a version number, is how throughLine knows which version your copy started from; Markdown viewers hide it. If the file cannot be read back, your version is kept beside it as ledger.edit-not-applied-<time>.md and the ledger is left as it was.recall tool that returns the original wording of earlier messages, with turn numbers, so an exact figure or quote can be found after it has been summarized away. This works in any chat, with or without a project, and adds nothing to your messages. Messages still in the model's view word for word are left out of results. Below the threshold nothing is copied.Type a command as the whole message.
| Command | Effect |
|---|---|
/tl start [goal] | Start a project in this chat. Without a goal, your first message in the chat is used, word for word. |
/tl open <name> | Continue an existing project in this chat. The start of the name is enough if it is unique. |
/tl list | List projects with their progress. |
/tl goal <text> | Set or replace the goal. Without text, shows it. |
/tl constraint <text> | Add a rule for the project. |
/tl status | Show the project's full state and where its ledger file is. |
/tl undo | Undo the last change to the ledger. Repeat to go further back, up to 50 changes. |
/tl handoff | Write handoff.md in the project folder: goal, constraints and decisions; the plan, findings and open questions; and the last four exchanges of this chat. |
/tl recall off | Stop recall in this chat and delete its searchable copy. /tl recall on resumes it. |
/tl off | Stop tracking a project in this chat, and stop this chat from starting one on its own. The project is kept, unless it started automatically and is still empty. |
/tl forget <name> | Move a project to the trash. The full name is required. |
/tl help |
Only you can change the goal and constraints, and only you can undo. The model can propose changes but has no tool for them.
The four ledger tools appear only in a chat with a project, and recall only in a long chat:
| Tool | What it does |
|---|---|
ledger_view | Shows the whole ledger or one section. |
ledger_plan | Adds steps, or changes a step's status, note or wording. |
ledger_record | Records a finding with its source, a decision with its reason, or an open question. Entries that read like personal facts about you are refused; those belong in memory. |
ledger_resolve | Closes an open question, optionally recording the answer as a finding. |
recall | In long chats, with or without a project: searches the chat's earlier messages and returns their original wording with turn numbers. |
Each tool returns a few lines: what changed, where the plan stands, and what to do next.
In the plugin's settings in LM Studio:
| Setting | Default | Meaning |
|---|---|---|
| Recall | On | Keep a searchable copy of long chats and offer the recall tool. |
| Recall starts at | 24,000 tokens | Chat length at which recall starts. |
| Start projects automatically | On | Start a project after two research-heavy turns in a row. |
| Tool calls for a heavy turn | 3 | Tool calls after one message that make it count toward an automatic start. |
| Remind after turns | 2 | Turns that used tools without a ledger update before the reminder. |
| Full state cap | 600 tokens | Largest size of the full project state. |
| Verbatim window | 6,000 tokens | Should match context-compressor's "Recent context kept verbatim". |
| Status line | On | The progress line above each reply. |
Plugins are switched on per chat in LM Studio. Switch throughLine on once; new chats keep the plugins that were on in the last one.
Everything stays in .lmstudio\throughline\ on your machine. The plugin makes no network requests. Ledgers hold whatever the model records about a project. A recall copy is a second copy of a long chat's text; it is deleted as soon as the chat is, /tl recall off deletes it on request, and recall can be turned off entirely in the settings. Cleanup reads only the names of LM Studio's chat files, never their contents. In chats with an attached document, diagnostics.jsonl records one true or false value per message: whether rag-v1 had already processed the message when throughLine received it. Nothing else is written there.
With Node 20 or newer, from this folder:
npm test builds .lmstudio/production.js and runs the tests. To install, copy manifest.json, package.json, install-state.json, .lmstudio\ and node_modules\ into %USERPROFILE%\.lmstudio\extensions\plugins\attitudejacket\throughline\ and restart LM Studio.
PolyForm Noncommercial 1.0.0: free for personal and other noncommercial use. Selling it or using it in a paid product or service needs permission from attitudejacket. See LICENSE.txt.
| List the commands. |
[PROJECTS]
When a message carries throughLine state, keep the project's ledger current: plan steps with ledger_plan, and record findings with their sources, decisions with their reasons, and blocking questions with ledger_record as you establish them. Keep one step marked doing, and mark it done when it is.
Facts about the user go to memory, never to the ledger, and project state never goes to memory.
If a /tl command reaches you as typed, throughLine is not enabled in this chat: say so in one sentence and do nothing else.
npm install
npm test
| List the commands. |
[PROJECTS]
When a message carries throughLine state, keep the project's ledger current: plan steps with ledger_plan, and record findings with their sources, decisions with their reasons, and blocking questions with ledger_record as you establish them. Keep one step marked doing, and mark it done when it is.
Facts about the user go to memory, never to the ledger, and project state never goes to memory.
If a /tl command reaches you as typed, throughLine is not enabled in this chat: say so in one sentence and do nothing else.
npm install
npm test