[{"data":1,"prerenderedAt":443},["ShallowReactive",2],{"navigation_docs":3,"-decisions-0016-process-lean-mode-and-agent-roles":223,"-decisions-0016-process-lean-mode-and-agent-roles-surround":438},[4,26,96,105,202],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":25},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":16,"path":17,"stem":18,"icon":19},"The first app","\u002Fgetting-started\u002Ffirst-app","1.getting-started\u002F2.first-app","i-lucide-play",{"title":21,"path":22,"stem":23,"icon":24},"The first test","\u002Fgetting-started\u002Ffirst-test","1.getting-started\u002F3.first-test","i-lucide-flask-conical",false,{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":25},"Guide","i-lucide-book-open","\u002Fguide","2.guide",[32,37,42,47,52,57,62,67,72,77,81,86,91],{"title":33,"path":34,"stem":35,"icon":36},"Components","\u002Fguide\u002Fcomponents","2.guide\u002F01.components","i-lucide-component",{"title":38,"path":39,"stem":40,"icon":41},"Inputs and forms","\u002Fguide\u002Finputs-and-forms","2.guide\u002F02.inputs-and-forms","i-lucide-text-cursor-input",{"title":43,"path":44,"stem":45,"icon":46},"Scrolling and viewports","\u002Fguide\u002Fscrolling","2.guide\u002F03.scrolling","i-lucide-scroll-text",{"title":48,"path":49,"stem":50,"icon":51},"Overlays and layers","\u002Fguide\u002Foverlays","2.guide\u002F04.overlays","i-lucide-layers",{"title":53,"path":54,"stem":55,"icon":56},"Styles and theme","\u002Fguide\u002Fstyles","2.guide\u002F05.styles","i-lucide-palette",{"title":58,"path":59,"stem":60,"icon":61},"Composables","\u002Fguide\u002Fcomposables","2.guide\u002F06.composables","i-lucide-puzzle",{"title":63,"path":64,"stem":65,"icon":66},"Widgets","\u002Fguide\u002Fwidgets","2.guide\u002F07.widgets","i-lucide-blocks",{"title":68,"path":69,"stem":70,"icon":71},"The assistant","\u002Fguide\u002Fassistant","2.guide\u002F08.assistant","i-lucide-message-square",{"title":73,"path":74,"stem":75,"icon":76},"The same app on the web","\u002Fguide\u002Fweb","2.guide\u002F09.web","i-lucide-globe",{"title":78,"path":79,"stem":80,"icon":24},"Testing","\u002Fguide\u002Ftesting","2.guide\u002F10.testing",{"title":82,"path":83,"stem":84,"icon":85},"Running and packaging","\u002Fguide\u002Fpackaging","2.guide\u002F11.packaging","i-lucide-package",{"title":87,"path":88,"stem":89,"icon":90},"The terminal contract","\u002Fguide\u002Fterminal","2.guide\u002F12.terminal","i-lucide-square-terminal",{"title":92,"path":93,"stem":94,"icon":95},"Benchmarks","\u002Fguide\u002Fbenchmarks","2.guide\u002F13.benchmarks","i-lucide-gauge",{"title":97,"icon":98,"path":99,"stem":100,"children":101,"page":25},"AI and agents","i-lucide-bot","\u002Fai","3.ai",[102],{"title":97,"path":103,"stem":104,"icon":98},"\u002Fai\u002Fagents","3.ai\u002F1.agents",{"title":106,"icon":107,"path":108,"stem":109,"children":110},"Decisions","i-lucide-scale","\u002Fdecisions","4.decisions",[111,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198],{"title":112,"path":108,"stem":113,"icon":46},"All decisions","4.decisions\u002Findex",{"title":115,"path":116,"stem":117},"0001. kyo-ui is the DSL","\u002Fdecisions\u002F0001-kyo-ui-is-the-dsl","4.decisions\u002F0001-kyo-ui-is-the-dsl",{"title":119,"path":120,"stem":121},"0002. jatatui renders the cells","\u002Fdecisions\u002F0002-jatatui-renders-the-cells","4.decisions\u002F0002-jatatui-renders-the-cells",{"title":123,"path":124,"stem":125},"0003. Pin Kyo 1.0.0-RC7 and JDK 25","\u002Fdecisions\u002F0003-pin-kyo-rc7-and-jdk-25","4.decisions\u002F0003-pin-kyo-rc7-and-jdk-25",{"title":127,"path":128,"stem":129},"0004. Public Kyo APIs only","\u002Fdecisions\u002F0004-public-kyo-apis-only","4.decisions\u002F0004-public-kyo-apis-only",{"title":131,"path":132,"stem":133},"0005. A SOFT frame contract and an own watcher loop","\u002Fdecisions\u002F0005-soft-frame-contract-and-own-watcher-loop","4.decisions\u002F0005-soft-frame-contract-and-own-watcher-loop",{"title":135,"path":136,"stem":137},"0006. Purity: edge files, lint and a pure painter","\u002Fdecisions\u002F0006-purity-edge-files-and-lint","4.decisions\u002F0006-purity-edge-files-and-lint",{"title":139,"path":140,"stem":141},"0007. Compiler flags from sbt-tpolecat","\u002Fdecisions\u002F0007-compiler-flags-from-sbt-tpolecat","4.decisions\u002F0007-compiler-flags-from-sbt-tpolecat",{"title":143,"path":144,"stem":145},"0008. The artifact split: runner, app, testkit and core","\u002Fdecisions\u002F0008-artifact-split-runner-app-testkit-core","4.decisions\u002F0008-artifact-split-runner-app-testkit-core",{"title":147,"path":148,"stem":149},"0009. tui4s-use and tui4s-widgets, cross-built","\u002Fdecisions\u002F0009-use-and-widgets-cross-built","4.decisions\u002F0009-use-and-widgets-cross-built",{"title":151,"path":152,"stem":153},"0010. The flagship assistant is the blueprint of a real app","\u002Fdecisions\u002F0010-the-flagship-assistant-as-blueprint","4.decisions\u002F0010-the-flagship-assistant-as-blueprint",{"title":155,"path":156,"stem":157},"0011. The web target: a standalone Scala.js app and one theme","\u002Fdecisions\u002F0011-web-target-standalone-scalajs-and-one-theme","4.decisions\u002F0011-web-target-standalone-scalajs-and-one-theme",{"title":159,"path":160,"stem":161},"0012. The documentation is example-first","\u002Fdecisions\u002F0012-documentation-is-example-first","4.decisions\u002F0012-documentation-is-example-first",{"title":163,"path":164,"stem":165},"0013. Benchmarks in the repository, with their own build","\u002Fdecisions\u002F0013-benchmarks-in-repo-with-own-build","4.decisions\u002F0013-benchmarks-in-repo-with-own-build",{"title":167,"path":168,"stem":169},"0014. Release per module, by tag, as 0.1.0-RC1","\u002Fdecisions\u002F0014-release-per-module-tags-and-rc1","4.decisions\u002F0014-release-per-module-tags-and-rc1",{"title":171,"path":172,"stem":173},"0015. Packaging: the AOT cache in the start scripts, native-image as an option","\u002Fdecisions\u002F0015-packaging-aot-cache-and-native-image","4.decisions\u002F0015-packaging-aot-cache-and-native-image",{"title":175,"path":176,"stem":177},"0016. Process: lean mode and agent roles","\u002Fdecisions\u002F0016-process-lean-mode-and-agent-roles","4.decisions\u002F0016-process-lean-mode-and-agent-roles",{"title":179,"path":180,"stem":181},"0017. Deferred: templates, mouse, the kitty keyboard protocol and Windows","\u002Fdecisions\u002F0017-deferred-templates-mouse-and-kitty","4.decisions\u002F0017-deferred-templates-mouse-and-kitty",{"title":183,"path":184,"stem":185},"0018. pini4s is a vendored Git submodule","\u002Fdecisions\u002F0018-pini4s-as-a-vendored-submodule","4.decisions\u002F0018-pini4s-as-a-vendored-submodule",{"title":187,"path":188,"stem":189},"0019. Upstream issues are drafts that the user posts","\u002Fdecisions\u002F0019-upstream-kyo-issues-as-drafts","4.decisions\u002F0019-upstream-kyo-issues-as-drafts",{"title":191,"path":192,"stem":193},"0020. Release from the Actions form","\u002Fdecisions\u002F0020-release-from-the-actions-form","4.decisions\u002F0020-release-from-the-actions-form",{"title":195,"path":196,"stem":197},"0021. The rulebook is CONTRIBUTING.md","\u002Fdecisions\u002F0021-the-rulebook-is-contributing-md","4.decisions\u002F0021-the-rulebook-is-contributing-md",{"title":199,"path":200,"stem":201},"0022. The logo is text","\u002Fdecisions\u002F0022-the-logo-is-text","4.decisions\u002F0022-the-logo-is-text",{"title":203,"icon":204,"path":205,"stem":206,"children":207,"page":25},"Project","i-lucide-compass","\u002Fproject","5.project",[208,213,218],{"title":209,"path":210,"stem":211,"icon":212},"Roadmap","\u002Fproject\u002Froadmap","5.project\u002F1.roadmap","i-lucide-map",{"title":214,"path":215,"stem":216,"icon":217},"Contributing","\u002Fproject\u002Fcontributing","5.project\u002F2.contributing","i-lucide-git-pull-request",{"title":219,"path":220,"stem":221,"icon":222},"Security","\u002Fproject\u002Fsecurity","5.project\u002F3.security","i-lucide-shield",{"id":224,"title":175,"body":225,"description":431,"extension":432,"links":433,"meta":434,"navigation":435,"path":176,"seo":436,"stem":177,"__hash__":437},"docs\u002F4.decisions\u002F0016-process-lean-mode-and-agent-roles.md",{"type":226,"value":227,"toc":420},"minimark",[228,233,237,241,244,248,293,297,345,349,379,383,408,412],[229,230,232],"h2",{"id":231},"status","Status",[234,235,236],"p",{},"Accepted",[229,238,240],{"id":239},"date","Date",[234,242,243],{},"2026-10-14 (lean mode), 2026-10-17 (D14), 2026-10-19 (D19, D20), 2026-10-20 (the notes leave the repository).",[229,245,247],{"id":246},"context","Context",[249,250,251,255,258,266,282],"ul",{},[252,253,254],"li",{},"tui4s was built by an agent session for one maintainer. The session runs agents in workflows on a cloud machine with 4 CPUs (at most 2 agents at once) or on the user's Mac.",[252,256,257],{},"The first workflows had 6 to 9 agents (an implementer, three reviewers, three skeptics, a fixer, a final-runs agent) and cost about 1.3 to 2.6 M tokens each.",[252,259,260,261,265],{},"On 2026-10-14 the user asked to \"use ",[262,263,264],"span",{},"the session model"," very sparsely and cut corners a little bit (not in the api, behind the scenes)\". On 2026-10-17: \"No tengo tantos créditos\". On 2026-10-19: \"go cheaper\".",[252,267,268,269,273,274,277,278,281],{},"The skills ",[270,271,272],"code",{},"functional-design"," and ",[270,275,276],{},"scala-functional-design"," were copied into ",[270,279,280],{},".claude\u002Fskills"," as \"temporary\" (D15 kept them). By 2026-10-19 the repository copy was stale by about 4,600 lines.",[252,283,284,285,288,289,292],{},"The notes (",[270,286,287],{},".work\u002F",", git-ignored) live on the branch ",[270,290,291],{},"wip\u002Fhandoff"," (D-32): decisions, plans, spike reports, upstream drafts.",[229,294,296],{"id":295},"decision","Decision",[249,298,299,302,305,312,315,322,325,335],{},[252,300,301],{},"Lean mode (D14): the session steers only. Every task that can be delegated runs as an agent on a cheaper model, also the reviews.",[252,303,304],{},"Workflow shape 4: an implementer, one reviewer, a fixer. A skeptic (an adversarial reviewer) only for concurrency or terminal-restore code. A single-agent phase still runs the full check and the PTY run when terminal code changed (D20).",[252,306,307,308,311],{},"Not cut: the public API in its final shape, Scaladoc, the seal of ",[270,309,310],{},"tui4s.internal",", 0 warnings, green CI.",[252,313,314],{},"Parallel streams use one git worktree each (L5: docs and bench).",[252,316,317,318,321],{},"Changed text carries a mark ",[270,319,320],{},"\u002F\u002F claude \u003Cdate>: created|changed (\u003Cphase>)",". For code that a phase rewrites, the history moves to the commit text (D2 a).",[252,323,324],{},"AGENTS.md and the docs use ASD-STE100 (Simplified Technical English).",[252,326,327,328,334],{},"The skills left the repository (D19). The source of truth is ",[329,330,331],"a",{"href":331,"rel":332},"https:\u002F\u002Fgithub.com\u002Fyuri4n\u002Ffunctional-design-skills",[333],"nofollow",".",[252,336,337,338,341,342,344],{},"The notes are not part of the product. The working notes (the ",[270,339,340],{},".work"," directory and the branch ",[270,343,291],{},") leave the repository when these records are published. These records summarize the decision log of the notes.",[229,346,348],{"id":347},"alternatives-considered","Alternatives considered",[249,350,351,358,364,370],{},[252,352,353,357],{},[354,355,356],"strong",{},"Full review panels"," (shape 6 or 8 with three skeptics). Used for C1 to T2. Dropped for cost; the skeptic seat stays only where a bug is hard to see (concurrency, terminal restore).",[252,359,360,363],{},[354,361,362],{},"The skills in the repository as project skills"," (D15, 2026-10-17). Reversed by D19: the copy went stale by about 4,600 lines.",[252,365,366,369],{},[354,367,368],{},"The notes kept as a wiki."," The user asked for \"GitHub Projects and the wiki as much as you can\" (2026-10-11). The cloud session had no wiki credentials, and a private repository wiki needs a paid plan. The ADRs replace the notes.",[252,371,372,378],{},[354,373,374,375,377],{},"The notes kept on ",[270,376,291],{}," forever."," Rejected on 2026-10-20 under the user's instruction to clean up the branches, the docs and the stale content.",[229,380,382],{"id":381},"consequences","Consequences",[249,384,385,388,391,394,401],{},[252,386,387],{},"Good: each phase costs a fraction of a full panel, and the checks that protect users stay.",[252,389,390],{},"Good: the ADRs give a reader the \"why\" without the agent notes.",[252,392,393],{},"Bad: one reviewer can miss what three reviewers and their skeptics find.",[252,395,396,397,400],{},"Bad: the code holds about 1,800 ",[270,398,399],{},"\u002F\u002F claude \u003Cdate>"," marks in 280 files. They are history, not documentation; a cleanup decision is open.",[252,402,403,404,407],{},"Bad: the PR template of the program had one section for each rule P-1 to P-14 of the plan, and it named a notes path. An outside contributor needs a short template. L6 replaced it: ",[270,405,406],{},".github\u002Fpull_request_template.md"," has \"What changes\" and a checklist of the checks of AGENTS.md.",[229,409,411],{"id":410},"references","References",[249,413,414,417],{},[252,415,416],{},"Decision log: eleventh round (agent roles), fourteenth round (lean mode), fifteenth round (D14, D15), sixteenth round (D18, D19, D20). Plan: D-32.",[252,418,419],{},"CONTRIBUTING.md: the ASD-STE100 note at the top, \"Purity\" (the skills item). AGENTS.md: the rules for agents only. ",{"title":421,"searchDepth":422,"depth":422,"links":423},"",2,[424,425,426,427,428,429,430],{"id":231,"depth":422,"text":232},{"id":239,"depth":422,"text":240},{"id":246,"depth":422,"text":247},{"id":295,"depth":422,"text":296},{"id":347,"depth":422,"text":348},{"id":381,"depth":422,"text":382},{"id":410,"depth":422,"text":411},"The session steers and agents do the work in a small shape (implementer, one reviewer, fixer); a skeptic reviews only concurrency and terminal-restore code; the working notes are not part of the product.","md",null,{},true,{"title":175,"description":431},"y9YdTLuOwwCfNwteYAiGX5edt8RC6ce0RfMjX3ZUhew",[439,441],{"title":171,"path":172,"stem":173,"description":440,"children":-1},"The JVM start scripts have the startup flags by default and use a JDK 25 AOT cache after one run of bin\u002Faot-train; tui4s-runner carries native-image metadata for the crossterm JNI, a script builds a native image, and CI smoke-tests it on GraalVM Community.",{"title":179,"path":180,"stem":181,"description":442,"children":-1},"Four features stay out of 0.1: a ui\"\"\"...\"\"\" template interpolator (intent only), mouse input, the kitty keyboard protocol (so Shift-Enter is unreported in most terminals) and a supported Windows port.",1792528757197]