Repository navigation
site: genswarms.com as the operating system for AI workforces, in six languages - #102
Conversation
Positions GenSwarms as the operating system for AI workforces, built on the chosen cinematic-story prototype; folds in the 2026-09-25 site review fixes and makes the page translation-ready. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… figure model Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…matic prototype) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…markup Adds prune:true to system() for still figures so each still SVG contains only the groups for its own stage (agents, boundary rects, labels, token and log blocks not in that stage's stage-list are omitted); the pinned live figure keeps prune:false since it morphs across all stages. Moves the last JS-assembled copy (CAPS/ARIA caption/aria arrays, and the copy- button's Copy/Copied/Select-and-copy strings) into the markup: story.js now reads the active still's figcaption/svg[aria-label] and the copy button's data-idle/data-copied/data-fallback attributes. Brings website/index.html from ~401 KB to ~151 KB, under the 150 KB budget. Verified stills and the live figure render identically before and after via Playwright screenshots at 1440x900 and 390x844. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- "what tools, data and systems each agent can access" (owner edit) - How it works rows and Security lists set to spec §4.2/§4.3 - Footer: description, skill.md and llms.txt links, © 2026 GenLayer Labs · MIT License - Comparison cells for LangGraph, CrewAI and AutoGen checked against their official docs (sources in design/comparison-sources.md); Draft stamp removed - Tests for banned claims, owner edits, v0.2.0 facts and the Draft stamp Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sync the pinned stage to the step nearest the 46% viewport line on load, resize, and mode changes, so deep links and breakpoint crossings never leave a stale figure. Add a real skip-to-content link (#os) with scroll-padding-top so keyboard focus never lands under the fixed header. Add a browser test (Playwright) covering deep-link sync, resize continuity, focus visibility, and the no-JS/reduced-motion baseline where every step's still figure is visible without a pinned column. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… without IO The browser test only exercised deep-link/resize sync in a context where IntersectionObserver was still present and masked timing gaps (its own callback, not our load/resize handlers, was what actually kept the stage current). Add a scenario that deletes IntersectionObserver via addInitScript before any page script runs, then checks a deep link, a no-hash reload with restored scroll, and a resize cycle. Verified this scenario fails on the pre-fix commit (92766aa) in a throwaway worktree, isolating exactly the mechanism Task 4 added. Running that scenario against the real fix surfaced a genuine gap: a deep link's native fragment-scroll is smooth-animated (html has scroll-behavior:smooth) and can take longer than the load event to settle, and a load-only sync never re-checks afterward. Add a rAF-throttled 'scroll' listener calling the same sync() so the stage keeps converging on the correct step through the whole animation (and as a general fallback for engines without IntersectionObserver), mirroring what IO already did for browsers that have it. Also narrow the focus-check's nav exemption from any 'nav' to 'header nav' specifically, so the footer's nav isn't accidentally exempted. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Figure 1 shows the workforce ahead: the seven teams of figure 8 drawn faint (ring + three members) around the single agent, whose spokes now pass between them. - Ink hierarchy and colour discipline: declared paths solid 1.8, hand wiring dotted and light, boundaries dashed and light; clay only for the moving request, the lit escalation and failure (the resting escalation route and the cluster human are ink). - Larger, legible drawings: label sizes raised (L 20/16/26/16, P 16/14.5/ 20/14.5); the figure column takes min(58vw, 880px) (60vw below 1280px, where labels step up and long team names wrap); phone stills bleed to the screen edge. All figure text is >= 13px at 1440, 1280, 1024, 390 and 360px wide. - Smooth morphs: a camera group recentres each stage, agents glide with an ease-out and stagger, departures fade at once, arrivals wait for them. - Stronger display scale sized to the text column; every step at least a screen tall with 18vh of air (56px on phones); no bordered chip buttons (secondary actions and the nav GitHub link are underlined links; nav targets 44px). - Build-time minification of inlined CSS/JS and markup indentation, and grouped agent-position rules: 148,345 bytes (was 152,291). - Tests: hero workforce, no chips/eyebrows, minification; browser checks for figure text size, clay discipline, step collisions and text running under the pinned figure. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n the gutter - Pinned mode now needs a window at least 600px tall; shorter windows get the in-flow stills (width-driven, >= 13px). - Under 800px tall (as under 1280px wide) the pinned drawing's small labels step up to 18.5 units and long team names wrap; the stage caption and padding tighten so the drawing keeps its height. - Phone stills sit inside the 16px gutter: the portrait crops are narrowed to the drawing's content (x 12..388), labels raised (ts 15.5, log 15), the supervisor moved in, and event rows wrap against the crop. - Browser test: label sizes at 1366x657 and 1280x600 (pinned) and 1280x560 / 1024x560 (in flow); every painted part of a phone figure inside the 16px gutter; a still never runs into its own caption. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Adds website/tests/browser/audit.cjs sweeping 14 widths (320-1440px, including landscape phones and short laptop heights) at both default and 24px root font size, scrolled through every screenful, checking for horizontal overflow, oversized pinned figures, story text running under the pinned figure, sub-12px text, console/network errors, and (on phones) tap targets under 44px. First run (RED) found real issues, all fixed in website/src: - footer brand link and footer nav links (Docs, GitHub, License, skill.md, llms.txt) were 23-24px tall on phones; give .brand and .foot nav a the same 44px min tap target the header nav already uses. - Chrome's automatic favicon.ico request 404'd (console error); add an inert `<link rel="icon" href="data:,">`. The audit's own `.cine .stage-col` selector was also a bug: that element is the CSS grid track backing the pinned figure's sticky positioning, so it always spans the full scroll height of the story column by design (confirmed empirically) — comparing its height to the viewport failed at every width in pinned mode, not just short ones. Fixed to check `.stage`, the actual sticky-pinned box, which is always exactly 100vh. audit ok: 14 sizes × 2 font sizes. story.cjs and the 15 node --test cases stay green; website/index.html rebuilt (148650 bytes, --check passes). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Review fix round 1. The previous fix measured `.cine .stage`, but that
element's height is fixed at 100vh by CSS (position:sticky;height:100vh),
so it can never fail the ">viewport" comparison — a permanent no-op that
would silently pass a real regression.
Now measures what the reader actually sees: the rendered `.cine .sys.live`
figure (plus its caption, part of the same pinned block), and only while
`.stage` is actually in its pinned (stuck) state — `.stage`'s own top is
~0. Without that guard, the check false-positived at the very top/bottom
of the story column, where `.stage` is legitimately in normal (unstuck)
flow and scrolls off-screen with the rest of the page.
Proved with an injected regression (.cine .sys.live{height:150vh
!important;max-height:none!important;flex-shrink:0!important} — the
flex-shrink override was needed because the figure's flex layout
auto-shrinks an overlong child, so a naive height override alone doesn't
actually overflow): the audit fails with "pinned figure taller than
viewport" while injected, and passes (`audit ok: 14 sizes × 2 font
sizes`) once removed.
Also narrows the phone tap-target exemption from a blanket `.closest
('p,li')` (which incidentally also exempted the .rail buttons for
sitting in an <li>) to `a` elements only, inside running text/prose
lists. .rail's buttons are still correctly excluded whenever measured on
a phone-shaped viewport, but only because they're actually hidden there
(offsetParent), not via a structural carve-out — so they'd be checked
normally if ever shown at that size.
story.cjs and node --test stay green; website/index.html is unchanged
(no website/src edits this round).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Head: canonical link, content-language, OG/Twitter tags, real favicon links (replacing the Task 6 data: stopgap), and a SoftwareApplication JSON-LD block for v0.2.0. - llms.txt rewritten to the operating-system positioning with the spec's 4.2 mechanism table as bullets. - 404.html: "This page ran off the swarm." message, 44px tap target on the home link. - sitemap.xml: lastmod set to the merge date. - New website/tools/og.cjs renders og-image.png via Playwright; regenerated it against the rebuilt page (headline + Figure 1 fully visible). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Review finding: 404.html defined its own --ink-2/--ink-3/--line-2 tokens with values that don't match index.html's :root, so the page wasn't actually on the site palette despite the report's claim. - :root now mirrors index.html's real tokens by name and value: --sand #E9E0D2, --ink #33301f, --ink-2 #5f5946, --clay #A84E36. Dropped --paper/--ink-3/--line-2/--accent, which 404 doesn't need and which don't exist on the main page. - The mark's decorative line strokes now use var(--ink) at reduced opacity, matching the page's own convention for faint ink strokes (.org-ghost, .ring, etc. in page.css) instead of an invented gray. - The "Error 404" label moved from --clay to --ink-2: clay on sand is 4.22:1 contrast (fails the 4.5:1 requirement for normal-size text) and the design spec reserves clay for moving/active/failure states, not static labels. - .btn-ghost dropped its bordered-chip look (an unlisted --line-2 border) for an underlined link, which is what the main page's own .btn-ghost actually does (page.css: border:0;text-decoration: underline) — page.css's own test forbids bordered chip buttons. - Kept the 44px min-height tap target and all text >= 12px; verified both by rendering 404.html in Chrome (Playwright) and reading a screenshot, and by measuring computed sizes in-page (13-72px text, 44px button height for both buttons). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…the landing build Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Fixes I1-I3 and M1/M2/M4 from .superpowers/sdd/2026-09-25-landing-page-plan/final-review.md: - read the pinned figure number from markup (.fig-n) instead of building "Figure N" in story.js; guard it in the no-copy-in-script test - label Fig. 5's animated request and Fig. 8's team shapes as illustrative, per spec §4.4, with a dedicated coverage test - darken agent_blocked's clay text (--clay-d) to meet 4.5:1 contrast on sand - tone "isolated, supervised processes" down to "separate" in metadata and llms.txt, and soften the SubZeroClaw "each worker runs" overclaim - copy button now falls back to selecting the prompt text when the Clipboard API is unavailable, instead of doing nothing - bump the Pages workflow to Node 22 (Node 20 is EOL) node --test website/tests/*.mjs: 18/18 pass. node website/build.mjs --check: up to date, 150,491 bytes. Playwright story.cjs and audit.cjs both pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
v1 invented a charged-twice ticket and a human escalation step resting on agent_blocked, which only reports an interactive tmux coding client waiting at a prompt. v2 tells the OS story from processes, declared paths, objects, signed packages (gsp/swarmidx), the IR and the control surface. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Story steps, How it works (10 rows), guarantees / not yet and the close follow design/2026-09-25-copy-deck-v2.md. Drops v1's turn block, the determines list and the charged-twice example; figure alt text and crops for the new stages; llms.txt gains the services, packages and state rows. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Stage 2 band reads 'operating system'; stage 3 adds one agent crashing and restarting in the grid; stages 4-7 follow one support swarm (telegram, triage, research, answer) through declared paths with a dropped off-graph message, objects vs agents, swarmidx packages verified, and the swarm as a seed plus change log with a refused change; stage 8 shows unnamed swarms. Removes the classifier-to-verifier team, the human glyph, agent_blocked and the team names. OG image regenerated (hero line gone). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Headlines, rows and the close line from deck v2; illustration notes on stages 4-7; real event, op and package names in the figures; no v1 story strings in index.html or llms.txt; failure text contrast >= 4.5:1 and no clay outside moving work in the browser story test. Word caps raised to the approved deck's length (540 prose / 720 page). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Stage 7: the refused change is shown after the log without a seq, as a scale_agent_group past the 100-agent cap (OpPolicy agent_cap_exceeded runs before a seq is assigned; refused ops are never logged). Alt text updated. - Budget: dotted, arrowless lines from answer and research, labelled 'model calls' (landscape); budget sits inside the graph on phones. - Stage 4 log adds answer -> telegram; stage-8 stubs touch each shape; 'Swarms' label moved clear of the shapes; legend agent gets its boundary. - --crash-d darkened to #a2412b (4.83:1 on sand); dead CSS removed. - Word caps pinned at the applied counts (530 prose / 711 page). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…uard
English in website/src stays the single source. Every string the page
shows or reads out (text, title and snippets, JSON-LD, aria-labels, figure
alt text and captions, every SVG label, the copy button, the skip link,
the 404 and the suggestion bar) goes through one lookup, t(), at build
time. `build.mjs --extract` records those calls into website/i18n/en.json:
145 entries with id (hash of the English), kind, where it appears,
placeholders and, for figure labels, the width budget.
- Units are whole elements with their inline markup; mixed figure lines
are templates ("refused: over the {cap}-agent cap", "restore: seed +
{n} changes"); identifiers drawn in the figures stay English.
- A translation (website/i18n/<lang>.json) builds website/<lang>/ with its
own head (lang, canonical, reciprocal hreflang + x-default, og:locale,
og:url, og-<lang>.png, content-language, JSON-LD inLanguage/url), a
no-JS header picker, footer language links and a suggestion bar that
never redirects. The sitemap, the 404 and llms.txt follow.
- Russian, Korean and Chinese use system faces (the brand fonts have no
Cyrillic, Hangul or Han) and load only JetBrains Mono plus the wordmark;
per-script title rules; translated figure labels slide, wrap or step
down to fit, and stills grow to show them.
- The build refuses, writing nothing, on a stale catalogue, missing ids,
changed markup or placeholders, a dropped protected name, a snippet over
150 (80 CJK) characters, a page over 150 KB or English left on a
translated page. It writes i18n/build.lock.json; --check verifies the
outputs, the lock and the share images (tools/og.cjs, og.lock.json);
--verify checks a served site.
With no translation files yet, every output is byte-identical to before.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- tools/pseudo.mjs writes a pseudo-translation for each language in its own writing system (accented Latin with 20% longer Spanish prose, Turkish letters, Cyrillic, Hangul, Han), keeping tags, placeholders, URLs and protected names; never committed, built into temp dirs. - tests/i18n.test.mjs (21 tests): extraction is deterministic and matches en.json; ids follow the English; the guard refuses each failure class (missing id, markup, placeholders, protected name, 150/80-character snippets, English left behind, page budget); a full pseudo build has the right head, hreflang, canonical, fonts, sitemap, 404 and llms.txt; the English page is unchanged apart from the language additions; labels wrap and stills grow; --check catches edited pages, translations, locks and share images; --verify catches a missing slash redirect and a wrong canonical. - tests/browser/i18n-audit.cjs: every version x 14 sizes (overflow, header fit, picker, pinned figure, text size, tap targets, figure labels overlapping, leaving the drawing or cut by the crop at all nine stages, console errors, failed requests), the suggestion bar (es, ko, zh-CN, zh-TW, zh-HK, en, de, dismissed, explicit choice, headless and crawler agents), the picker with JavaScript off, and the 404's language. Without a URL it serves a pseudo-locale build itself. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…er deploy - pages.yml: the deploy copy leaves out website/i18n; the build job's --check now also refuses stale translations and share images, so the last good version stays live; after deploying, `build.mjs --verify` checks every language version on genswarms.com (retried). - site-i18n.yml: pull requests touching website/ run the tests, --check and the deploy-copy check. - check-deploy-copy.sh: same excludes as pages.yml; every built language folder and its og-<lang>.png ship, and i18n/ does not. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… lastmod) - The guard now catches near-English: in Russian, Korean and Chinese any three English words in a row that match the source; in Spanish and Turkish a translation made 80% or more of the English words. Protected and keep-list names and identifiers are cut out first, so product names and the comparison cells don't trip it (tests guard against that). - _same_as_english is limited to figure labels, accessible names and strings of up to three words (names don't count); a listed figure annotation no longer trips the page check with its hand-set lines. - Tags must nest as in the English; html text refuses a bare < or >, and a bare & is escaped; titles and 404 strings are escaped. - Sitemap lastmod is per page, kept in build.lock.json and moved only when that page's output changes, so --check stays deterministic. - og.cjs honours OUT_DIR; the suggestion bar never offers Simplified Chinese when zh-TW/HK/MO/Hant is anywhere in the list; dead code gone; the header widths in page.mjs point at the CSS they mirror. - The audit fails figure text under 11px at 320px (12px from 360px); CI runs the deploy-copy check before the Pages copy and on PRs touching it. - The committed-site check test reads only committed i18n files. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Five translations built from the English catalogue (145 strings), one translator per language grounded in the GenSwarms sources and the approved GenLayer Labs / SubZeroClaw vocabulary, then a native editor pass per language. Every term decision and every editor change (before, after, reason) is in website/i18n/<lang>.ledger.md. Flagship terms: operating system (sistema operativo, 운영체제, 操作系统, операционная система, işletim sistemi); AI workforce (fuerza laboral de IA, AI 인력, AI 员工, ИИ-персонал, yapay zekâ iş gücü); supervisor kept as software, not a person (supervisor, 슈퍼바이저, 监督者, супервизор, denetleyici). Layout fixes from the audit: - the comparison table hyphenates only at 1000-1279px, where five columns share ~580px; elsewhere words stay whole (it split "agen-te" and "Lang-Smith") - Russian figure 3 band label is «ОС»: the long form rendered at 9.7-11.6px in the phone drawing at 320-375px Tests updated for a translated site: the committed English page is checked by stripping the language additions, and --check runs on the real i18n dir. Validation: 48/48 unit tests; build --check ok; deploy-copy ok; i18n-audit ok (6 languages x 14 sizes, suggestion bar, no-JS picker, 404); story ok; audit ok (14 sizes x 2 font sizes). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- ru: desktop h1 about 20% smaller at >=1000px so «Операционная» stays one word (it hyphenated twice at 1440x900) - zh: text-wrap:pretty on the lead, close paragraph and guarantee lists, so they don't end on one stranded character - es: suggestion-bar link names the language («Leer en español») - tr: figure 8's label for bringing a swarm back is a noun («geri yükleme»), like the English - ru ledger: «ОС» is used only in figure 3's band label Validation: 48/48 unit tests; build --check ok; i18n-audit ok (6 languages x 14 sizes, bar, no-JS picker, 404); audit ok; story ok. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Found by screenshotting every language at 20 screen sizes and reading them:
- the skip link peeked over the top of the page when a translation wrapped
it to two lines (Russian at 320px): it now hides at bottom:100%
- the copyable prompt split its URL mid-word on phones ("genswarms.co / m"):
under 480px the Copy button goes under the prompt
- the comparison table at 1000-1279px squeezed five columns into ~580px and
broke brand names ("Gen-Swarms", "Lang-Graph", "Deploymen/t"): its heading
now sits above a full-width table there, and cells no longer hyphenate
- portrait tablets (1024x1366) got the pinned story with a small drawing in
a sea of space: the pinned mode now also needs a landscape screen, so they
get the full-width stills
- phones on their side and 200%-zoomed laptops (844x390, 720x450) had the
hero's buttons below the fold: a smaller hero on short landscape screens
- 2560px: the pinned drawing sat at the far edge, capped at 720px: the story
keeps its 1920 proportions, centred, and the drawing grows
- short screens (1440x640): step 9's text in Spanish was taller than the
screen: pinned headlines and the triad also scale with the height (no
change from 900px tall)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- running text (story paragraphs, spec, table cells, lists, the close, the
footer) uses text-wrap:pretty: no paragraph ends on a lone word or a single
CJK character ("Версия / 0.2.0.", "恢复办 / 法。")
- Chinese: the two-line lead is balanced instead of ending on "能体。"
- Turkish: the desktop hero tops out at 96px; at 104px (1920px and up)
"işletim sistemi." was wider than its column and the full stop wrapped onto
a line of its own
- Russian and Turkish: the comparison's heading, heads and row questions no
longer hyphenate ("Lang-Graph" at 200% zoom, "Где работа-ют агенты"); from
1280px the row questions' column is a little wider instead
- 404: balanced headline and pretty text ("роя." and "集群。" stood alone)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ader sees The responsive pass found problems the audit could not see. It now fails on: - a brand or product name split across two lines (GenSwarms, LangGraph, CrewAI, AutoGen, Telegram, GitHub, swarmidx, ...), hyphenated or broken - a button whose label wraps - a headline or lead whose last line is a stranded scrap: one word of up to three letters, or one or two CJK characters (a lone full stop included) - pinned mode: a step's text taller than the screen, the rail below the screen, the caption over the rail and it runs at 18 sizes: 1024x1366 (portrait tablet), 1280x720, 1920x1080 and 2560x1440 are new. Each check was confirmed to fire on the defect it guards against (the Turkish full stop at 104px, "LangGraph" hyphenated at 200% zoom, a squeezed button). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c182a7cd2b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| </div>`, | ||
| t => step(2, t, 'Your agents need more than models and prompts.', [['', 'One agent is easy. Many agents working together need somewhere to run, rules for who talks to whom, and a way back when one fails.']]), | ||
| t => step(3, t, 'Think of it as an operating system.', [['', 'An operating system runs programs it didn’t write. GenSwarms does that for agents: it starts them, isolates them, routes their messages and restarts them when they fail.']]), | ||
| t => step(4, t, 'Every agent is a process.', [['', 'Each one runs in its own sandbox, under its own supervisor. If one crashes, it restarts and the others keep working. You set its role, its model and where it runs separately.']]), |
There was a problem hiding this comment.
Qualify the per-agent sandbox promise
When an agent uses the advertised :local backend—or a tmux client with runner: :host—it does not run in its own sandbox. docs/backends.md explicitly describes local agents as plain subprocesses with full access as the host user, so this security-sensitive claim should be limited to container- or bwrap-backed agents.
AGENTS.md reference: AGENTS.md:L13-L14
Useful? React with 👍 / 👎.
| t => step(5, t, 'Agents talk only along declared paths.', [['', 'You draw the graph. Every message is checked against it, and anything off the graph is dropped.'], ['ex', 'From here the drawings follow one swarm: a support team that answers customers on Telegram.']]), | ||
| t => step(6, t, 'Not everything needs a model.', [['', 'Objects are plain code on the same graph: a Telegram gateway, a scheduler, a budget for model spend. They do the same thing every time.']]), | ||
| t => step(7, t, 'Install what your agents need.', [['', 'Telegram, WhatsApp and email connectors, a browser, a scheduler: signed packages from the swarmidx index, verified before they load.']]), | ||
| t => step(8, t, 'A swarm is a document.', [['', 'Its definition is data, and every change is logged. A bad change is refused before it runs; a stopped swarm comes back from its database.']]), |
There was a problem hiding this comment.
Do not promise that every mutation is logged
For programmatic users calling SwarmManager mutation functions without persist: true, the documented default is false, so the change exists only in memory and disappears on restart. Saying every change is logged immediately before promising database restoration therefore misstates supported behavior; qualify this as persisted/API/CLI changes or change the persistence default.
AGENTS.md reference: AGENTS.md:L13-L14
Useful? React with 👍 / 👎.
|
|
||
| export const SEC = { | ||
| yes: ['a crash restarts one agent, not the swarm', 'messages follow declared paths only', 'bad configurations and changes are refused before they run', 'packages are verified against a signed log'], | ||
| not: ['one operator token, no per-user roles', 'at-least-once delivery, not exactly once', 'spend budgets come as a package, not in the core', 'updating a package restarts the agent; no live swap yet', '100 agents per swarm by default (configurable)'], |
There was a problem hiding this comment.
Scope the 100-agent limit to dynamic mutations
When an operator starts a swarm from an authored config containing more than 100 agents, that config is allowed: docs/intermediate-representation.md states that the default cap applies only to dynamic mutations, not operator-authored configs. Presenting this as a general per-swarm limit understates supported capacity and should instead identify it as the default dynamic-add/scale cap.
AGENTS.md reference: AGENTS.md:L13-L14
Useful? React with 👍 / 👎.
Problem and outcome
genswarms.com described GenSwarms as a runtime with a feature list. This redesign positions it as the operating system for AI workforces and argues that from the parts GenSwarms really has. The page ships in English, Spanish, Korean, Simplified Chinese, Russian and Turkish.
Non-goals: no Elixir changes. The docs site (MkDocs) is unchanged.
What changes on the site
The story. A scroll story in 8 steps, with drawings that change at each step (pinned on desktop, stacked with static drawings on phones and portrait tablets):
invalid_route).Proof sections.
design/comparison-sources.md).Honesty rules. Wording comes from
design/2026-09-25-copy-deck-v2.md. The design is indesign/2026-09-25-landing-page-design.md§4. There is no human-escalation, approval, per-user-role, memory or exactly-once claim. The simulated drawings are labelled "illustration".Build. The page is built from
website/srcby a dependency-free Node build:node website/build.mjs, with--checkfor staleness.Six languages (
/,/es/,/ko/,/zh/,/ru/,/tr/):Translation process. One translator per language, then a native editor pass. Term decisions and every edit are logged in
website/i18n/<lang>.ledger.md.Build guard. The build refuses stale or partial translations:
A lock file fingerprints each good build.
Deploy.
pages.ymlruns the tests and--checkbefore the landing page is placed. If they fail, the last good version stays live. After deploy it runs--verifyon every language version.site-i18n.ymlruns the same checks on PRs.Validation
node --test website/tests/*.mjs: 48/48 pass.node website/build.mjs --check: pages, lock and share images match their sources.design/check-deploy-copy.sh: ok.i18n-audit.cjs: 6 languages × 18 sizes, checking overflow, overlaps, text size, tap targets, split brand names, wrapped buttons, stranded words and short-screen clipping. It also covers the suggestion bar, the no-JS picker and the 404 page.audit.cjs: 14 sizes × 2 font sizes.story.cjs: ok.Before merging
Rollback
Revert the merge commit. The deploy workflow republishes the previous landing page.
🤖 Generated with Claude Code