The Letter Company has released the beta of Letterpress-1, a coding agent, harness and IDE for growth engineering. The Letterpress-1 coding agent reads a website and its market, then decides what should exist. It builds the change in a sandbox and opens a pull request with a live preview.
TL;DR
- Size: Letter team says it combines frontier models with fine-tuned small models; names and sizes are not disclosed.
- Runs on: Letter’s hosted platform against your git repository. No local GPU needed. Setup takes under 5 minutes, per Letter.
- Performance: No public benchmark. Letter shows 1 self-reported, side-by-side page build against Codex.
- Best: 760 tools exposed through 1 registry over MCP, REST and CLI.
- Worst: No measurable eval; entry plan is $100/month with overage at 5x the list rate.
What is Letterpress-1?
Letterpress-1 is a growth engineering agent from The Letter Company. It turns site and market signals into pull requests. The letter company team argues that websites, unlike apps, react to outside forces. These include agent behavior, Google rankings, human visits and competitor activity. General coding agents were built to scale codebases, not to act on those signals.
The agent is aimed at teams that host their marketing site in git. It is proactive: it suggests the next thing to build. Examples include de-anonymization, landing pages, warmed emails, blog automation and agent telemetry.
How does Letterpress-1 work?
Letterpress-1 runs in 3 modes:
- Build: create a page or feature from a prompt, with brand copy and visuals kept consistent.
- Plan: pick a goal and get a build plan of growth actions.
- Fix: find site issues and dispatch pull requests to fix them.
Every change follows the same loop. The agent reads the site, plans and builds in a sandbox. It reviews its own change, then opens a pull request. Each change returns a preview link of your own site. Nothing lands until you choose a preview, a pull request, or a merge after checks pass.
Letter team lists 6 surfaces. These are the web platform, a Slack app, the letterpress CLI and a website portal. A standalone app and your own agent round out the list. The in-site IDE works on a live page. Press ⌘L, edit text where you see it, and a pull request follows. Showcase examples also cover A/B tests from live edits.
For developers, agents.md documents an MCP server at app.letterstory.com/api/mcp with OAuth. The MCP manifest, OpenAPI spec and API reference form 1 registry of 760 tools. Claude Code, Codex or any MCP-capable agent can call the same functions the app uses.
What are Proofs, Simulations, Benches and Phantoms?
The launch post highlights 4 primitives aimed at winning over AI agents as buyers:
- Proofs: signed evidence of customer success, built from telemetry and billing data, for agent visitors.
- Simulations: mirror versions of your API or MCP with simulated data, so agents can try before buying.
- Benches: self-hosted, reproducible benchmark apps with open-source code and independent governance.
- Phantoms: independent, autonomous blogs used to sandbox growth strategies.
The site adds more: Kernels, Letterbases, Visitors and Mailers. Then it watches competitor sitemaps and flag new pages. Letter team positions these as replacements for tools like G2, Semrush, Profound, RB2B and Instantly.
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Letterpress-1 Explained</title>
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:opsz,[email protected],400;9..40,500;9..40,700&family=Ibarra+Real+Nova:wght@500;600;700&display=swap" rel="stylesheet">
<style>
html,body{margin:0!important;padding:0!important;background:transparent!important}
#lp1x{–ink:#f3f1ec;–muted:rgba(243,241,236,.6);–line:rgba(243,241,236,.12);–bg:#201e1f;–bg2:#181717;–card:#282627;–phos:#9AF2E0;–press:#EE724A;–mint:#8FD9B6;–amber:#E8912D;–mtp:#76B900;
max-width:880px;margin:0 auto!important;box-sizing:border-box;background:var(–bg)!important;color:var(–ink)!important;border:1px solid var(–line)!important;border-radius:16px;overflow:hidden;font-family:"DM Sans",system-ui,sans-serif;font-size:15px;line-height:1.5;
background-image:radial-gradient(rgba(243,241,236,.09) 1px,transparent 1.2px)!important;background-size:18px 18px!important}
#lp1x *{box-sizing:border-box}
#lp1x hr,#lp1x p:empty,#lp1x del,#lp1x s{display:none!important}
#lp1x p{margin:0 0 8px}
#lp1x .hd{padding:22px 24px 10px}
#lp1x .kicker{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(–phos)!important;font-weight:700}
#lp1x h2{font-family:"Ibarra Real Nova",Georgia,serif;font-weight:600;font-size:30px;line-height:1.1;margin:6px 0 4px;color:var(–ink)!important}
#lp1x h2 em{color:var(–press)!important;font-style:italic}
#lp1x .sub{color:var(–muted)!important;font-size:14px}
#lp1x .tabs{display:flex;gap:6px;padding:8px 24px 0;border-bottom:1px solid var(–line);overflow-x:auto}
#lp1x .tab{appearance:none;background:transparent!important;border:0!important;border-bottom:2px solid transparent!important;color:var(–muted)!important;font:600 14px "DM Sans",sans-serif;padding:10px 12px;cursor:pointer;white-space:nowrap;transition:color .2s}
#lp1x .tab[aria-selected=true]{color:var(–ink)!important;border-bottom-color:var(–phos)!important}
#lp1x .tab:focus-visible{outline:2px solid var(–phos);outline-offset:2px}
#lp1x .panel{display:none;padding:20px 24px 22px;animation:lpfade .35s ease}
#lp1x .panel.on{display:block}
@keyframes lpfade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* pipeline */
#lp1x .pipe{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;position:relative;margin:6px 0 14px}
#lp1x .rail{position:absolute;left:8%;right:8%;top:23px;height:2px;background:var(–line)}
#lp1x .rail i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(–phos),var(–mint));transition:width .5s ease}
#lp1x .node{position:relative;z-index:1;text-align:center;cursor:pointer;background:none!important;border:0!important;color:var(–muted)!important;font:500 12px "DM Sans",sans-serif;padding:0}
#lp1x .node b{display:grid;place-items:center;width:46px;height:46px;margin:0 auto 6px;border-radius:50%;background:var(–card)!important;border:1px solid var(–line)!important;color:var(–muted)!important;font:700 15px "DM Sans";transition:all .3s}
#lp1x .node.done b{border-color:var(–mint)!important;color:var(–mint)!important}
#lp1x .node.cur b{background:var(–phos)!important;color:#181717!important;border-color:var(–phos)!important;box-shadow:0 0 0 6px rgba(154,242,224,.15);transform:scale(1.06)}
#lp1x .node.cur{color:var(–ink)!important}
#lp1x .split{display:grid;grid-template-columns:1fr 1fr;gap:14px}
#lp1x .card{background:var(–card)!important;border:1px solid var(–line)!important;border-radius:12px;padding:14px 16px}
#lp1x .card h3{font-family:"Ibarra Real Nova",Georgia,serif;font-size:20px;margin:0 0 6px;color:var(–ink)!important}
#lp1x .term{background:var(–bg2)!important;border:1px solid var(–line)!important;border-radius:12px;padding:12px 14px;font:13px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(–ink)!important;min-height:168px}
#lp1x .term .p{color:var(–phos)!important}
#lp1x .term .ok{color:var(–mint)!important}
#lp1x .term .dim{color:var(–muted)!important}
#lp1x .term .cur{display:inline-block;width:7px;height:14px;background:var(–phos);vertical-align:-2px;animation:lpblink 1s steps(1) infinite}
@keyframes lpblink{50%{opacity:0}}
#lp1x .ctl{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
#lp1x .btn{appearance:none;cursor:pointer;border-radius:999px;padding:8px 14px;font:600 13px "DM Sans",sans-serif;border:1px solid var(–line)!important;background:var(–card)!important;color:var(–ink)!important;transition:background .2s,border-color .2s}
#lp1x .btn:hover{border-color:var(–phos)!important}
#lp1x .btn.pri{background:var(–phos)!important;color:#181717!important;border-color:var(–phos)!important}
#lp1x .tag{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:3px 8px;border-radius:999px;border:1px solid var(–line);color:var(–muted)!important;margin:0 4px 4px 0}
/* modes */
#lp1x .modes{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
#lp1x .mode{cursor:pointer;text-align:left;font:inherit;color:var(–ink)!important;background:var(–card)!important;border:1px solid var(–line)!important;border-radius:12px;padding:14px;transition:transform .2s,border-color .2s}
#lp1x .mode:hover{transform:translateY(-2px)}
#lp1x .mode.on{border-color:var(–press)!important;box-shadow:inset 0 0 0 1px var(–press)}
#lp1x .mode .n{font:700 12px "DM Sans";color:var(–press)!important}
#lp1x .mode h3{font-family:"Ibarra Real Nova",Georgia,serif;font-size:22px;margin:2px 0 4px}
#lp1x .mdetail{margin-top:12px}
#lp1x .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
#lp1x .chip{font-size:13px;padding:6px 10px;border-radius:8px;background:var(–bg2)!important;border:1px solid var(–line)!important;color:var(–ink)!important;opacity:0;transform:translateY(6px);animation:lpin .4s ease forwards}
@keyframes lpin{to{opacity:1;transform:none}}
/* primitives */
#lp1x .filters{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
#lp1x .flt[aria-pressed=true]{background:var(–ink)!important;color:#181717!important}
#lp1x .prims{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
#lp1x .prim{cursor:pointer;text-align:left;font:inherit;color:var(–ink)!important;background:var(–card)!important;border:1px solid var(–line)!important;border-radius:10px;padding:12px;transition:opacity .3s,transform .3s,border-color .2s}
#lp1x .prim.dim{opacity:.28;transform:scale(.97)}
#lp1x .prim.on{border-color:var(–phos)!important}
#lp1x .prim b{display:block;font-family:"Ibarra Real Nova",Georgia,serif;font-size:18px}
#lp1x .prim small{color:var(–muted)!important;font-size:11px;text-transform:uppercase;letter-spacing:.08em}
/* calc */
#lp1x .calc{display:grid;grid-template-columns:1.05fr 1fr;gap:16px}
#lp1x label{display:block;font-size:13px;color:var(–muted)!important;margin:0 0 2px}
#lp1x .row{margin-bottom:10px}
#lp1x .row .v{float:right;color:var(–ink)!important;font-weight:700}
#lp1x input[type=range]{width:100%;accent-color:#9AF2E0}
#lp1x .seg{display:flex;gap:4px}
#lp1x .seg button{flex:1}
#lp1x .seg button[aria-pressed=true]{background:var(–phos)!important;color:#181717!important}
#lp1x .total{font-family:"Ibarra Real Nova",Georgia,serif;font-size:34px;line-height:1;margin:2px 0}
#lp1x .bar{margin:9px 0}
#lp1x .bar .lbl{display:flex;justify-content:space-between;font-size:13px}
#lp1x .bar .trk{height:12px;border-radius:6px;background:var(–bg2);border:1px solid var(–line);overflow:hidden;margin-top:4px}
#lp1x .bar .trk i{display:block;height:100%;width:0;border-radius:6px;background:var(–muted);transition:width .6s cubic-bezier(.2,.8,.2,1)}
#lp1x .bar.best .trk i{background:linear-gradient(90deg,var(–phos),var(–mint))}
#lp1x .bar.best .lbl b{color:var(–phos)!important}
#lp1x .note{font-size:12px;color:var(–muted)!important;margin-top:8px}
#lp1x .ft{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:12px 24px;border-top:1px solid var(–line);font-size:12px;color:var(–muted)!important}
#lp1x .ft a{color:var(–muted)!important}
#lp1x .ft .mtp{color:var(–mtp)!important;font-weight:700}
#lp1x code,#lp1x pre{background:var(–bg2)!important;color:var(–phos)!important;border:0!important;font-family:ui-monospace,Menlo,monospace;font-size:.92em;padding:1px 5px;border-radius:4px}
@media (max-width:640px){
#lp1x h2{font-size:24px}
#lp1x .hd,#lp1x .panel{padding-left:16px;padding-right:16px}
#lp1x .tabs{padding:8px 12px 0}
#lp1x .pipe{grid-template-columns:repeat(3,1fr);row-gap:14px}
#lp1x .rail{display:none}
#lp1x .split,#lp1x .calc,#lp1x .modes{grid-template-columns:1fr}
#lp1x .prims{grid-template-columns:repeat(2,1fr)}
#lp1x .ft{padding:12px 16px}
}
@media (prefers-reduced-motion:reduce){#lp1x *{animation:none!important;transition:none!important}#lp1x .chip{opacity:1;transform:none}}
</style></head>
<body>
<div id="lp1x">
<div class="hd">
<div class="kicker">Interactive explainer · The Letter Company</div>
<h2>How <em>Letterpress-1</em> turns growth work into pull requests</h2>
<div class="sub">A coding agent, harness and IDE for growth engineering. Released in beta; figures from letter.dev.</div>
</div>
<div class="tabs" role="tablist">
<button class="tab" role="tab" aria-selected="true" data-t="loop">The loop</button>
<button class="tab" role="tab" aria-selected="false" data-t="modes">3 modes, 6 surfaces</button>
<button class="tab" role="tab" aria-selected="false" data-t="prims">Growth primitives</button>
<button class="tab" role="tab" aria-selected="false" data-t="calc">Cost calculator</button>
</div>
<section class="panel on" id="p-loop" role="tabpanel">
<div class="pipe" id="pipe"><div class="rail"><i id="rail"></i></div></div>
<div class="split">
<div class="card"><span class="tag" id="stag">Step 1 of 6</span><h3 id="stitle"></h3><p id="sbody" style="color:var(–muted)"></p></div>
<div class="term" id="term" aria-live="polite"></div>
</div>
<div class="ctl">
<button class="btn pri" id="play"> Play the loop</button>
<button class="btn" id="prev">← Back</button>
<button class="btn" id="next">Next →</button>
</div>
</section>
<section class="panel" id="p-modes" role="tabpanel">
<div class="modes" id="modes"></div>
<div class="card mdetail"><span class="tag" id="mtag"></span><p id="mbody" style="margin:6px 0 0"></p></div>
<div style="margin-top:16px"><span class="tag">Where it runs</span>
<div class="chips" id="surf"></div>
<p class="note">Plus ⌘L in-site editing: change text on your live page and a pull request follows. 760 tools are exposed over MCP, REST and CLI.</p>
</div>
</section>
<section class="panel" id="p-prims" role="tabpanel">
<div class="filters" id="flt"></div>
<div class="prims" id="prims"></div>
<div class="card" style="margin-top:12px"><span class="tag" id="ptag">Tap a primitive</span><h3 id="ptitle">Pre-built growth infrastructure</h3><p id="pbody" style="color:var(–muted);margin:0">Each primitive is its own endpoint. The launch post spotlights Proofs, Simulations, Benches and Phantoms.</p></div>
</section>
<section class="panel" id="p-calc" role="tabpanel">
<div class="calc">
<div>
<div class="row"><label>Pull requests per month <span class="v" id="vpr"></span></label><input type="range" id="pr" min="0" max="200" value="20"></div>
<div class="row"><label>Tokens per pull request (Letter cites 150 to 900)</label>
<div class="seg" id="tpr"><button class="btn" data-v="150" aria-pressed="false">150</button><button class="btn" data-v="500" aria-pressed="true">500</button><button class="btn" data-v="900" aria-pressed="false">900</button></div></div>
<div class="row"><label>Articles published per month (1,030 tokens each) <span class="v" id="var"></span></label><input type="range" id="ar" min="0" max="60" value="8"></div>
<div class="row"><label>Phantom sites live (300 tokens a month each) <span class="v" id="vph"></span></label><input type="range" id="ph" min="0" max="10" value="2"></div>
<div class="row"><label>AI visibility answers (12 tokens each) <span class="v" id="vai"></span></label><input type="range" id="ai" min="0" max="3000" step="50" value="600"></div>
<div class="row"><label>Identified visitors (25 tokens each) <span class="v" id="vvi"></span></label><input type="range" id="vi" min="0" max="2000" step="25" value="100"></div>
</div>
<div class="card">
<span class="tag">Your month</span>
<div class="total" id="tok"></div>
<div style="color:var(–muted);font-size:13px" id="list"></div>
<div id="bars" style="margin-top:10px"></div>
<p class="note">1 token = 1 cent at list. Overage on each plan is 5x its own per-token rate. Defaults match Letter’s own pricing example. Rates from letter.dev/pricing.</p>
</div>
</div>
</section>
<div class="ft"><span>Sources: <a href="https://letter.dev/" target="_blank" rel="noopener">letter.dev</a> · <a href="https://letter.dev/pricing" target="_blank" rel="noopener">pricing</a> · <a href="https://letter.dev/agents.md" target="_blank" rel="noopener">agents.md</a></span><span class="mtp">© Marktechpost</span></div>
</div>
<script>
(function(){
var R=document.getElementById(‘lp1x’);
function $(id){return document.getElementById(id)}
function post(){try{parent.postMessage({lp1xHeight:R.offsetHeight+40},’*’)}catch(e){}}
// tabs
var tabs=R.querySelectorAll(‘.tab’);
tabs.forEach(function(t){t.addEventListener(‘click’,function(){
tabs.forEach(function(x){x.setAttribute(‘aria-selected’,x===t?’true’:’false’)});
R.querySelectorAll(‘.panel’).forEach(function(p){p.classList.toggle(‘on’,p.id===’p-‘+t.dataset.t)});
if(t.dataset.t===’calc’)calc(); if(t.dataset.t===’modes’)renderSurf();
setTimeout(post,60);
})});
// loop
var S=[
[‘Signals’,’Read the site and the market’,’The agent maps your pages and watches outside signals: AI agent visits, Google rankings, human traffic and competitor pages.’,[‘<span class="p">›</span> what should we build for growth?’,'<span class="dim">reading the site · checking competitor pages</span>’]],
[‘Plan’,’Propose what should exist’,’In Plan mode it picks a goal and drafts a build plan. You approve the picks you want before anything is built.’,[‘<span class="dim">plan · 4 actions proposed</span>’,'<span class="dim">waiting on approve</span>’]],
[‘Build’,’Build in a sandbox’,’The change is written inside an isolated sandbox. Letter says it is tuned to keep brand copy and visuals consistent.’,[‘<span class="dim">building in a sandbox</span>’,'<span class="dim">changed 3 files</span>’]],
[‘Review’,’Self-review the change’,’The agent reviews its own diff and fixes what the review finds before handing it over.’,[‘<span class="dim">reviewing the change</span>’,'<span class="ok">fixed what the review found</span>’]],
[‘PR’,’Open a pull request with a preview’,’Every change returns as a pull request plus a live preview link of your own site.’,[‘<span class="ok">✓ pull request opened · preview is up</span>’]],
[‘You’,’You decide what lands’,’Keep it as a preview, leave the pull request open, or merge once checks pass. Nothing lands until you say.’,[‘<span class="p">›</span> merge when checks pass’,'<span class="ok">✓ queued for merge</span>’]]
];
var cur=0,timer=null,typeT=null,lines=[];
var pipe=$(‘pipe’);
S.forEach(function(s,i){var b=document.createElement(‘button’);b.className=”node”;b.innerHTML='<b>’+(i+1)+'</b>’+s[0];b.onclick=function(){stop();go(i)};pipe.appendChild(b)});
function go(i){
cur=i;var nodes=pipe.querySelectorAll(‘.node’);
nodes.forEach(function(n,k){n.classList.toggle(‘done’,k<i);n.classList.toggle(‘cur’,k===i)});
$(‘rail’).style.width=(i/(S.length-1)*100)+’%’;
$(‘stag’).textContent=”Step “+(i+1)+’ of 6′;$(‘stitle’).textContent=S[i][1];$(‘sbody’).textContent=S[i][2];
if(i===0)lines=[‘<span class="dim">~/website $</span> letterpress’];
type(S[i][3]);
}
function type(add){
clearTimeout(typeT);var k=0,term=$(‘term’);
function step(){if(k<add.length){lines.push(add[k++]);if(lines.length>7)lines=lines.slice(-7);term.innerHTML=lines.join(‘<br>’)+'<br><span class="cur"></span>’;typeT=setTimeout(step,420)}}
step();
}
function stop(){clearInterval(timer);timer=null;$(‘play’).textContent=”
Play the loop”}
$(‘play’).onclick=function(){if(timer){stop();return}if(cur===S.length-1)go(0);$(‘play’).textContent=”❚❚ Pause”;timer=setInterval(function(){if(cur<S.length-1)go(cur+1);else stop()},1900)};
$(‘next’).onclick=function(){stop();go(Math.min(cur+1,S.length-1))};
$(‘prev’).onclick=function(){stop();go(Math.max(cur-1,0))};
go(0);
// modes
var M=[[’01’,’Build’,’Build anything from a prompt’,’Create pages and features from plain words. Letter says the agent is fine-tuned to write brand-ready copy and keep brand visuals.’],
[’02’,’Plan’,’Pick a goal, get a plan’,’Name a goal and Letterpress-1 proposes growth strategies to build straight into your repository, with no extra tools.’],
[’03’,’Fix’,’Find what is broken and fix it’,’Dispatch pull requests that fix common issues across a marketing site, most severe first.’]];
var mw=$(‘modes’);
M.forEach(function(m,i){var b=document.createElement(‘button’);b.className=”mode”;b.innerHTML='<div class="n">’+m[0]+'</div><h3>’+m[1]+'</h3><div style="color:var(–muted);font-size:13px">’+m[2]+'</div>’;b.onclick=function(){selM(i)};mw.appendChild(b)});
function selM(i){mw.querySelectorAll(‘.mode’).forEach(function(x,k){x.classList.toggle(‘on’,k===i)});$(‘mtag’).textContent=M[i][1]+’ mode’;$(‘mbody’).textContent=M[i][3];post()}
selM(0);
var SU=[‘Letter platform’,’Slack app’,’Letterpress CLI’,’Website portal’,’Letterpress App’,’Your own agent via MCP’];
function renderSurf(){var c=$(‘surf’);c.innerHTML=”;SU.forEach(function(s,i){var d=document.createElement(‘span’);d.className=”chip”;d.style.animationDelay=(i*90)+’ms’;d.textContent=s;c.appendChild(d)})}
renderSurf();
// primitives
var P=[
[‘Proofs’,’conv’,’Signed proof of customer success’,’Connect telemetry and billing. Letter issues a third-party verified proof that AI agents can review. You choose what is public.’],
[‘Simulations’,’conv’,’Agents try before buying’,’Mirror versions of your API or MCP with simulated data, so agents can test without touching your database.’],
[‘Benches’,’conv’,’Self-governed benchmarks’,’Describe a benchmark; the app deploys itself, re-runs on a schedule and open-sources its code. The site calls these Benchmarks.’],
[‘Phantoms’,’geo’,’Independent sandbox blogs’,’Launch autonomous publications that write and publish, so you can test growth strategies away from your main site.’],
[‘Letterbases’,’geo’,’Native content database’,’An optional store for content collections that the agent refines without a pull request.’],
[‘Kernels’,’geo’,’Writing kernels’,’Drafting endpoints for content. A kernel draft costs 161 tokens.’],
[‘Visitors’,’in’,’Visitor identification’,’A script that tracks human and AI agent visits per page and de-anonymizes traffic. 25 tokens per identified visitor.’],
[‘Mailers’,’in’,’Warmed mailboxes and sequences’,’Outbound email sequences installed natively. A mailbox costs 300 tokens a month.’],
[‘Seers’,’watch’,’Competitor watching’,’Seers read competitor sitemaps on a schedule and flag new pages for a build to answer.’]
];
var G={all:’All’,conv:’Agentic conviction’,geo:’GEO / SEO’,in:’Inbound conversion’,watch:’Watching’};
var RP={conv:’Letter positions these against G2 and Trustpilot.’,geo:’Letter positions these against Semrush, Sanity and Profound.’,in:’Letter positions these against RB2B and Instantly.’,watch:’Listed in agents.md.’};
var fw=$(‘flt’),pw=$(‘prims’);
Object.keys(G).forEach(function(k){var b=document.createElement(‘button’);b.className=”btn flt”;b.textContent=G[k];b.setAttribute(‘aria-pressed’,k===’all’);b.onclick=function(){fw.querySelectorAll(‘.flt’).forEach(function(x){x.setAttribute(‘aria-pressed’,x===b)});pw.querySelectorAll(‘.prim’).forEach(function(p){p.classList.toggle(‘dim’,k!==’all’&&p.dataset.g!==k)})};fw.appendChild(b)});
P.forEach(function(p,i){var b=document.createElement(‘button’);b.className=”prim”;b.dataset.g=p[1];b.innerHTML='<small>’+G[p[1]]+'</small><b>’+p[0]+'</b>’;b.onclick=function(){pw.querySelectorAll(‘.prim’).forEach(function(x){x.classList.toggle(‘on’,x===b)});$(‘ptag’).textContent=G[p[1]];$(‘ptitle’).textContent=p[0]+’: ‘+p[2];$(‘pbody’).textContent=p[3]+’ ‘+RP[p[1]];post()};pw.appendChild(b)});
// calculator
var PL=[[‘Basic’,100,10000,50],[‘Starter’,500,50000,50],[‘Growth’,1000,130000,38.46],[‘Scale’,2500,400000,31.25]];
var tpr=500;
$(‘tpr’).querySelectorAll(‘button’).forEach(function(b){b.onclick=function(){tpr=+b.dataset.v;$(‘tpr’).querySelectorAll(‘button’).forEach(function(x){x.setAttribute(‘aria-pressed’,x===b)});calc()}});
[‘pr’,’ar’,’ph’,’ai’,’vi’].forEach(function(id){$(id).addEventListener(‘input’,calc)});
function f(n){return n.toLocaleString(‘en-US’)}
function calc(){
var pr=+$(‘pr’).value,ar=+$(‘ar’).value,ph=+$(‘ph’).value,ai=+$(‘ai’).value,vi=+$(‘vi’).value;
$(‘vpr’).textContent=pr;$(‘var’).textContent=ar;$(‘vph’).textContent=ph;$(‘vai’).textContent=f(ai);$(‘vvi’).textContent=f(vi);
var t=pr*tpr+ar*1030+ph*300+ai*12+vi*25;
$(‘tok’).textContent=f(t)+’ tokens’;$(‘list’).textContent=”$”+f(Math.round(t/100))+’ at list price’;
var costs=PL.map(function(p){return p[1]+Math.max(0,t-p[2])*p[3]/1000});
var min=Math.min.apply(null,costs),max=Math.max.apply(null,costs),bi=costs.indexOf(min);
var h=””;PL.forEach(function(p,i){h+='<div class="bar’+(i===bi?’ best’:”)+’"><div class="lbl"><span>’+p[0]+’ · $’+f(p[1])+’/mo, ‘+f(p[2])+’ tokens</span><b>$’+f(Math.round(costs[i]))+(i===bi?’ ✓’:”)+'</b></div><div class="trk"><i data-w="’+(costs[i]/max*100).toFixed(1)+’"></i></div></div>’});
$(‘bars’).innerHTML=h;
requestAnimationFrame(function(){requestAnimationFrame(function(){$(‘bars’).querySelectorAll(‘i’).forEach(function(i){i.style.width=i.dataset.w+’%’})})});
post();
}
calc();
window.addEventListener(‘load’,post);window.addEventListener(‘resize’,post);setTimeout(post,300);setTimeout(post,1200);
})();
</script>
</body></html>
“>
(function(){var f=document.getElementById(‘lp1x-frame’);window.addEventListener(‘message’,function(e){if(e.source===f.contentWindow&&e.data&&e.data.lp1xHeight){f.style.height=Math.ceil(e.data.lp1xHeight)+’px’;}});})();
How does Letterpress-1 compare with Codex, Claude Code and Cursor?
| Feature | Letterpress-1 | OpenAI Codex | Claude Code | Cursor |
|---|---|---|---|---|
| Built for | Growth engineering on git-hosted sites | General coding | General coding | General coding (editor and agents) |
| Entry paid plan | $100/month, 10,000 tokens | Go $8/month; Plus $20/month | Pro $20/month ($17 annual) | Plus $8/month (Grok models only) |
| Free access | 5,000 one-time tokens (6,000 with work email) | Free plan, $0 | Not in Free plan | Free plan, limited agent requests |
| Billing | Token pool; agent runs at model cost + 20% | Plan limits, credits or API key | Shared plan usage or API credits | Weekly pool; third-party models at API list price |
| Models | Frontier plus fine-tuned small models (not named) | GPT-6.1 Sol, GPT-6 Luna and others | Opus, Sonnet, Haiku; Fable via credits | Grok models; third-party at API price |
| Built-in growth primitives | Proofs, Simulations, Benches, Phantoms, Visitors, Mailers, Seers | None listed | None listed | None listed |
How much does Letterpress-1 cost?
Letter bills 1 shared token pool. A token equals 1 cent at list price. Plans are Basic ($100, 10,000 tokens), Starter ($500, 50,000), Growth ($1,000, 130,000) and Scale ($2,500, 400,000). Enterprise starts at 2 million tokens a month at half the list rate.
Agent runs cost model spend plus 20%, typically 150 to 900 tokens per pull request. That is $1.50 to $9 at list. A published article costs 1,030 tokens. Overage on Basic and Starter is $50 per 1,000 tokens, 5x the list rate. Unused tokens do not roll over.
Key Takeaways
- Letterpress-1 is a coding agent, harness and IDE built for growth engineering.
- Every change ships as a sandboxed pull request with a preview link.
- 760 tools are exposed over MCP, REST and CLI for external agents.
- Pricing starts at $100/month; agent runs cost model spend plus 20%.
- No public benchmark yet; quality claims are self-reported.
Check out the product page, pricing, showcase, agents.md and the launch post on X. Also, feel free to follow us on Twitter and don’t forget to join our 150k+ML SubReddit and Subscribe to our Newsletter. Wait! are you on telegram? now you can join us on telegram as well.
Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.? Connect with us
The post The Letter Company Releases Letterpress-1: A Coding Agent Built for Growth Engineering appeared first on MarkTechPost.
Credit: Source link
























