Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 16 additions & 11 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,21 @@

## Coding Standards

- Write prose in ASD-STE100 (Simplified Technical English).
Use active voice and simple tenses.
One instruction per sentence.
Keep sentences ≤20 words.
One word per meaning, no idioms.
Applies to replies, commits, comments, error messages, UI copy, and docs.
Code identifiers, commands, and paths stay verbatim.
- Treat speed and memory as features.
Keep the app and the server light.
Prefer targeted updates over full rebuilds.
Keep heavy work off the main thread.
Measure before you claim a win.
- TDD: write a failing test before production logic (red → green → refactor).
- Apply SOLID; if you can't explain why a change respects each of the five principles, it probably violates one.
- Never leave a verified bug unfixed: once a bug is confirmed real, fix it even when it lies outside the current diff or task scope. If fixing it right now is genuinely unsafe or too large, flag it explicitly instead of silently moving on.

## Cursor Cloud specific instructions

Standard build/run/test commands live in [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md); this section only covers cloud-specific caveats. The update script already runs `pnpm install` (server) and `flutter pub get` (app) on startup.

- **Toolchain locations (Linux VM):** Flutter `3.44.4` is installed at `~/flutter` and is on `PATH` via `~/.bashrc`. Non-interactive shells may not source `~/.bashrc`, so use the absolute binary `~/flutter/bin/flutter` when a command can't find `flutter`. The server uses pnpm `11.8.0` via corepack (plain `npm install` is blocked by a preinstall guard); Node is 22.x.
- **Server (`server/`) runs fully on Linux.** Lint = `pnpm typecheck` (there is no ESLint). `pnpm test`, `pnpm build`, and `pnpm dev`/`pnpm start` all work headless.
- **App (`app/`) has no Linux GUI target** (iOS-first, plus macOS desktop / Android — all needing macOS or a device). On this VM only `flutter analyze --no-pub` (lint) and `flutter test --no-pub` are runnable; `flutter run` and the `app/tool/e2e.sh` simulator flows cannot run here.
- **Keyless end-to-end server loop:** `pnpm exec tsx test/e2e-server.ts --mode stub --project <path>` starts the WSS server on port `9787` with the in-process `StubAdapter` (deterministic echo/STREAM/THINK replies — no LLM key, no `pi` binary) and seeds a paired device with bearer `e2e-token`. Drive it with any WSS client (`{t:"hello",bearer}` → `sub` → `send.message`). The real `pi`/`codex`/`claude` adapters need external agent binaries/API keys that are not present on the VM.
- **Harmless startup noise:** the server prints `/bin/sh: 1: tailscale: not found` and falls back to a loopback-only listener — expected on the VM (no Tailscale).
- Never leave a verified bug unfixed.
Fix a confirmed bug even when it sits outside the current diff or task.
If a fix is unsafe or too large right now, say so explicitly.
Do not move on in silence.
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,30 @@ _▶️ Demo video coming soon — see [`docs/media/`](./docs/media/) to add it.
trust store needed.
- 🔔 **Never miss a prompt.** Get notified when an agent is waiting on you
(approval, a question, or a finished turn).
- ⚡ **Light on both ends.** A native client and a small Node server, built to
stay quick and low on memory — your laptop keeps its battery and its fans.

📱 [`app/`](./app/) (Flutter client) · 🖥 [`server/`](./server/) (Node/TS server)
· 📚 [UX](./docs/UX.md) · [Architecture](./docs/ARCHITECTURE.md) ·
[Development runbook](./docs/DEVELOPMENT.md) · [Notifications](./docs/NOTIFICATIONS.md)

## Where it came from

I like terminal-first tools. [cmux](https://github.com/manaflow-ai/cmux) and
[herdr](https://herdr.dev) are a joy on a desktop. But when I sat on the couch
and drove my desktop through a terminal on my phone, it hurt: a tiny keyboard,
small text, and panes that expect a mouse and a wide screen. A terminal is the
wrong shape for a phone on the go. (I have not tried the SSH clients yet — they
may well be better than I expect.)

So makit is not a terminal on a phone. It is a phone-shaped client for the
agent that already runs on your desktop.

It does not beat the tools that inspired it. Orca, Cursor, herdr, cmux,
Superconductor, Conductor, and t3code are all excellent, and makit is not on
par with them. It is my own take: the parts that work for me, in the way I like
to work. Thanks to all of them for the ideas.

## Quick start — Mac + iPhone over Tailscale

makit is **private by default**: it binds to your [Tailscale](https://tailscale.com)
Expand Down
Loading