In October 2026 we ran eight free OpenCode models through one pipeline: a niche brief, a prompt template, and then the agent writes a catalog site in Astro, fixes the build, researches an article on the web, polishes the site, and ships it to Vercel. No API key, nothing to pay for. The result: 8 working sites of 19–21 pages each, zero broken internal links, and a clear gap between models in speed, reliability, and writing quality.
In short
- For building and deploying, Beam did best: site in 12 minutes, article in 7, deploy in 11, no failures. It is unavailable in several countries, including Russia. The fallback is DeepSeek V4.1 Flash: it never broke a build, but it is slow under load.
- For articles, MiniMax M3.1 Flash wrote the deepest texts, but the agent often fails to finish the job and leaves typos. A steadier choice is GLM-5.3-Flash.
- Assign a model per step, not per site. The same pipeline can be assembled from different models.
- Two of the eight models produced nothing: Flint 40B failed to build a site, and LongCat 2.5 Preview did not answer the probe request.
How the pipeline works
Each site has a JSON brief: niche, audience, example services, niche-specific filter fields, article topic, project name. A script fills the brief into a prompt template and starts the agent with opencode run -m opencode/<model> (CLI docs). Every step is a separate fresh session with a 60-minute timeout and one retry if the agent fails.
brief (JSON) ─► prompt template ─► opencode run -m opencode/<model>
1. site Astro site: data, pages, SEO markup
2. npm run build script check; on error — fix-build (up to 2 times)
3. article 10–12k characters, web search
4. deploy logos, OG image, link check, vercel deploy --prod
5. check 200 on the home page and the article, quality metrics
What each step covers:
- Site. Static Astro with no UI frameworks, 12 real services in
tools.json, a home page with filters and sorting, a service page, a comparison, an articles section with three texts, an "About" page, a 404, JSON-LD, sitemap, and robots.txt. - Build fix. The agent gets the error text and edits the code until
npm run buildpasses. - Article. The agent searches the web itself (the built-in
websearchandwebfetchtools), picks a structure, and writes in an informational style: figures, tables, no filler. - Polish and deploy. Service logos, correct plural forms, a 1200×630 OG image, a check of every internal link in
dist/, then deploy with the Vercel CLI and a check of the live URLs.
Shortened "site" step template
The working templates were written in Russian; here is a shortened, translated version:
You are building a static catalog site in the CURRENT folder. Work only inside it.
## Niche
"{{NICHE}}" — a catalog and ranking. {{NICHE_DESCRIPTION}}
Audience: {{AUDIENCE}}. Site language: Russian.
## Stack (strict)
- Astro, output: 'static', no SSR and no adapters.
- No React/Vue: only .astro components and plain CSS.
- No interactive generators: create package.json by hand.
## Data
src/data/tools.json — {{COUNT}} real, existing services.
Fields: slug, name, url, short, description, free_plan, price_from,
features, pros, cons, best_for, rating + {{FILTER_FIELDS}}.
## Pages
/ (JS filters, card grid), /tools/[slug]/, /compare/,
/articles/ + 3 articles, /about/, 404.
## Done when
npm run build passes without errors, dist/ contains every page,
the sitemap, and robots.txt.
Temporary files go to ./.tmp/ only. /tmp and paths outside the project are blocked.
Experiment setup
- Dates: October 21–22, 2026.
- Models: eight free OpenCode models: Beam, DeepSeek V4.1 Flash, GLM-5.3-Flash, MiniMax M3.1 Flash, MiMo-V2.6-Flash, Nemotron 3 Ultra, Flint 40B, LongCat 2.5 Preview.
- Tasks: 9 runs, one niche per site. The sites are service catalogs in different topics; the niches are not disclosed in this article.
- Load: up to 6 sessions at the same time. Times in the tables are inflated by the parallel load — more on that below.
- Sample: one or two sites per model. This is a comparison on practical tasks, not a benchmark.
Summary by model
| Model | Sites | Site → article → deploy, min | Reached production | Main takeaway |
|---|---|---|---|---|
| Beam | 1 | 12 → 7 → 11 | on its own, no failures | Fastest and most trouble-free. Unavailable from Russia |
| DeepSeek V4.1 Flash | 2 | 60–68 → 18 → 24–37 | on its own in 1 of 2 runs | Reliable builder, no build fixes needed. Slow under load |
| GLM-5.3-Flash | 1 | 27 → 9 → 29 | after a deploy restart | Steady result, the most table-heavy article (5 tables) |
| MiniMax M3.1 Flash | 2 | 25–28 → 5–6 → 55–145 | 0 of 2 on its own | Deepest articles and self-checking, but hangs and typos |
| MiMo-V2.6-Flash | 1 | 45 → 31 → 29 | after a restart | Slow, article is thinner in structure |
| Nemotron 3 Ultra | 1 | 25 → 47 → 27 | on its own | Very slow article, markup artifacts in headings |
| Flint 40B | 0 | — | no | Site did not build in 3 attempts: endpoint unavailable |
| LongCat 2.5 Preview | 0 | — | no | Server error on the probe request |
Deploy time includes step restarts: with MiniMax, an unavailable endpoint and closed sessions forced the step to be started again.
Metrics per run
| Run | Site, min | Article, min | Deploy, min | Build fixes | Pages | Article, chars | H2 / tables / external links |
|---|---|---|---|---|---|---|---|
| Beam | 12 | 7 | 11 | 0 | 21 | 11,940 | 10 / 2 / 2 |
| GLM-5.3-Flash | 27 | 9 | 29 | 0 | 21 | 12,857 | 9 / 5 / 0 |
| DeepSeek V4.1 Flash, #1 | 60 (timeout) | 18 | 37 | 0 | 21 | 11,921 | 9 / 2 / 0 |
| DeepSeek V4.1 Flash, #2 | 68 | 18 | 24 | 0 | 21 | 10,639 | 10 / 2 / 4 |
| MiniMax M3.1 Flash, #1 | 25 | 5 | 55 | 0 | 21 | 11,198 | 9 / 4 / 0 |
| MiniMax M3.1 Flash, #2 | 28 | 6 | 145 | 0 | 21 | 11,445 | 10 / 1 / 1 |
| MiMo-V2.6-Flash | 45 | 31 | 29 | 1 | 21 | 11,980 | 9 / 1 / 0 |
| Nemotron 3 Ultra | 25 | 47 | 27 | 1 | 19 | 12,540 | 8 / 3 / 7 |
| Flint 40B | 9 | — | — | 2 (failed) | — | — | — |
The first DeepSeek run hit the 60-minute timeout on the "site" step, yet the build passed. For comparison, a separate solo DeepSeek run took 14 minutes for the site, 3 more to fix the build, 4.5 for the article (about 11k characters and 10 web searches), and 9 for polish and deploy. Under parallel load the "site" step of the same model stretched 4–5 times.
What the finished sites look like
- 0 broken internal links on all 8 sites, 0 service phrases in the public text.
- 19–21 pages per site, 12 services with logos, the home page and the article return 200.
- Articles of 10.6–12.9k characters, 8–10 sections, 1 to 5 tables. Filler phrases ("is considered", "it is worth noting") appear 0 to 3 times per article.
- The design is decent everywhere, but the models converge on one default look: cream background, serif headings, uppercase monospace labels. For a network of sites that must not look alike, set the style in the brief: palette, fonts, card shape.
Models one by one
Beam
The fastest run and the only one without a single failure: 30 minutes from an empty folder to a live site. An 11.9k-character article with 10 sections and clean text. The limit is availability: it is blocked in several countries, including Russia (by IP).
DeepSeek V4.1 Flash
Never broke a build and wrote tidy articles with few filler phrases. With six sessions running, the "site" step took 60–68 minutes. In one of the two runs the agent closed itself: it reached for a temporary folder outside the project, and OpenCode ended the session.
GLM-5.3-Flash
The longest article (12.9k characters) and five tables. The draft contained hybrid words mixing Latin and Cyrillic letters, but the model found and cleaned them itself during polishing. The deploy failure came from a conflict in the OpenCode database, not from the model.
MiniMax M3.1 Flash
The best substance: the deepest articles and self-checking — the agent wrote its own scripts to check links and layout with Playwright. Downsides: hangs, an unavailable endpoint, typos. Neither of the two runs reached production without a manual restart.
MiMo-V2.6-Flash
Site in 45 minutes, article in 31, one build fix. The article has one table and no external links. It works, but it is slower and thinner than the rest.
Nemotron 3 Ultra
The site took 25 minutes plus one build fix (another 22 minutes), and the article took 47 minutes. Anchors like {#formatting-issues} were left in headings, some links use the URL as link text, and there are 19 pages instead of 21. On the plus side, it has the most external links: 7.
What broke and how it was fixed
| Problem | Cause | Fix |
|---|---|---|
| "Failed to execute statement" in parallel runs | All sites lived in one git repository, so OpenCode had a single project in its local database | A separate git init for each site |
| Session closes in the middle of a step | The agent reaches for /tmp, and access outside the project is blocked | A rule in every template: temporary files only in ./.tmp/ |
| A step hangs for hours | Model or endpoint hang; opencode run --continue also stalled | 60-minute timeout, a fresh session per step, one retry on failure |
| Local servers left running | The agent checked the site and did not stop the server | A rule: stop the server after checking |
| Competition for resources | 6 sessions at once | A practical limit is 2–3 parallel sessions |
Terms of free access
- Only through OpenCode. A direct API request to a free model returns 403
FreeTierErrorexplaining that the free tier works only inside OpenCode. No key is needed. - Web search is free. The search built into OpenCode runs through the OpenCode server and needs no separate subscription.
- The list changes daily. During the experiment two free models disappeared from the list in one day and MiniMax appeared. For the current list, see the OpenCode page and the documentation.
Data policies differ between models:
| Model | What is known about data |
|---|---|
| DeepSeek, GLM, MiniMax, LongCat | The provider states a zero-retention policy: requests are not stored |
| MiMo, Flint | Data may be used for training |
| Nemotron | NVIDIA trial access with request logging |
| Beam | Unavailable from several countries, including Russia |
For public catalogs this does not matter much, but keep private code, keys, and client data away from models that may train on requests.
Takeaway: a model per step, not per site
| Step | Who to assign | Why |
|---|---|---|
| Building the site and fixing the build | Beam; fallback — DeepSeek V4.1 Flash | The fastest and the most reliable build |
| Deploy | Beam or DeepSeek V4.1 Flash | Beam finished the deploy without restarts, DeepSeek did in one run of two |
| Article | MiniMax M3.1 Flash with proofreading, or GLM-5.3-Flash | Depth and tables; MiniMax needs a typo check, GLM a check for hybrid words |
| Not for long steps | Nemotron 3 Ultra, MiMo-V2.6-Flash | An article takes 30–47 minutes, with a thinner result |
Practical rules for a pipeline like this:
- Give every site its own git repository and every step a fresh session.
- Cap the step time (60 minutes turned out to be a sensible limit) and retry on failure.
- Forbid temporary files outside the project folder — it is the most common reason for closed sessions.
- Run 2–3 sessions in parallel, not 6: step time drops noticeably.
- Set the style in the brief, otherwise the sites come out identical.
- Verify results with a script: build, a 200 response, broken links, service phrases in the text.
If you are only setting up OpenCode, start with the guide how to use free LLMs in Cursor, Cline, and OpenCode, and see the page of free models for coding for model picks.