Skip to content

Latest commit

 

History

History
63 lines (51 loc) · 8.71 KB

README.md

File metadata and controls

63 lines (51 loc) · 8.71 KB

intent

The prompts this repo was built from, one file per session, oldest first.

Git records what changed. This records what was asked for — which is the part that gets lost, and the part you need when a decision looks arbitrary six weeks later.

The timezone is the example worth keeping. A commit log shows it guessed from the dialling code, then made editable, then made a searchable picker, then deleted outright in favour of reading the machine. Only the prompts show why: "using the machine-set time is muuuuch better actually. lets simplify and make this not configurable at all." Without that line the deletion looks like scope-cutting rather than the simplification it was.

Start here

SUMMARY.md — every instruction collapsed to its final form and checked against the code, with what is still missing and what was assumed without being asked. Read that; read the session files when you need to know exactly how something was worded.

Sessions

Session What it decided
Session 20 — a founding price What 40 hours a month costs: measured on the OpenAI usage page at ~5.4¢ per GPT-Live minute, not the 15–18¢ noted on 18 Oct. GPT-Live stays in meetings, listening all the time. One plan, $500 $200 a month for 40 hours, locked for 12 months as a bet on cheaper voice models; 15¢ overage; a 2-hour trial.
Session 19 — meeting manners After a practice interview with the bot along: it arrives with a chat message, not a spoken notice; answers questions about the meeting from what it heard; says what it is doing only when a request is slow, in its own words, and never for one the watcher refuses; leaves an empty meeting after 5 minutes. Then the room, not the name: meet --purpose and --trust give the meeting one level and a room brief written by the session.
Session 18 — meetings join the line chimein moves in: screenless meet <link> [--at] sends a Recall.ai bot into a meeting as the session's voice; each request is gated by who asked, through the same permissions file. Proven in a live Meet, through a mid-meeting deploy.
Session 17 — who may do what, in a file the owner writes .agents/permissions.md maps callers to a mode: a gate screenless enforces (listen, read, full) and the owner's own rules as text, shared with other agent tools such as the Slack loop. Teammates it names above listen get live calls into the owner's session; the owner keeps full unless named.
Session 16 — call back instead of a PIN The line stops trusting caller ids: a phone ring-in is rejected and the line rings the verified number straight back, and WhatsApp calls to the same number are answered at once on their own signed URL. Both get full rights, so the PIN, the keypad and the attestation check are removed.
Session 14 — progress updates into a live call An agent working on a caller's request can say "still working, I found X" during the call: screenless update, spoken as commentary on the request's delegation at the caller's next pause, never ending it or replacing the answer.
Session 13 — what went wrong on the first real live call Jan's first real call to his session: no hang-up after goodbye, slow answers, a greeting over his words with the wrong name, a thin brief, a gate that blocked ls. Fixed unattended from the watcher's output, in that priority order, plus a setting for who may hear a session's brief.
Session 12 — call your Claude session Ringing the line while your own terminal watches makes the call live. GPT-Live answers and hands each request, during the call, to a fork of the Claude Code session where /screenless was armed, behind a gate that allows reads and local work only. Live SIP turned out to be gated per project, so the audio goes through a Telnyx media stream to a Durable Object. A scripted test caller (/admin/test-ring) proved it on real calls.
Session 9 — teams, pay-as-you-go, and the watcher The single-person subscription becomes team infrastructure: orgs and users in D1, email-only invites on one page at screenless.sh/team, billing per org at $10 free then ~30¢/min. Ring-ins get a robot menu — press 1 for the assistant, or speak a request that is transcribed and routed to whichever teammate's terminal runs screenless watch (own terminal first, queue up to a week when none). Also: the two-half-circle logo, every email branded HTML, and the two Workers merged into one on the apex.
Session 8 — two loops, one question, two tickets Two tickets for one research question, one minute apart: the apply leg opened one and the nightly orchestrator opened another off the same unsigned PR comment. Consolidated in Linear, and fixed on both sides — a PR comment is now signed <!-- ☎️ --> and names what it already ticketed. Also: the installed skill became symlinks into this repo.
Session 7 — the intent convention becomes a skill The folder graduates to janwilmake/intent: seed from transcripts per contributor, author on every file, inline intent sources, weekly summary contract, pre-push gate. This repo adopts it in the same sitting.
Session 6 — why there have been no calls or emails, and the move in-session Four nights of the 03:00 job, nothing delivered: launchd cannot read ~/Desktop (TCC → EPERM), claude -p denies every Bash call unattended, and press/ was never installed. Fixed by dropping the scheduler: screenless wait is the gate, the skill is armed in a session like the orchestrator, the installer ships press/ and removes the old jobs. Later the same night: the first real calls, the brief cut to three dossiers with the assistant told to slow down, voicemail hung up on, the transcript email replaced by a mailed report, the Dutch number live, and the ring-in path closed properly.
Session 1 — finding the product Vendor choice (Telnyx, EU anchoring), the phone-verified CLI, press as a nightly PDF, the rename from voxcall. Includes the upstream silent-assistant bug, and a long drift into outreach.
Session 3 — the first real loop run A trial run against a real repo, in its own window. Produced an 8-page edition and a call brief; parked neither, for want of a session. Found the collector's silent PR undercount.
Session 2 — the paywall, the installer, and the call's real boundary curl | bash install, Stripe 7-day trial at $99/mo, call-time and timezone settings, ring-back on a declined call, and the correction that the phone assistant takes no action.

Rules

  • Prompts verbatim. Typos, drift and dead ends stay in. A cleaned-up instruction is a reconstruction, and reconstructions are where hindsight sneaks in.
  • A short header per session, written after the fact: what landed in the code, and what is still open. That is the only editorialising allowed.
  • Answers to direct questions count as prompts — a choice between options is intent, and is recorded inline where it was given.
  • No secrets. Pasted logs and payloads get their keys, tokens and phone numbers redacted before they land here.

See CLAUDE.md for when to write these. | Session 5 — the landing page argument | The landing page rewritten to argue rather than assume: problem section, the screenless test wow moment, the no-credentials boundary, an FAQ, and the design-partner honesty promoted out of the fine print. Includes a mobile overflow bug that turned out to be headless Chrome's 500px floor. | | Session 4 — the silent call was Telnyx's own TTS | The bug that blocked every call since session 1: Telnyx-hosted TTS renders no audio on PSTN. All ten languages moved to AWS/Azure voices, chosen on measured latency. Includes the <Say>-then-assistant reproduction, and half a friction list retracted after checking the docs. |

Seeded

Contributor Date
Jan Wilmake 2026-08-20 — history was already recorded by hand from session 1; the seed scanner verified it and recovered one missed prompt (session 6, 20:32)