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.
‘+m[1]+’
‘+m[2]+’
‘;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=’‘+G[p[1]]+’‘+p[0]+’‘;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+=’
‘});
$(‘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);
})();


