@luti first time on this project — give me the background
Connected. acme-dashboard — 24 memories, 7 sessions, 29 tools.
Any chat that speaks MCP gets one shared project memory and 29 local capabilities. The code, the execution and the context stay on this Mac.
Demo below: Claude, in the cloud, asks Luti to write a decision into project memory, and a new decision appears in the project context window. Codex, a command line on this Mac that was never in that conversation, recalls the same fact and edits the code to match. Grok then opens the local preview through the tunnel, and ChatGPT asks for a screenshot of a screen it cannot see. One project, four AIs, one context.
Project context
Architecture, decisions, conventions, the mistakes already made — they stay with the project. Change models, change clients, and it is still one context.
What this project should know for the long run. Written explicitly by the model, each fact carrying its source, its revision and what it supersedes. Rewriting an old conclusion means naming its revision — conflicts are rejected, never silently overwritten.
What a session actually finished. Files changed, jobs run, whether the tests passed, what failed and how it recovered. Never the transcript, never command arguments, never output bodies.
What happened on every single call. Event-level, generated automatically, verifiable — for auditing and for working out what went wrong. Who called what, when, and how it ended.
Local capabilities
Not a description of the command it would run. The work happens on this Mac, and the result comes back into the conversation exactly as it is — including from a chat that has never been on this machine.
Build a picture of the structure, dependencies and entry points first, then search, read and edit. Changes stay inside the project scope, every one of them takes a checkpoint first, and the Git state is there to check.
Builds, tests and dev servers run as long jobs. Pull the logs whenever you want, stop a job when you need to. One call never sits there blocking the conversation.
Open the local preview, click into it, see what really renders. Screenshot, save a PDF, read the console and the network. Whether the change worked is something to look at, not guess.
Native windows, system dialogs, apps that need a real click — that is Computer Use. It waits for a state to appear instead of sleeping and hoping.
Skills and instructions written into the project become capabilities of that project.
Screenshots, PDFs and build output return as MCP resources, ready to open or download. No going off to hunt through folders.
How it works
The host owns understanding, planning and orchestration. Luti owns the project boundary, the persistent context, the local capabilities, the approvals and the record. Between them, only MCP.
Read the project before touching it: what this is, what the conventions are, where the last session stopped.
Edit files, start processes, drive a browser. Each action has one clear intent and runs exactly once.
Check what actually happened through Git, job results and the browser — rather than restating the intent.
Conclusions worth keeping go back into project memory. The next AI picks up from there.
Product boundary
Luti does not compete with your AI for the work — it gives that work solid ground to stand on.
Luti owns
The model owns
Persistent context belongs to Luti.
Context intelligence belongs to the model.
Project capability belongs to Luti.
Reasoning and orchestration stay with the host.
Security
The boundaries are written into the system’s semantics, not promised in copy.
~/.luti/ — directories 0700, files 0600. Real secrets go to the Keychain: never to disk, never to a log.
Where the boundary ends
workspace or isolated process fails closed rather than quietly running unsandboxed.Tool surface
A fixed public surface: nothing new appears at runtime because of something said in a conversation. To extend it, change the project — manifest, instructions, skills.
Recall, remember, review, list sessions, forget logically.
List and switch approved projects, detect the stack, read runtime state.
Search, read, edit, move — plus structured symbol queries.
Start long jobs, pull logs, stop them, answer interactive prompts.
Status, diff, log, branches — read only. It does not commit for you.
Sessions, navigation, interaction, screenshots and PDFs, console and network, dialogs, evaluation.
Observe the screen, click and type, wait for a state to actually appear.
Run the project’s own skills; hand artifacts back as resources.
Context
Project
Files & code
Processes & jobs
Git
Browser
Computer Use
Skills & artifacts
Connections
The path is short on purpose. A chat in the cloud speaks MCP, comes in through an entrance you own, and lands on one approved project. A client already standing on this Mac skips the entrance entirely.
ChatGPT, Claude, Grok — any web chat that lets you add a custom MCP connector. Give it your HTTPS entrance; it registers itself over OAuth, you approve it once on this Mac, and it is on the project. This is the path Luti is built for.
Cursor, Codex, Claude Code. These already have hands of their own — what they get from Luti is the shared part: the same project memory, the same history, the same boundary as every other host. Point one at localhost and it is connected.
Your account, your domain, your tunnel. Requests reach this Mac from your provider — never through a Luti server — and the token goes straight to the Keychain. Quick Tunnel, OpenAI’s Secure MCP Tunnel and ngrok arrive with 1.0.
No entrance at all. A client on this Mac connects to localhost — no domain, no tunnel, no account. That local key is loopback only: it will not open the remote entrance.
Get started
Everything below happens on your machine and in your own accounts. Nothing is registered with Luti.
A client already on this Mac needs none of it: point Cursor, Codex or Claude Code at localhost and it is on the same project, with the same memory.