summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorT <t@tjp.lol>2026-05-25 13:24:02 -0700
committerT <t@tjp.lol>2026-05-25 15:27:11 -0700
commitdf2edee86eec2a8deb0ad57b5d20552199c12b65 (patch)
treec1e962e9b0bdf25572929e3efedc3b1915be853f /README.md
parente8272efd9f71ad27a0e62b6b3fa3d13e99a6736f (diff)
phase 1 done
Diffstat (limited to 'README.md')
-rw-r--r--README.md114
1 files changed, 114 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..de4c962
--- /dev/null
+++ b/README.md
@@ -0,0 +1,114 @@
+# pantograph: a minimal coding agent
+
+```
+ ?+
+ `?]
+ ]?~
+ [??
+ [??
+ ,?]"
+ '. ??-
+ 1111}}}}}}!'' ???
+ |(([[[[\[u]]f]]'` {??
+ 1((?]][[)tz)[]?'
+ ]Q?/|)?????v??-??_.
+ ]Ur )))?]?????n??[)Y'_
+ ?]|: `\t-??:
+ ]]] ---
+ ]]] ]?-^
+ ]]]. -?-
+ ']]+ ~]-`
+ [\] --?
+ [x] "]?`
+ {]]I ???
+ []? '??l
+ )Y})}}[+ ?-?
+ \l//[]???-j]u??- .?-?
+ ^ l\\--??]??]]??_. ???
+ i|\---?]]}t>.?~
+ )??]}]]]]f?C?],
+ I??? `f11]?]]}]n][?[
+ ?fc ^)1]??]?]Y]}}
+ ^??? '{{]
+ ??Y
+ ^]??
+ ]]].
+ ^]]]
+ ]~x'
+ `]J\
+ [}[`
+ `[X[
+ }}[`
+ .}}[
+ /p]`
+ '1t}
+```
+
+A pantograph is a draftsman's instrument: a jointed parallelogram of four
+rods, pinned at one end to a fixed pivot. The draftsman moves a stylus over
+the original drawing; a pen at the far end of the linkage traces the same
+path, scaled. Small movements at the stylus become larger movements at the
+pen, in exact proportion, without the draftsman ever having to think about
+the ratio. The geometry does the work.
+
+What the tool offers is *controlled leverage*. The operator stays close to
+the source — eyes on the original, hand on the stylus — and the mechanism
+reproduces that intent at a different scale, faithfully, without slop. The
+linkage doesn't make decisions; it amplifies the ones you make.
+
+That is the goal for `pantograph`: a coding agent built as a precise
+linkage between operator and model. Your attention stays on the work; the
+tool turns small, deliberate movements into larger ones, in proportion, and
+adds nothing of its own.
+
+## The shape of it
+
+- **Core in Zig.** One binary, small footprint, fast startup. The agent
+ loop and nothing else.
+- **`libpanto`.** The same loop behind a C ABI, so other programs can
+ embed it instead of shelling out.
+- **Two provider shapes.** Anthropic-shaped and OpenAI-shaped APIs at
+ arbitrary base URLs. Both work all the way through, or they aren't
+ shipped.
+- **Server mode.** Run as a daemon that speaks those same two API shapes
+ itself, routing to its configured backends. A small, durable provider
+ router; the useful slice of something like `omniroute`, without the
+ memory cost or the fragile bits.
+
+## What is not in the core
+
+A coding agent accumulates features the way a train roof accumulates
+ironwork. `pantograph` resists that. The following are deliberately *not*
+built in:
+
+- subagents
+- MCP
+- permission systems
+- AGENTS.md automation
+- skills
+- customizable `/prompts`
+- the basic tools — `read`, `write`, `edit`, `bash` — even these ship as
+ extensions and can be disabled individually
+
+Each of these is a reasonable thing to want. None of them needs to live in
+the core.
+
+## Extensions
+
+Extensions are how everything above gets back into the picture, on terms
+that don't compromise the rest of the machine.
+
+- **Lua first.** Cheap to embed, quick to iterate in, easy to sandbox.
+- **Native next.** A C ABI for shared-object extensions, so anything that
+ can produce a `.so` — Zig, Rust, C, C++ — can plug in.
+- **Crash isolation as a first-class concern.** A bad extension should
+ not take the host down with it. The standard tools will themselves be
+ ported to native extensions once that path is solid.
+
+Extensions are how `pantograph` stays small without becoming useless.
+
+## Status
+
+Early. The thinking lives in `ideas.md`; the staged plan lives in
+`docs/phase-1.md` through `docs/phase-4.md`. Source is under `src/` for
+the CLI and `libpanto/` for the embeddable library.