From f9751fe8803fea355ad343f9973873118b4d3acb Mon Sep 17 00:00:00 2001 From: manager Date: Tue, 13 Oct 2026 15:59:57 +0000 Subject: [PATCH 1/2] Release: Atlas Thesis and Ladder addresses, Russian Atlas, search and answer engines - Thesis and Ladder get their own addresses (/ai-atlas/thesis, /ai-atlas/ladder). - Russian for the map, the Thesis and the Ladder. - 44px touch targets on board steps, ladder tiles and the modal close. - Each Atlas page has its own title, description, share picture and structured data in English and Russian; /ai-atlas-sitemap.xml lists them. - llms.txt and llms-full.txt carry an Atlas section; the Thesis and the Ladder are published as Markdown for answer engines. No OffSec, no CMS change, no new runtime key. Authorized by Wolf on 2026-10-13. Co-Authored-By: Claude Opus 5.5 --- .gitignore | 1 + public/ai-atlas/og-atlas-en-v2.png | Bin 0 -> 57335 bytes public/ai-atlas/og-atlas-ru-v2.png | Bin 0 -> 58794 bytes public/ai-atlas/og-ladder-en-v2.png | Bin 0 -> 36079 bytes public/ai-atlas/og-ladder-ru-v2.png | Bin 0 -> 34446 bytes public/ai-atlas/og-thesis-en-v2.png | Bin 0 -> 41569 bytes public/ai-atlas/og-thesis-ru-v2.png | Bin 0 -> 42424 bytes public/llms-full-pages/ai-atlas/ladder.md | 282 ++++++ public/llms-full-pages/ai-atlas/ru/ladder.md | 282 ++++++ public/llms-full-pages/ai-atlas/ru/thesis.md | 28 + public/llms-full-pages/ai-atlas/thesis.md | 28 + public/llms-full.txt | 324 +++++++ public/llms.txt | 11 + public/robots.txt | 1 + scripts/ai-atlas/generate-llms.mjs | 182 ++++ scripts/ai-atlas/og/render.mjs | 212 ++++ src/lib/aiAtlas/adapter.ts | 30 +- src/lib/aiAtlas/copy.json | 16 +- src/lib/aiAtlas/localize.ts | 40 + src/lib/aiAtlas/readings.ru.json | 551 +++++++++++ src/lib/aiAtlas/readings.tsx | 36 +- src/lib/aiAtlas/ru.json | 968 +++++++++++++++++++ src/lib/aiAtlas/seo.ts | 155 +++ src/pages/ai-atlas-sitemap.xml.ts | 55 ++ src/pages/ai-atlas.tsx | 120 ++- src/pages/ai-atlas/[tab].tsx | 31 + src/pages/api/ai-atlas/guide.ts | 8 +- src/styles/ai-atlas.css | 34 +- 28 files changed, 3338 insertions(+), 57 deletions(-) create mode 100644 public/ai-atlas/og-atlas-en-v2.png create mode 100644 public/ai-atlas/og-atlas-ru-v2.png create mode 100644 public/ai-atlas/og-ladder-en-v2.png create mode 100644 public/ai-atlas/og-ladder-ru-v2.png create mode 100644 public/ai-atlas/og-thesis-en-v2.png create mode 100644 public/ai-atlas/og-thesis-ru-v2.png create mode 100644 public/llms-full-pages/ai-atlas/ladder.md create mode 100644 public/llms-full-pages/ai-atlas/ru/ladder.md create mode 100644 public/llms-full-pages/ai-atlas/ru/thesis.md create mode 100644 public/llms-full-pages/ai-atlas/thesis.md create mode 100644 scripts/ai-atlas/generate-llms.mjs create mode 100644 scripts/ai-atlas/og/render.mjs create mode 100644 src/lib/aiAtlas/localize.ts create mode 100644 src/lib/aiAtlas/readings.ru.json create mode 100644 src/lib/aiAtlas/ru.json create mode 100644 src/lib/aiAtlas/seo.ts create mode 100644 src/pages/ai-atlas-sitemap.xml.ts create mode 100644 src/pages/ai-atlas/[tab].tsx diff --git a/.gitignore b/.gitignore index efd0068e..19341689 100644 --- a/.gitignore +++ b/.gitignore @@ -197,3 +197,4 @@ docker-compose.override.yml # journal of the internal-data guard (scripts/guard), one line per commit attempt .internal-data-guard.log +.wolf/ diff --git a/public/ai-atlas/og-atlas-en-v2.png b/public/ai-atlas/og-atlas-en-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..c49093bd3f6382f0f207f1480f12760c7eea479b GIT binary patch literal 57335 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 AivR!s literal 0 HcmV?d00001 diff --git a/public/ai-atlas/og-atlas-ru-v2.png b/public/ai-atlas/og-atlas-ru-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e69f047e9bf8fdaeabb7281429f7b3d201b07c5 GIT binary patch literal 58794 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 wk{WQfR!LRYNx?5^;+{6}#gsfmcc5b0(le}1Lw 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 E0N%gGX8-^I literal 0 HcmV?d00001 diff --git a/public/ai-atlas/og-ladder-ru-v2.png b/public/ai-atlas/og-ladder-ru-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..6624c6fd19d7018f58ef0076585199fbfbbc3a53 GIT binary patch literal 34446 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 O^-xabUasu3xBmyHIl$il literal 0 HcmV?d00001 diff --git a/public/ai-atlas/og-thesis-en-v2.png b/public/ai-atlas/og-thesis-en-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..2288224b3d2224d7c4eb5847142a021adf693a71 GIT binary patch literal 41569 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 +## AI Atlas: learning to work with AI agents + +- [AI Atlas: how one person runs a team of AI agents](https://keepsimple.io/ai-atlas): The map of how I run a team of AI agents, one task from my message to the result. Next to it are a Thesis and a 16-rung ladder for learning to work with agents. +- [Thesis: the edge now is solving hard problems with AI agents](https://keepsimple.io/ai-atlas/thesis): Vibe coding narrowed the gap between engineers and everyone else. What comes next: asking well, context windows, orchestration, evals and memory. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/thesis.md +- [The AI agent ladder: 16 rungs from chat to a system of agents](https://keepsimple.io/ai-atlas/ladder): Where you stand with AI agents and what to learn next: 16 rungs from chat to Claude Code, evals, orchestration and memory, each with the skill for the next step. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/ladder.md +- [AI Атлас: как один человек руководит командой ИИ-агентов](https://keepsimple.io/ru/ai-atlas): Карта того, как я работаю с командой ИИ-агентов: одна задача от моего сообщения до результата. Рядом Тезис и Лестница из 16 ступеней, чтобы этому научиться. +- [Тезис: преимущество у того, кто решает сложные задачи с ИИ](https://keepsimple.io/ru/ai-atlas/thesis): Вайбкодинг сократил разрыв между инженерами и остальными. Что дальше: умение спрашивать, контекстное окно, оркестрация, эвалы и память. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/ru/thesis.md +- [Лестница ИИ-агентов: 16 ступеней от чата до системы агентов](https://keepsimple.io/ru/ai-atlas/ladder): Где ты сейчас в работе с ИИ-агентами и чему учиться дальше: 16 ступеней от чата до Claude Code, эвалов, оркестрации и памяти, на каждой навык для следующего шага. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/ru/ladder.md + +## Thesis: the edge now is solving hard problems with AI agents + +Source: https://keepsimple.io/ai-atlas/thesis +Author: Wolf Alexanyan + +> Vibe coding narrowed the gap between people in tech, so the edge now belongs to whoever can solve the hardest problems solo with AI agents. + +Even where engineers still lead, the lead got shorter. What was ten years ahead a year ago is perhaps two years ahead now. And the gap closed because of vibe coding. Basically, you build software by telling an AI agent what you want, and that **enables solo building end to end**. + +From the market’s perspective, a year ago you were worth as much as the complexity of the problems you could see as a product or business person. But to solve them, you needed a whole team. Now that limit is gone, and you can solve the problem you saw on your own. + +**So today you are worth as much as the complexity of the problems you can solve.** + +In turn, **complex problems require a higher mastery of working with LLM agents**. That mastery starts with questions, because any sophisticated software begins with them. What to ask takes business and product expertise. **How to ask is a second skill.** **It means framing the question, decomposing the answer and choosing the next question.** + +Then at some point you realize that an LLM works on coherence, much as a brain does. It will answer any question with whatever fits best with what it was given, and it follows your framing. **So whoever does not learn to talk to an LLM properly becomes delusional.** **The cure is evals and benchmarks**. Evals test your work, and benchmarks test your choice of model. + +The next thing you hit is the **context window**. One start of an agent on a task is one run. A run sees only what fits in its context window. A complex problem does not fit one context window. Past a point the window fills with everything the task has touched, and the model gets dumber and starts to hallucinate. That is **context rot**. + +So you split the work into runs, and one agent’s output becomes the next agent’s input. Then you decide what each run sees and what it never sees. That is **context routing**. Runs, handoffs and context routing together make **orchestration**. This is how you solve a problem too big for one context window. However, at some point you understand that **orchestration without evals at each step is a delusion at scale**. Primarily because the error of the first run becomes a fact for every run after it. So you decide to build an eval for each step, and one for the whole chain too. + +After a while some steps turn routine and no longer need a model, so you **replace it with code**. Code is cheaper and deterministic (which means it gives the same output every time). Where a step still needs a model, benchmarks tell you which one, or whether to add a second. + +But every run still starts from zero, and whatever the system figured out yesterday is gone by the next one. So you give it **memory** that outlives a single context window and is shared between runs. Decisions go there, gotchas, what you tried and what failed. Only what passed an eval goes into memory, and a failure is stored as a failure. Otherwise the system starts remembering its own mistakes as facts. + +Up to this point the orchestrator is you. You decide which run goes next, what it sees and where its output goes. Then you write an onboarding protocol, a short file that tells a new agent who it is and how it joins the system. Now **your agents start calling each other instead of you**. One drafts, another pushes back, the first one revises, and it all settles against your evals. A program now picks who wakes up and collects the results, and you step in only for the real decisions. + +At some point **the system runs on its own**. You wake up, read what it built overnight, make sure you and your agents learned the gotchas, and set the next batch of tasks. Most of your time now goes into shaping a task the system can deliver by itself. So you are back to asking questions, only now you ask them of the whole system instead of one model. This is sophisticated orchestration, and **it lets one person solve problems that used to take a whole team.** + +## The AI agent ladder: 16 rungs from chat to a system of agents + +Source: https://keepsimple.io/ai-atlas/ladder +Author: Wolf Alexanyan + +Where you stand with AI agents and what to learn next: 16 rungs from chat to Claude Code, evals, orchestration and memory, each with the skill for the next step. + +### Stage I. Solo: you and one run + +#### 0. Chat + +_You ask, it answers. It talks, you act._ + +- Wrong perspective: It knows the answer. +- Right perspective: It predicts a likely answer, and a likely answer can be wrong. +- Vibecoding skills: You decided to check what ChatGPT, Claude or Gemini says before you use it. + +You open ChatGPT, Claude or Gemini and type. Behind each chat there is an LLM, a large language model: GPT from OpenAI, Claude from Anthropic, Gemini from Google. + +An LLM is a compressed statistical model of language. It predicts the next piece of text, so a wrong answer sounds as sure as a right one. + +Most LLM users are here. This is important to understand, because these are the people LLM companies actually build their features for. + +Tools: + +- ChatGPT, Claude or Gemini, in the browser or on the phone + +#### 1. Agent + +_You let it run commands on its own._ + +- Wrong perspective: AI is something I ask for advice. +- Right perspective: AI is something I hand work to. +- Vibecoding skills: You decided to run Claude Code or Codex in a terminal with bypass mode on and let it act. + +The same models also come as agents that work on your computer. Claude Code runs on Claude, Codex runs on GPT. + +You switch on bypass mode, so it stops asking your permission, and let it run commands on its own. This is where your chatbox becomes an agent, because agency means it acts by itself. Every time you start it on a task, that is one run. + +Before you let it act, keep the project in git and save a version before every run, so a run that breaks something is undone by going back to that version. Read what it changed before you accept it, and never let it see your passwords and keys. + +From here two things grow in parallel. One is its mind: memory, context, judgment. The other is its hands, the tools it can touch: the terminal, files, the web, other services through their APIs, and MCP servers, which are plug-ins that connect it to those services. + +Connect it to your calendar through an MCP server, and it books the meeting itself instead of telling you how. + +Tools: + +- Claude Code, Codex or another vendor’s command-line agent +- A terminal with permission to act +- Git + +#### 2. Standing instructions + +_The file it reads every time._ + +- Wrong perspective: It remembers what I told it last time. +- Right perspective: It knows only what is written down for it. +- Vibecoding skills: You decided to keep a global CLAUDE.md and one per project. + +You find CLAUDE.md, the instruction file the agent reads every time you start it, but you barely touch it. So it runs on whatever it happened to pick up from talking to you. + +Later you learn there are two of them. The global one says who the agent always is, and the project one says what this project needs. + +Tools: + +- CLAUDE.md for Claude Code +- AGENTS.md for Codex + +#### 3. Context rot + +_You keep adding to the file and the model gets dumber._ + +- Wrong perspective: The more I give it, the smarter it gets. +- Right perspective: Past a point, more context makes it dumber. +- Vibecoding skills: You decided to keep CLAUDE.md under 200 lines and move the rest into documents it opens when needed. + +The context window is everything the model sees at once. Whatever is outside it does not exist for the model. + +You keep adding to CLAUDE.md, the task pulls in more and more files, and at some point the window gets so full that the model gets dumber and starts making things up. That is context rot. + +An agent is only as honest as its context, so you learn to keep the file tight, global and project files together under about 200 lines. Everything else goes into documents the agent opens only when it needs them. + +#### 4. The question + +_One goal per request, with everything that goal needs._ + +- Wrong perspective: A bad answer means a weak model. +- Right perspective: A bad answer usually means a bad question. +- Vibecoding skills: You decided to put one goal in each request and say what the answer must contain. + +You stop throwing a wish into the box and start framing the question. You say what exactly you want and what the answer must contain, and after reading the answer you choose the next question. + +An LLM works with meaning the way a person does, so how you frame the question changes the answer you get. It also follows your framing, so a leading question gets you agreement. Whoever talks to it badly becomes delusional. + +#### 5. Evals + +_You stop guessing and start measuring._ + +- Wrong perspective: It looks right, so it works. +- Right perspective: Nothing works until a test says so. +- Vibecoding skills: You decided to write tests and bring in a Judge agent that checks the first one. + +You write evals, small tests that prove the result still works. Before the run starts, you write down what done means. + +Almost everyone skips this step, and this is where you start measuring instead of hoping. + +Here you also bring in a Judge agent, a second model whose job is to check the first one. It can be your QA agent, or in my case, The Order. The idea is to automate your evaluation. + +Tools: + +- The test runners you already use +- A Judge agent +- Scripts that read the output and say pass or fail + +#### 6. Benchmarks + +_The same task on another model, another vendor._ + +- Wrong perspective: I found my model. +- Right perspective: The best model for my task changes every few months. +- Vibecoding skills: You decided to write a script that sends the same task to several vendors and scores each with your evals. + +You run your own task on models from different vendors and compare speed, cost and how often the eval passes. Which model is good at what changes every few months, so you keep track. + +Picking the wrong model can be a costly mistake, and from inside one chat you will never see it. + +Tools: + +- A subscription or an API key per vendor +- One script that sends the same prompt to each +- Your evals from LVL 5 as the score + +### Stage II. Orchestration: you and a system of runs + +#### 7. Decomposition + +_One context window runs out, so you split the work into several runs._ + +- Wrong perspective: One smart agent can do the whole thing. +- Right perspective: A big problem is a chain of small runs. +- Vibecoding skills: You decided to start subagents and pass files from one run to the next. + +The task no longer fits into one context window, so you cut it into subtasks. Each subtask gets its own run with a fresh context window, and one agent’s output becomes the next agent’s input. + +You feel the cost right away: handoffs between agents, and drift away from the goal. Over time you learn to split only when the work does not fit one context window. + +Tools: + +- Subagents, which are agents your agent starts for one piece of the work +- Task queues +- Plain files passed from one run to the next + +#### 8. Context routing + +_Who gets which part of the context, and who never sees it._ + +- Wrong perspective: Give every agent everything, just in case. +- Right perspective: What a run does not see cannot mislead it. +- Vibecoding skills: You decided to keep a list per step of what the run receives and where it may write. + +Each run gets what its step needs: the task description, the previous output, the files it must read. It does not get anything that could bias it. + +Up to LVL 11 you are the one who decides this for every step, so the orchestrator is you. At LVL 12 a program takes over that role. + +Tools: + +- A list per step of what the run receives +- Inputs it can read but not change +- A rule for what a run may write and where + +#### 9. Evals at every step + +_And one on the whole chain._ + +- Wrong perspective: I check the result at the end. +- Right perspective: Every step needs its own check, or the first mistake spreads through the chain. +- Vibecoding skills: You decided to put an eval between runs, so a failed step passes nothing on. + +A mistake in the first run becomes a fact for every run after it. So each step gets its own eval, and the whole chain gets one too. + +Orchestration without evals at each step is a delusion at scale. A step that fails its eval does not pass its output on. + +Tools: + +- The same evals from LVL 5, now placed between runs + +#### 10. Code over model + +_You tear down half of what you built._ + +- Wrong perspective: More AI makes the system better. +- Right perspective: Wherever a step is predictable, code does it better than a model. +- Vibecoding skills: You decided to turn routine steps into ordinary functions and hooks that check the output. + +At some point you tear down half of what you built to make it leaner. Every step that became routine turns into code. + +Code is cheaper and gives the same output every time, and you test it like any other function. The model stays only where there is real uncertainty. + +A lean core is easier to manage and, importantly, to trust. + +Tools: + +- Ordinary functions +- Schedulers +- Validation scripts +- Hooks that check the agent’s output before it lands + +#### 11. Memory + +_What survives a session and is shared between runs._ + +- Wrong perspective: Each session is a fresh start. +- Right perspective: What the system learned has to outlive the session, if it passed an eval. +- Vibecoding skills: You decided to give each agent a memory file and every run a shared store to search. + +You find MEMORY.md, memory that outlives one context window and is shared between agents. Decisions go there, gotchas, what you tried and what failed. + +Only what passed an eval goes into memory, and a failure is stored as a failure. Work accumulates, and smart-in-the-moment turns into smart-over-time. + +Tools: + +- A memory file per agent +- A shared store every run can search +- Full-text search over past sessions + +#### 12. Agents call each other + +_An orchestrator picks who wakes, hands off, collects._ + +- Wrong perspective: I have to drive every step myself. +- Right perspective: My job is the decisions, and the agents handle the handoffs. +- Vibecoding skills: You decided to write an onboarding protocol and a message format your agents share. + +You write an onboarding protocol that tells a new agent who it is and how it joins. Now your agents call each other instead of you. + +One drafts, the Judge pushes back, the first one revises, and it all settles against your evals. You step in only for the real decisions. + +Tools: + +- A list of agents and how to reach each +- A message format they all use +- An orchestrator with a cap on how many times a task can bounce between agents + +#### 13. Autonomy + +_Your agents run on their own._ + +- Wrong perspective: My work is doing the task. +- Right perspective: My work is shaping tasks the system can deliver without me. +- Vibecoding skills: You decided to set up schedules and watchers, so the system runs overnight and leaves logs. + +Your daily routine is to wake up and see what they built during the night. You make sure you and your agents learned the gotchas. Then you build the next batch of tasks. + +Most of your own time goes into shaping a task that fits your system, so it delivers by itself. + +Without you, no agent spends money, deletes anything or publishes anything. + +Tools: + +- Schedules +- Watchers that alert you +- Logs, so every mechanism leaves a trail you can read in the morning + +#### 14. Departments + +_Teams of agents, each with its own discipline._ + +- Wrong perspective: I run a set of agents. +- Right perspective: I run something closer to a company. +- Vibecoding skills: You decided to group your agents into departments, each with its own Judge, and let a product manager agent run whole projects through them. + +Highly speculative, I’m not here yet. + +You build departments of agents: marketing, business development, engineering with devs and QAs. Each has its own Judge and follows the protocol, and all of them know about each other. + +Next you bring in a product manager agent that builds whole projects overnight using your departments. Nobody has shipped this yet. + +#### 15. ??? + +_One day._ + +At that point you have stopped renting a model to talk to and started owning the system around it. + + + ## Pages & Resources - [Home](https://keepsimple.io/): KeepSimple home page. - [Slug](https://keepsimple.io/[page]): No description available. diff --git a/public/llms.txt b/public/llms.txt index b2fb9fca..27a60c6a 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,6 +1,17 @@ # Keep Simple | Cognitive Science & UX Leadership > Elevate your leadership with applied cognitive science. Explore behavioral psychology and cognitive frameworks designed for modern managers. + +## AI Atlas: learning to work with AI agents + +- [AI Atlas: how one person runs a team of AI agents](https://keepsimple.io/ai-atlas): The map of how I run a team of AI agents, one task from my message to the result. Next to it are a Thesis and a 16-rung ladder for learning to work with agents. +- [Thesis: the edge now is solving hard problems with AI agents](https://keepsimple.io/ai-atlas/thesis): Vibe coding narrowed the gap between engineers and everyone else. What comes next: asking well, context windows, orchestration, evals and memory. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/thesis.md +- [The AI agent ladder: 16 rungs from chat to a system of agents](https://keepsimple.io/ai-atlas/ladder): Where you stand with AI agents and what to learn next: 16 rungs from chat to Claude Code, evals, orchestration and memory, each with the skill for the next step. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/ladder.md +- [AI Атлас: как один человек руководит командой ИИ-агентов](https://keepsimple.io/ru/ai-atlas): Карта того, как я работаю с командой ИИ-агентов: одна задача от моего сообщения до результата. Рядом Тезис и Лестница из 16 ступеней, чтобы этому научиться. +- [Тезис: преимущество у того, кто решает сложные задачи с ИИ](https://keepsimple.io/ru/ai-atlas/thesis): Вайбкодинг сократил разрыв между инженерами и остальными. Что дальше: умение спрашивать, контекстное окно, оркестрация, эвалы и память. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/ru/thesis.md +- [Лестница ИИ-агентов: 16 ступеней от чата до системы агентов](https://keepsimple.io/ru/ai-atlas/ladder): Где ты сейчас в работе с ИИ-агентами и чему учиться дальше: 16 ступеней от чата до Claude Code, эвалов, оркестрации и памяти, на каждой навык для следующего шага. Markdown: https://keepsimple.io/llms-full-pages/ai-atlas/ru/ladder.md + + ## Pages & Resources - [Home](https://keepsimple.io/): KeepSimple home page. - [Slug](https://keepsimple.io/[page]): No description available. diff --git a/public/robots.txt b/public/robots.txt index c5823871..606f89b3 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -26,3 +26,4 @@ Disallow: /uxcore_next/ Sitemap: https://strapi.keepsimple.io/sitemap/index.xml Sitemap: https://keepsimple.io/library-sitemap.xml +Sitemap: https://keepsimple.io/ai-atlas-sitemap.xml diff --git a/scripts/ai-atlas/generate-llms.mjs b/scripts/ai-atlas/generate-llms.mjs new file mode 100644 index 00000000..7f794ae7 --- /dev/null +++ b/scripts/ai-atlas/generate-llms.mjs @@ -0,0 +1,182 @@ +/* The Atlas for answer engines and AI assistants. + + node scripts/ai-atlas/generate-llms.mjs write + node scripts/ai-atlas/generate-llms.mjs --check exit 1 when stale + + Writes the Thesis and the Ladder as Markdown, in English and Russian, to + public/llms-full-pages/ai-atlas/, and keeps an Atlas section in + public/llms.txt (links) and public/llms-full.txt (the full English text) + between ai-atlas markers. Everything comes from the texts the pages draw + (readings.json, readings.ru.json, copy.json, ru.json), so run it after + any change to them. The rest of both llms files is left as it is. One + journal line per run in logs/ai-atlas-llms.jsonl. */ +import { + appendFileSync, + existsSync, + mkdirSync, + readFileSync, + writeFileSync, +} from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const ROOT = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + '../..', +); +const ORIGIN = 'https://keepsimple.io'; +const CHECK = process.argv.includes('--check'); +const START = ''; +const END = ''; + +const json = f => JSON.parse(readFileSync(path.join(ROOT, f), 'utf8')); +const LANGS = { + en: { + prefix: '', + readings: json('src/lib/aiAtlas/readings.json'), + copy: json('src/lib/aiAtlas/copy.json'), + mapName: 'The map', + }, + ru: { + prefix: '/ru', + readings: json('src/lib/aiAtlas/readings.ru.json'), + copy: json('src/lib/aiAtlas/ru.json').copy, + mapName: 'Карта', + }, +}; +const runs = rs => rs.map(r => (r.m === 'key' ? `**${r.t}**` : r.t)).join(''); +const plain = rs => rs.map(r => r.t).join(''); + +const pageUrl = (lang, p) => `${ORIGIN}${LANGS[lang].prefix}${p}`; +const mdUrl = (lang, name) => + `${ORIGIN}/llms-full-pages/ai-atlas/${lang === 'en' ? '' : `${lang}/`}${name}.md`; + +function thesisMd(lang) { + const { readings, copy } = LANGS[lang]; + const { lead, paras } = readings.article; + return [ + `# ${copy.seoTitleThesis}`, + '', + `Source: ${pageUrl(lang, '/ai-atlas/thesis')}`, + 'Author: Wolf Alexanyan', + '', + `> ${plain(lead)}`, + '', + ...paras.flatMap(p => [runs(p), '']), + ].join('\n'); +} + +function ladderMd(lang) { + const { readings, copy } = LANGS[lang]; + const { stages, perspective, tracks, toolsLabel, closing, rungs } = + readings.ladder; + const out = [ + `# ${copy.seoTitleLadder}`, + '', + `Source: ${pageUrl(lang, '/ai-atlas/ladder')}`, + 'Author: Wolf Alexanyan', + '', + copy.seoDescriptionLadder, + '', + ]; + for (const stage of stages) { + out.push(`## ${stage.label}`, ''); + for (const r of rungs.filter(x => x.stage === stage.id)) { + out.push(`### ${r.n}. ${r.title}`, '', `_${r.sub}_`, ''); + if (r.was) out.push(`- ${perspective.was}: ${r.was}`); + if (r.think) out.push(`- ${perspective.think}: ${r.think}`); + if (r.skill) out.push(`- ${tracks.skill}: ${r.skill}`); + if (r.was || r.think || r.skill) out.push(''); + for (const t of r.text || []) out.push(t, ''); + if (r.tools?.length) + out.push(`${toolsLabel}:`, '', ...r.tools.map(t => `- ${t}`), ''); + } + } + out.push(closing, ''); + return out.join('\n'); +} + +function indexBlock() { + const en = LANGS.en.copy; + const ru = LANGS.ru.copy; + return [ + START, + '## AI Atlas: learning to work with AI agents', + '', + `- [${en.seoTitle}](${pageUrl('en', '/ai-atlas')}): ${en.seoDescription}`, + `- [${en.seoTitleThesis}](${pageUrl('en', '/ai-atlas/thesis')}): ${en.seoDescriptionThesis} Markdown: ${mdUrl('en', 'thesis')}`, + `- [${en.seoTitleLadder}](${pageUrl('en', '/ai-atlas/ladder')}): ${en.seoDescriptionLadder} Markdown: ${mdUrl('en', 'ladder')}`, + `- [${ru.seoTitle}](${pageUrl('ru', '/ai-atlas')}): ${ru.seoDescription}`, + `- [${ru.seoTitleThesis}](${pageUrl('ru', '/ai-atlas/thesis')}): ${ru.seoDescriptionThesis} Markdown: ${mdUrl('ru', 'thesis')}`, + `- [${ru.seoTitleLadder}](${pageUrl('ru', '/ai-atlas/ladder')}): ${ru.seoDescriptionLadder} Markdown: ${mdUrl('ru', 'ladder')}`, + END, + ].join('\n'); +} + +function fullBlock() { + const demote = md => md.replace(/^(#+) /gm, '#$1 '); + return [ + indexBlock().replace(END, ''), + demote(thesisMd('en')), + demote(ladderMd('en')), + END, + ].join('\n'); +} + +/* Insert the block after the file's opening title and summary, or replace + the block a previous run left. */ +function withBlock(text, block) { + if (text.includes(START) && text.includes(END)) { + const a = text.indexOf(START); + const b = text.indexOf(END) + END.length; + return text.slice(0, a) + block + text.slice(b); + } + const at = text.indexOf('\n## '); + if (at === -1) return `${text.trimEnd()}\n\n${block}\n`; + return `${text.slice(0, at).trimEnd()}\n\n${block}\n${text.slice(at)}`; +} + +const pagesDir = path.join(ROOT, 'public', 'llms-full-pages', 'ai-atlas'); +const targets = [ + [path.join(pagesDir, 'thesis.md'), () => thesisMd('en')], + [path.join(pagesDir, 'ladder.md'), () => ladderMd('en')], + [path.join(pagesDir, 'ru', 'thesis.md'), () => thesisMd('ru')], + [path.join(pagesDir, 'ru', 'ladder.md'), () => ladderMd('ru')], + [path.join(ROOT, 'public', 'llms.txt'), old => withBlock(old, indexBlock())], + [ + path.join(ROOT, 'public', 'llms-full.txt'), + old => withBlock(old, fullBlock()), + ], +]; + +const stale = []; +for (const [file, make] of targets) { + const old = existsSync(file) ? readFileSync(file, 'utf8') : ''; + const next = make(old); + if (next === old) continue; + stale.push(path.relative(ROOT, file)); + if (!CHECK) { + mkdirSync(path.dirname(file), { recursive: true }); + writeFileSync(file, next); + } +} + +mkdirSync(path.join(ROOT, 'logs'), { recursive: true }); +appendFileSync( + path.join(ROOT, 'logs', 'ai-atlas-llms.jsonl'), + JSON.stringify({ + at: new Date().toISOString(), + mode: CHECK ? 'check' : 'write', + changed: stale, + }) + '\n', +); + +if (CHECK && stale.length) { + console.error(`Atlas llms files are stale: ${stale.join(', ')}`); + process.exit(1); +} +console.log( + stale.length + ? `${CHECK ? 'stale' : 'wrote'}: ${stale.join(', ')}` + : 'Atlas llms files are current', +); diff --git a/scripts/ai-atlas/og/render.mjs b/scripts/ai-atlas/og/render.mjs new file mode 100644 index 00000000..4054ab7f --- /dev/null +++ b/scripts/ai-atlas/og/render.mjs @@ -0,0 +1,212 @@ +/* Share thumbnails for the three Atlas pages, in English and Russian. + + node scripts/ai-atlas/og/render.mjs + + Renders 1200x630 PNGs into public/ai-atlas/ with headless Chromium, in the + Atlas palette and its own fonts. The words come from the Atlas texts + (readings.json, readings.ru.json), so a thumbnail never says what the + page does not. Static files are cached for thirty days: when a picture + changes, bump VERSION so the new one gets a new name. One journal line per + run in logs/ai-atlas-og.jsonl. + + motion-passport: exempt, the output is a still PNG; the only transform + rotates a square into a diamond and nothing moves. */ +import { appendFileSync, mkdirSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath, pathToFileURL } from 'node:url'; + +import { chromium } from 'playwright'; + +const VERSION = 'v2'; +const ROOT = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + '../../..', +); +const OUT = path.join(ROOT, 'public', 'ai-atlas'); +const font = f => pathToFileURL(path.join(ROOT, 'public', f)).href; + +const readings = { + en: JSON.parse( + readFileSync(path.join(ROOT, 'src/lib/aiAtlas/readings.json'), 'utf8'), + ), + ru: JSON.parse( + readFileSync(path.join(ROOT, 'src/lib/aiAtlas/readings.ru.json'), 'utf8'), + ), +}; +const runs = rs => rs.map(r => r.t).join(''); + +/* The one sentence of the Thesis that carries it, as written. */ +const thesisLine = { + en: runs(readings.en.article.paras[2]).replace(/^So today/, 'Today'), + ru: runs(readings.ru.article.paras[2]).replace(/^Поэтому сегодня/, 'Сегодня'), +}; +const rungCount = readings.en.ladder.rungs.length; +const soloCount = readings.en.ladder.rungs.filter( + r => r.stage === 'solo', +).length; + +const WORDS = { + en: { + site: 'KEEPSIMPLE · AI ATLAS', + atlasTitle: 'AI · ATLAS', + atlasSub: 'How one person runs a team of AI agents', + thesisLabel: 'Thesis', + ladderLabel: 'The Ladder', + ladderTitle: `${rungCount} rungs from chat to a system of agents`, + stages: ['I · Solo', 'II · Orchestration'], + author: 'Wolf Alexanyan', + }, + ru: { + site: 'KEEPSIMPLE · AI АТЛАС', + atlasTitle: 'AI · АТЛАС', + atlasSub: 'Как один человек руководит командой ИИ-агентов', + thesisLabel: 'Тезис', + ladderLabel: 'Лестница', + ladderTitle: `${rungCount} ступеней от чата до системы агентов`, + stages: ['I · Соло', 'II · Оркестрация'], + author: 'Wolf Alexanyan', + }, +}; + +const base = ` +@font-face { font-family: 'EB Garamond'; font-weight: 400; src: url(${font('ai-atlas/font-2.woff2')}); } +@font-face { font-family: 'EB Garamond'; font-weight: 500; src: url(${font('ai-atlas/font-3.woff2')}); } +@font-face { font-family: 'EB Garamond'; font-style: italic; font-weight: 400; src: url(${font('ai-atlas/font-0.woff2')}); } +@font-face { font-family: 'JetBrains Mono'; font-weight: 400; src: url(${font('ai-atlas/font-4.woff2')}); } +@font-face { font-family: 'JetBrains Mono'; font-weight: 500; src: url(${font('ai-atlas/font-5.woff2')}); } +@font-face { font-family: 'Kanji'; src: url(${font('fonts/YujiSyuku-Regular.ttf')}); } +* { box-sizing: border-box; margin: 0; padding: 0; } +html, body { width: 1200px; height: 630px; } +body { + position: relative; overflow: hidden; + background: #ece4cf; color: #1a1a1a; + font-family: 'JetBrains Mono', monospace; + -webkit-font-smoothing: antialiased; +} +.corner { position: absolute; width: 30px; height: 30px; border: 0 solid #2a2a2a; } +.tl { top: 22px; left: 22px; border-top-width: 1px; border-left-width: 1px; } +.tr { top: 22px; right: 22px; border-top-width: 1px; border-right-width: 1px; } +.bl { bottom: 22px; left: 22px; border-bottom-width: 1px; border-left-width: 1px; } +.br { bottom: 22px; right: 22px; border-bottom-width: 1px; border-right-width: 1px; } +.ring { position: absolute; border-radius: 50%; border: 1px solid rgba(42, 42, 42, 0.22); } +.dmd { display: inline-block; width: 18px; height: 18px; transform: rotate(45deg); background: #b3392b; } +.dmd.gold { background: #c08a2c; } .dmd.blue { background: #4a6f99; } +.site { position: absolute; top: 44px; left: 72px; font-size: 14px; letter-spacing: 0.32em; color: #6a6457; } +.water { position: absolute; font-family: 'Kanji', serif; color: rgba(42, 42, 42, 0.07); line-height: 1; } +.kanji { font-family: 'Kanji', serif; color: #b3392b; line-height: 1; } +.label { display: flex; align-items: center; gap: 18px; font-size: 18px; letter-spacing: 0.32em; text-transform: uppercase; color: #b3392b; } +.label .dmd { width: 12px; height: 12px; } +.serif { font-family: 'EB Garamond', serif; } +.author { font-size: 14px; letter-spacing: 0.32em; text-transform: uppercase; color: #6a6457; } +`; + +const frame = ( + inner, + extraCss = '', +) => ` + + +${inner}`; + +const rings = (cx, cy, radii) => + radii + .map( + r => + ``, + ) + .join(''); + +const atlas = w => + frame( + `${rings(600, 300, [110, 190, 275, 370])} + 図 +
+
天
+
${w.atlasTitle}
+
${w.atlasSub}
+
+
`, + `.stack { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; } + .title { display: flex; align-items: center; gap: 44px; } + .title .serif { font-size: 76px; font-weight: 500; letter-spacing: 0.18em; padding-left: 0.18em; } + .sub { font-size: 22px; letter-spacing: 0.24em; text-transform: uppercase; color: #3d3a33; } + .dots { display: flex; gap: 26px; margin-top: 6px; } + .dots .dmd { width: 14px; height: 14px; }`, + ); + +const thesis = (w, line) => + frame( + `
${w.site}
+ 論 +
+
${w.thesisLabel}
+

${line}

+
${w.author}
+
`, + `.body { position: absolute; left: 72px; right: 300px; top: 118px; bottom: 64px; display: flex; flex-direction: column; justify-content: space-between; } + .quote { font-size: 48px; line-height: 1.18; font-weight: 400; }`, + ); + +const ladder = w => { + const STEP_W = 30; + const STEP_H = 19; + const steps = Array.from({ length: rungCount }, (_, i) => { + const last = i === rungCount - 1; + const solo = i < soloCount; + const cls = last ? 'step open' : solo ? 'step solo' : 'step orch'; + return ``; + }).join(''); + return frame( + `
${w.site}
+ 梯 +
+
${w.ladderLabel}
+

${w.ladderTitle}

+
${w.author}
+
+
${steps} + ${w.stages[0]} + ${w.stages[1]} +
`, + `.body { position: absolute; left: 72px; width: 560px; top: 118px; bottom: 64px; display: flex; flex-direction: column; justify-content: space-between; } + .title { font-size: 48px; line-height: 1.15; font-weight: 400; } + .stairs { position: absolute; right: 80px; bottom: 120px; } + .step { position: absolute; bottom: 0; width: 26px; } + .step.solo { background: #1a1a1a; } + .step.orch { background: #b3392b; } + .step.open { border: 1px dashed #b3392b; background: transparent; } + .stage { position: absolute; top: calc(100% + 18px); font-size: 14px; letter-spacing: 0.24em; text-transform: uppercase; color: #3d3a33; white-space: nowrap; }`, + ); +}; + +const pages = []; +for (const lang of ['en', 'ru']) { + const w = WORDS[lang]; + pages.push([`og-atlas-${lang}-${VERSION}.png`, atlas(w)]); + pages.push([`og-thesis-${lang}-${VERSION}.png`, thesis(w, thesisLine[lang])]); + pages.push([`og-ladder-${lang}-${VERSION}.png`, ladder(w)]); +} + +const browser = await chromium.launch(); +const page = await browser.newPage({ viewport: { width: 1200, height: 630 } }); +const written = []; +try { + for (const [name, html] of pages) { + await page.setContent(html, { waitUntil: 'load' }); + await page.evaluate(() => document.fonts.ready); + await page.screenshot({ path: path.join(OUT, name), type: 'png' }); + written.push(name); + } +} finally { + await browser.close(); + mkdirSync(path.join(ROOT, 'logs'), { recursive: true }); + appendFileSync( + path.join(ROOT, 'logs', 'ai-atlas-og.jsonl'), + JSON.stringify({ + at: new Date().toISOString(), + version: VERSION, + written, + }) + '\n', + ); +} +console.log(`wrote ${written.length} thumbnails: ${written.join(', ')}`); diff --git a/src/lib/aiAtlas/adapter.ts b/src/lib/aiAtlas/adapter.ts index bb8ca621..b1c5405a 100644 --- a/src/lib/aiAtlas/adapter.ts +++ b/src/lib/aiAtlas/adapter.ts @@ -31,10 +31,18 @@ export const PAGE_TEXT_DEFAULTS: Record = { ringTerritoriesDesc: 'Every topic opens its own card.', metaLabel: 'TERMINAL DOCUMENTATION', tabAtlas: 'Atlas', - tabArticle: 'Story', + tabArticle: 'Thesis', tabLadder: 'Ladder', legendKey: 'Key thesis', legendSee: 'Product & business', + rowInside: 'inside', + rowMechanism: 'mechanism', + rowResource: 'resource', + rowStage: 'stage', + stageStart: 'START', + stageEnd: 'END', + topicsLabel: 'Topics', + doctrineCaption: 'AUTHORITY & EVIDENCE', topicsPlaceholder: 'The Atlas', stagesAria: 'Project to Result, clockwise', }; @@ -93,7 +101,7 @@ export function adaptGuide(guide: any) { desc: describe(id, entry.detail || [entry.text]).join('\n\n'), rows: [ ...(entry.children || []).map((child: string) => ({ - k: 'inside', + k: text('rowInside'), v: (entries.get(child) as any)?.title || child, ref: child, })), @@ -145,7 +153,7 @@ export function adaptGuide(guide: any) { title: step.title, desc: describe(id, [step.text]).join('\n\n'), rows: step.children.map((child: string) => ({ - k: 'mechanism', + k: text('rowMechanism'), v: (entries.get(child) as any)?.title || child, ref: child, })), @@ -155,7 +163,11 @@ export function adaptGuide(guide: any) { label: labels[index], sub: String(index + 1).padStart(2, '0') + - (index === 0 ? ' · START' : index === 5 ? ' · END' : ''), + (index === 0 + ? ' · ' + text('stageStart') + : index === 5 + ? ' · ' + text('stageEnd') + : ''), support: support[index].map(systemRef), diamond: 'red', theta: angles[index], @@ -252,7 +264,7 @@ export function adaptGuide(guide: any) { title: text('ringDevEnvTitle'), desc: text('ringDevEnvDesc'), rows: ['agents', 'memory', 'tools', 'models'].map(id => ({ - k: 'resource', + k: text('rowResource'), v: node(id).title, ref: dossiers['system-' + id] ? 'system-' + id : id, })), @@ -260,13 +272,17 @@ export function adaptGuide(guide: any) { dossiers['ring:projects'] = { title: text('ringProjectsTitle'), desc: text('ringProjectsDesc'), - rows: projects.map((p: any) => ({ k: 'stage', v: p.label, ref: p.id })), + rows: projects.map((p: any) => ({ + k: text('rowStage'), + v: p.label, + ref: p.id, + })), }; dossiers['ring:territories'] = { title: text('ringTerritoriesTitle'), desc: text('ringTerritoriesDesc'), rows: guide.entries.map((e: any) => ({ - k: 'mechanism', + k: text('rowMechanism'), v: e.title, ref: e.id, })), diff --git a/src/lib/aiAtlas/copy.json b/src/lib/aiAtlas/copy.json index fbe3db80..89eef003 100644 --- a/src/lib/aiAtlas/copy.json +++ b/src/lib/aiAtlas/copy.json @@ -1,8 +1,16 @@ { - "seoTitle": "Wolf’s Terminal: an atlas of my orchestration harness", - "seoDescription": "How I run a team of AI agents: one task, from my message to the result, every feature explained by me.", - "seoKeywords": "Wolf’s Terminal, orchestration harness, AI agents", - "ogImageAlt": "Wolf’s Terminal", + "seoTitle": "AI Atlas: how one person runs a team of AI agents", + "seoDescription": "The map of how I run a team of AI agents, one task from my message to the result. Next to it are a Thesis and a 16-rung ladder for learning to work with agents.", + "seoKeywords": "AI agents, multi-agent system, AI orchestration, Claude Code, Codex, vibe coding, Wolf’s Terminal", + "ogImageAlt": "AI Atlas: how one person runs a team of AI agents", + "seoTitleThesis": "Thesis: the edge now is solving hard problems with AI agents", + "seoDescriptionThesis": "Vibe coding narrowed the gap between engineers and everyone else. What comes next: asking well, context windows, orchestration, evals and memory.", + "seoKeywordsThesis": "vibe coding, AI agents, solo builder, context window, context routing, orchestration, evals, LLM", + "ogImageAltThesis": "Today you are worth as much as the complexity of the problems you can solve.", + "seoTitleLadder": "The AI agent ladder: 16 rungs from chat to a system of agents", + "seoDescriptionLadder": "Where you stand with AI agents and what to learn next: 16 rungs from chat to Claude Code, evals, orchestration and memory, each with the skill for the next step.", + "seoKeywordsLadder": "how to learn AI agents, AI skills roadmap, vibe coding, Claude Code, CLAUDE.md, context rot, evals, benchmarks, subagents, AI orchestration, agent memory", + "ogImageAltLadder": "The Ladder: 16 rungs from chat to a system of agents", "loading": "Loading…", "failedToLoad": "Failed to load data : ", "welcomeBanner": "AN ATLAS OF MY ORCHESTRATION HARNESS", diff --git a/src/lib/aiAtlas/localize.ts b/src/lib/aiAtlas/localize.ts new file mode 100644 index 00000000..ad164a51 --- /dev/null +++ b/src/lib/aiAtlas/localize.ts @@ -0,0 +1,40 @@ +/* The Atlas in another language. The guide keeps its structure (which + stages, tiles and cards exist, pushed by the Terminal in English); a + translation replaces only the words, matched by id. Anything the + translation does not cover stays in English, so a card the Terminal adds + later shows up at once instead of disappearing. + + Translations: ru.json (map words, stage and system cards, mechanisms, + Wolf's card prose) and readings.ru.json (Thesis and Ladder). */ + +type Fields = Record; +export type AtlasTranslation = { + copy?: Fields & { stageLabels?: string[] }; + steps?: Record; + nodes?: Record; + entries?: Record; + cards?: Record; +}; + +const overlay = (items: any[], words: Record = {}) => + items.map(item => (words[item.id] ? { ...item, ...words[item.id] } : item)); + +export function localizeGuide(guide: any, words: AtlasTranslation) { + if (!guide || !words) return guide; + const { stageLabels, ...copy } = words.copy || {}; + return { + ...guide, + steps: overlay(guide.steps, words.steps), + entries: overlay(guide.entries, words.entries), + system: { + ...guide.system, + nodes: overlay(guide.system.nodes, words.nodes), + }, + /* Translated words win over pushed English ones on this locale. */ + copy: { ...(guide.copy || {}), ...copy }, + cards: { ...(guide.cards || {}), ...(words.cards || {}) }, + stages: stageLabels + ? stageLabels.map((label, i) => ({ ...(guide.stages?.[i] || {}), label })) + : guide.stages, + }; +} diff --git a/src/lib/aiAtlas/readings.ru.json b/src/lib/aiAtlas/readings.ru.json new file mode 100644 index 00000000..9b57d5e6 --- /dev/null +++ b/src/lib/aiAtlas/readings.ru.json @@ -0,0 +1,551 @@ +{ + "article": { + "lead": [ + { + "t": "Вайбкодинг сократил разрыв между инженерами и остальными", + "m": "key" + }, + { + "t": ", так что преимущество теперь у того, кто в одиночку, с ИИ-агентами, решает самые сложные задачи." + } + ], + "paras": [ + [ + { + "t": "Даже там, где инженеры всё ещё впереди, отрыв стал короче. Год назад это были лет десять форы, сейчас, может быть, два. И закрыл этот разрыв вайбкодинг. По сути, ты строишь софт тем, что объясняешь ИИ-агенту, чего хочешь, а это " + }, + { + "t": "позволяет одному человеку собрать продукт от начала до конца", + "m": "key" + }, + { + "t": "." + } + ], + [ + { + "t": "Для рынка ещё год назад " + }, + { + "t": "ты стоил ровно столько, насколько сложные задачи умел разглядеть как человек из продукта или бизнеса", + "m": "see" + }, + { + "t": ". Но чтобы их решить, нужна была целая команда. Теперь этого ограничения нет: задачу, которую ты увидел, ты можешь решить сам." + } + ], + [ + { + "t": "Поэтому сегодня ты стоишь ровно столько, насколько сложные задачи можешь решить.", + "m": "key" + } + ], + [ + { + "t": "А сложные задачи, в свою очередь, " + }, + { + "t": "требуют другого уровня мастерства в работе с LLM-агентами", + "m": "key" + }, + { + "t": ". Начинается оно с вопросов, потому что с вопросов начинается любой серьёзный софт. " + }, + { + "t": "Что спрашивать, подсказывает опыт в бизнесе и продукте.", + "m": "see" + }, + { + "t": " " + }, + { + "t": "Как спрашивать, это второй навык.", + "m": "key" + }, + { + "t": " " + }, + { + "t": "То есть поставить вопрос, разобрать ответ на части и выбрать следующий вопрос.", + "m": "key" + } + ], + [ + { + "t": "Потом в какой-то момент до тебя доходит: LLM работает на связности, примерно как мозг. На любой вопрос модель отвечает тем, что лучше всего склеивается с полученным, и идёт за твоей постановкой вопроса. " + }, + { + "t": "Поэтому тот, кто не научится правильно разговаривать с LLM, уходит в иллюзии.", + "m": "key" + }, + { + "t": " " + }, + { + "t": "Лечится это эвалами и бенчмарками", + "m": "key" + }, + { + "t": ". Эвалы проверяют твою работу, бенчмарки проверяют твой выбор модели." + } + ], + [ + { + "t": "Дальше ты упираешься в " + }, + { + "t": "контекстное окно", + "m": "key" + }, + { + "t": ". Один запуск агента на задачу назовём прогоном. Прогон видит только то, что влезло в его контекстное окно, а сложная задача в одно окно не влезает. После какого-то предела окно забито всем, чего задача касалась, модель тупеет и начинает галлюцинировать. Это " + }, + { + "t": "гниение контекста", + "m": "key" + }, + { + "t": "." + } + ], + [ + { + "t": "Поэтому ты режешь работу на прогоны, и результат одного агента становится входом для следующего. Потом решаешь, что каждый прогон видит, а чего не увидит никогда. Это " + }, + { + "t": "маршрутизация контекста", + "m": "key" + }, + { + "t": ". Прогоны, передачи между ними и маршрутизация контекста вместе и есть " + }, + { + "t": "оркестрация", + "m": "key" + }, + { + "t": ". Так решается задача, которая в одно контекстное окно не помещается. Но в какой-то момент ты понимаешь, что " + }, + { + "t": "оркестрация без эвалов на каждом шаге превращается в иллюзию промышленного масштаба", + "m": "key" + }, + { + "t": ". Прежде всего потому, что ошибка первого прогона становится фактом для всех следующих. Поэтому ты ставишь эвал на каждый шаг и ещё один на всю цепочку." + } + ], + [ + { + "t": "Со временем часть шагов становится рутиной, и модель им больше не нужна, так что ты " + }, + { + "t": "заменяешь её кодом", + "m": "key" + }, + { + "t": ". Код дешевле и детерминирован, то есть каждый раз даёт один и тот же результат. Там, где шагу модель всё ещё нужна, бенчмарки подсказывают, какая именно и не добавить ли вторую." + } + ], + [ + { + "t": "Но каждый прогон всё равно стартует с нуля, и всё, до чего система додумалась вчера, к следующему прогону пропало. Поэтому ты даёшь системе " + }, + { + "t": "память", + "m": "key" + }, + { + "t": ", которая живёт дольше одного контекстного окна и общая для всех прогонов. Туда уходят решения, подводные камни, что ты пробовал и что не сработало. В память попадает только то, что прошло эвал, а провал записывается как провал. Иначе система начинает помнить собственные ошибки как факты." + } + ], + [ + { + "t": "До этого момента оркестратор ты сам: решаешь, какой прогон идёт следующим, что этот прогон видит и куда уходит результат. Потом ты пишешь протокол онбординга, короткий файл, из которого новый агент узнаёт свою роль и как войти в систему. И теперь " + }, + { + "t": "агенты начинают вызывать друг друга вместо тебя", + "m": "key" + }, + { + "t": ". Один пишет черновик, другой возражает, первый правит, и всё это сходится на твоих эвалах. Кто просыпается следующим, теперь выбирает программа, она же собирает результаты, а ты вмешиваешься только там, где нужно настоящее решение." + } + ], + [ + { + "t": "В какой-то момент " + }, + { + "t": "система начинает работать сама", + "m": "key" + }, + { + "t": ". Ты просыпаешься, читаешь, что система построила за ночь, проверяешь, что вы с агентами усвоили подводные камни, и ставишь следующую пачку задач. Большая часть твоего времени теперь уходит на то, чтобы собрать задачу, которую система сможет выполнить сама. То есть ты снова задаёшь вопросы, только теперь всей системе, а не одной модели. Это и есть сложная оркестрация, и " + }, + { + "t": "это позволяет одному человеку решать задачи, для которых раньше нужна была целая команда.", + "m": "key" + } + ] + ], + "board": { + "steps": [ + "Контекстное окно", + "Прогоны", + "Маршрутизация", + "Эвалы", + "Код", + "Бенчмарки", + "Память", + "Оркестратор", + "Автономия" + ], + "tips": { + "Context window": "Всё, что модель видит разом.", + "Files": "Всё, чего касалась задача, оседает в одном и том же окне.", + "Tool output": "Всё, чего касалась задача, оседает в одном и том же окне.", + "Old answers": "Всё, чего касалась задача, оседает в одном и том же окне.", + "Logs": "Всё, чего касалась задача, оседает в одном и том же окне.", + "Notes": "Всё, чего касалась задача, оседает в одном и том же окне.", + "Task brief": "Всё, чего касалась задача, оседает в одном и том же окне.", + "Raw source": "Всё, чего касалась задача, оседает в одном и том же окне.", + "More files": "Это уже не влезает. Модель это теряет и начинает выдумывать.", + "More logs": "Это уже не влезает. Модель это теряет и начинает выдумывать.", + "Run": "Один прогон: один агент, одно контекстное окно.", + "Run A": "Прогон со своим контекстным окном. Что из него вышло, идёт на вход следующему.", + "Run B": "Прогон со своим контекстным окном. Что из него вышло, идёт на вход следующему.", + "Run C": "Прогон со своим контекстным окном. Что из него вышло, идёт на вход следующему.", + "Eval": "Проверка этого шага. Не прошла, значит, результат дальше не идёт.", + "Chain eval": "Проверка результата всей цепочки.", + "Code": "Шаг стал рутиной, и теперь его делает код. Дешевле, и результат каждый раз один и тот же.", + "Test": "Обычный тест: проверяет, что код делает то, что должен.", + "Other vendor": "Бенчмарки показали: модель другого вендора делает этот шаг лучше.", + "Second model": "Вторая модель работает над тем же шагом рядом с первой.", + "Memory": "То, чему система научилась. Сюда попадает только то, что прошло эвал.", + "Orchestrator": "Программа, которая решает, кто работает следующим, и собирает результаты.", + "@srcOff": "Выбранный прогон этого не видит никогда. В этом и смысл маршрутизации.", + "@srcOn": "Кусок контекста. Маршрутизация решает, каким прогонам его дать, а каким не показывать никогда.", + "@chipOutA": "Результат прогона A, переданный сюда на вход.", + "@chipOutB": "Результат прогона B, переданный сюда на вход.", + "@chipIn": "Передано в это окно. Прогон видит это и больше ничего.", + "@outRot": "Окно переполнено, и результат портится. Это гниение контекста.", + "@outFinal": "Готовый результат всей цепочки.", + "@youBottom": "Ты вмешиваешься только там, где нужно настоящее решение.", + "@you": "Ты решаешь, какой прогон идёт следующим и что в него попадает." + }, + "labels": { + "Task brief": "Бриф задачи", + "Raw source": "Исходники", + "Files": "Файлы", + "Tool output": "Вывод инструментов", + "Logs": "Логи", + "Notes": "Заметки", + "Old answers": "Старые ответы", + "More files": "Ещё файлы", + "More logs": "Ещё логи", + "Run": "Прогон", + "You": "Ты", + "Orchestrator": "Оркестратор", + "Output": "Результат", + "Run A": "Прогон A", + "Run B": "Прогон B", + "Run C": "Прогон C", + "Context window": "Контекстное окно", + "Eval": "Эвал", + "Chain eval": "Эвал цепочки", + "Code": "Код", + "Test": "Тест", + "Other vendor": "Другой вендор", + "Second model": "Вторая модель", + "Memory": "Память", + "Context of A": "Контекст A", + "Context of B": "Контекст B", + "Context of C": "Контекст C", + "Output of A": "Результат A", + "Output of B": "Результат B" + } + } + }, + "ladder": { + "stages": [ + { + "id": "solo", + "label": "Этап I. Соло: ты и один прогон" + }, + { + "id": "orch", + "label": "Этап II. Оркестрация: ты и система прогонов" + } + ], + "tracks": { + "think": "Мышление", + "skill": "Навыки вайбкодинга" + }, + "perspective": { + "was": "Как ты думал", + "think": "Как на самом деле" + }, + "toolsLabel": "Инструменты", + "closing": "К этому моменту ты уже не арендуешь модель, чтобы с ней поговорить. Ты владеешь системой вокруг модели.", + "rungs": [ + { + "n": 0, + "stage": "solo", + "title": "Чат", + "sub": "Ты спрашиваешь, ИИ отвечает. ИИ говорит, делаешь ты.", + "was": "ИИ знает ответ.", + "think": "ИИ предсказывает вероятный ответ, а вероятный ответ бывает неверным.", + "skill": "Ты решил проверять, что говорят ChatGPT, Claude или Gemini, прежде чем этим пользоваться.", + "text": [ + "Ты открываешь ChatGPT, Claude или Gemini и печатаешь. За каждым чатом стоит LLM, большая языковая модель: GPT у OpenAI, Claude у Anthropic, Gemini у Google.", + "LLM устроена как сжатая статистическая модель языка и предсказывает следующий кусок текста, поэтому неверный ответ звучит так же уверенно, как верный.", + "Здесь сидит большинство пользователей LLM. Это важно понимать: именно под этих людей компании, которые делают LLM, и строят свои функции." + ], + "tools": ["ChatGPT, Claude или Gemini, в браузере или на телефоне"] + }, + { + "n": 1, + "stage": "solo", + "title": "Агент", + "sub": "Ты разрешаешь агенту самому запускать команды.", + "was": "У ИИ я спрашиваю совета.", + "think": "ИИ я отдаю работу.", + "skill": "Ты решил запустить Claude Code или Codex в терминале с включённым bypass и дать агенту действовать.", + "text": [ + "Те же модели есть и в виде агентов, которые работают у тебя на компьютере. Claude Code работает на Claude, Codex на GPT.", + "Ты включаешь режим bypass, чтобы агент перестал спрашивать разрешения, и даёшь агенту самому запускать команды. Здесь чат становится агентом, потому что агентность и значит действовать самостоятельно. Каждый запуск на задачу считается одним прогоном.", + "Прежде чем дать агенту волю, держи проект в git и сохраняй версию перед каждым прогоном: прогон что-то сломал, откатился к версии, и всё. Читай, что агент поменял, прежде чем принять, и никогда не показывай агенту свои пароли и ключи.", + "Отсюда у агента растут две вещи параллельно. Голова: память, контекст, суждение. И руки, то есть инструменты, до которых агент дотягивается: терминал, файлы, веб, другие сервисы через их API и MCP-серверы, плагины, которые к этим сервисам подключают.", + "Подключи агента к календарю через MCP-сервер, и агент сам назначит встречу, а не объяснит тебе, как её назначить." + ], + "tools": [ + "Claude Code, Codex или агент командной строки другого вендора", + "Терминал с правом действовать", + "Git" + ] + }, + { + "n": 2, + "stage": "solo", + "title": "Постоянные инструкции", + "sub": "Файл, который агент читает каждый раз.", + "was": "Агент помнит, что я говорил в прошлый раз.", + "think": "Агент знает только то, что записано.", + "skill": "Ты решил завести глобальный CLAUDE.md и по одному на каждый проект.", + "text": [ + "Ты находишь CLAUDE.md, файл инструкций, который агент читает при каждом запуске, но почти его не трогаешь. Так что агент работает на том, что случайно нахватал из разговоров с тобой.", + "Позже ты узнаёшь, что их два. Глобальный говорит, кто этот агент всегда и везде, проектный говорит, что нужно именно этому проекту." + ], + "tools": ["CLAUDE.md для Claude Code", "AGENTS.md для Codex"] + }, + { + "n": 3, + "stage": "solo", + "title": "Гниение контекста", + "sub": "Ты всё дописываешь в файл, а модель тупеет.", + "was": "Чем больше я даю, тем умнее становится агент.", + "think": "После какого-то предела от контекста агент только тупеет.", + "skill": "Ты решил держать CLAUDE.md короче 200 строк, а остальное вынести в документы, которые агент открывает по мере надобности.", + "text": [ + "Контекстное окно вмещает всё, что модель видит разом. Чего в окне нет, для модели не существует.", + "Ты дописываешь CLAUDE.md, задача тянет всё больше файлов, и в какой-то момент окно забито так, что модель тупеет и начинает выдумывать. Это и есть гниение контекста.", + "Насколько честен контекст, настолько честен и агент, так что ты учишься держать файл коротким: глобальный и проектный вместе примерно в 200 строк. Остальное уходит в документы, которые агент открывает только когда они нужны." + ] + }, + { + "n": 4, + "stage": "solo", + "title": "Вопрос", + "sub": "Одна цель на запрос, и всё, что этой цели нужно.", + "was": "Плохой ответ значит слабая модель.", + "think": "Плохой ответ обычно значит плохой вопрос.", + "skill": "Ты решил класть в каждый запрос одну цель и говорить, что должно быть в ответе.", + "text": [ + "Ты перестаёшь кидать в окошко пожелание и начинаешь ставить вопрос. Говоришь, что именно хочешь и что должно быть в ответе, а прочитав ответ, выбираешь следующий вопрос.", + "LLM работает со смыслом так же, как человек, поэтому от постановки вопроса зависит, какой ответ ты получишь. Модель ещё и идёт за твоей постановкой, так что на наводящий вопрос ты получишь согласие. Кто плохо говорит с LLM, уходит в иллюзии." + ] + }, + { + "n": 5, + "stage": "solo", + "title": "Эвалы", + "sub": "Ты перестаёшь гадать и начинаешь измерять.", + "was": "Выглядит правильно, значит, работает.", + "think": "Ничего не работает, пока тест не сказал, что работает.", + "skill": "Ты решил писать тесты и подключить агента-судью, который проверяет первого.", + "text": [ + "Ты пишешь эвалы, маленькие тесты, которые доказывают, что результат всё ещё работает. До старта прогона ты записываешь, что значит «готово».", + "Почти все этот шаг пропускают. А именно здесь ты начинаешь измерять вместо того, чтобы надеяться.", + "Здесь же ты подключаешь агента-судью, вторую модель, чья работа проверять первую. Это может быть твой QA-агент, у меня это The Order. Смысл в том, чтобы проверку автоматизировать." + ], + "tools": [ + "Тестовые раннеры, которыми ты уже пользуешься", + "Агент-судья", + "Скрипты, которые читают результат и говорят «прошёл» или «не прошёл»" + ] + }, + { + "n": 6, + "stage": "solo", + "title": "Бенчмарки", + "sub": "Та же задача на другой модели у другого вендора.", + "was": "Я нашёл свою модель.", + "think": "Лучшая модель под мою задачу меняется каждые несколько месяцев.", + "skill": "Ты решил написать скрипт, который шлёт одну и ту же задачу нескольким вендорам и оценивает каждого твоими эвалами.", + "text": [ + "Ты гоняешь свою задачу на моделях разных вендоров и сравниваешь скорость, цену и то, как часто проходит эвал. Какая модель в чём хороша, меняется каждые несколько месяцев, так что ты за этим следишь.", + "Не та модель может дорого обойтись, а изнутри одного чата ты этого никогда не увидишь." + ], + "tools": [ + "Подписка или API-ключ у каждого вендора", + "Один скрипт, который шлёт один и тот же промпт каждому", + "Твои эвалы с LVL 5 как оценка" + ] + }, + { + "n": 7, + "stage": "orch", + "title": "Декомпозиция", + "sub": "Одно контекстное окно кончается, и ты делишь работу на несколько прогонов.", + "was": "Один умный агент сделает всё целиком.", + "think": "Большая задача складывается из цепочки маленьких прогонов.", + "skill": "Ты решил запускать субагентов и передавать файлы от одного прогона к следующему.", + "text": [ + "Задача больше не влезает в одно контекстное окно, так что ты режешь её на подзадачи. У каждой свой прогон со свежим окном, и результат одного агента становится входом для следующего.", + "Цену ты чувствуешь сразу: передачи между агентами и уход в сторону от цели. Со временем ты учишься делить работу, только когда она правда не влезает в одно окно." + ], + "tools": [ + "Субагенты, то есть агенты, которых твой агент запускает на один кусок работы", + "Очереди задач", + "Обычные файлы, которые передаются от прогона к прогону" + ] + }, + { + "n": 8, + "stage": "orch", + "title": "Маршрутизация контекста", + "sub": "Кому какой кусок контекста достаётся, а кто его не видит никогда.", + "was": "Дай каждому агенту всё, на всякий случай.", + "think": "Что прогону не показали, то прогон и не собьёт.", + "skill": "Ты решил вести на каждый шаг список: что прогон получает и куда может писать.", + "text": [ + "Каждый прогон получает то, что нужно этому шагу: описание задачи, предыдущий результат, файлы, которые надо прочитать. И ничего, что могло бы сбить с толку.", + "До LVL 11 это решаешь ты сам на каждом шаге, так что оркестратор здесь ты. На LVL 12 эту роль забирает программа." + ], + "tools": [ + "Список на каждый шаг: что прогон получает", + "Входы, которые можно читать, но нельзя менять", + "Правило, что прогону можно писать и куда" + ] + }, + { + "n": 9, + "stage": "orch", + "title": "Эвалы на каждом шаге", + "sub": "И один на всю цепочку.", + "was": "Я проверяю результат в конце.", + "think": "Каждому шагу нужна своя проверка, иначе первая же ошибка расползётся по цепочке.", + "skill": "Ты решил ставить эвал между прогонами, чтобы проваленный шаг ничего не передавал дальше.", + "text": [ + "Ошибка в первом прогоне становится фактом для всех следующих прогонов. Поэтому у каждого шага свой эвал, и у всей цепочки тоже.", + "Оркестрация без эвалов на каждом шаге только создаёт иллюзию промышленного масштаба. Шаг, который не прошёл свой эвал, ничего дальше не передаёт." + ], + "tools": ["Те же эвалы с LVL 5, теперь между прогонами"] + }, + { + "n": 10, + "stage": "orch", + "title": "Код вместо модели", + "sub": "Ты сносишь половину того, что построил.", + "was": "Чем больше ИИ, тем лучше система.", + "think": "Там, где шаг предсказуем, код справляется лучше модели.", + "skill": "Ты решил превратить рутинные шаги в обычные функции и хуки, которые проверяют результат.", + "text": [ + "В какой-то момент ты сносишь половину построенного, чтобы система стала легче. Каждый шаг, который стал рутиной, превращается в код.", + "Код дешевле, каждый раз даёт один и тот же результат, и тестируешь ты его как любую другую функцию. Модель остаётся только там, где есть настоящая неопределённость.", + "Лёгким ядром проще управлять и, что важнее, ему проще доверять." + ], + "tools": [ + "Обычные функции", + "Планировщики", + "Скрипты валидации", + "Хуки, которые проверяют результат агента, прежде чем его принять" + ] + }, + { + "n": 11, + "stage": "orch", + "title": "Память", + "sub": "То, что переживает сессию и общее для всех прогонов.", + "was": "Каждая сессия начинается с чистого листа.", + "think": "То, чему система научилась, должно пережить сессию, если прошло эвал.", + "skill": "Ты решил дать каждому агенту файл памяти, а всем прогонам общее хранилище с поиском.", + "text": [ + "Ты находишь MEMORY.md, память, которая живёт дольше одного контекстного окна и общая для всех агентов. Туда уходят решения, подводные камни, что ты пробовал и что не сработало.", + "В память попадает только то, что прошло эвал, а провал записывается как провал. Работа накапливается, и умная в моменте система становится умной надолго." + ], + "tools": [ + "Файл памяти у каждого агента", + "Общее хранилище, в котором ищет каждый прогон", + "Полнотекстовый поиск по прошлым сессиям" + ] + }, + { + "n": 12, + "stage": "orch", + "title": "Агенты вызывают друг друга", + "sub": "Оркестратор выбирает, кто проснётся, передаёт работу и собирает результат.", + "was": "Каждый шаг мне приходится вести самому.", + "think": "Я принимаю решения, а передачи берут на себя агенты.", + "skill": "Ты решил написать протокол онбординга и общий для агентов формат сообщений.", + "text": [ + "Ты пишешь протокол онбординга, из которого новый агент узнаёт свою роль и как войти в систему. Теперь агенты вызывают друг друга вместо тебя.", + "Один пишет черновик, судья возражает, первый правит, и всё это сходится на твоих эвалах. Ты вмешиваешься только там, где нужно настоящее решение." + ], + "tools": [ + "Список агентов и как до каждого достучаться", + "Общий для всех формат сообщений", + "Оркестратор с лимитом на то, сколько раз задача может ходить между агентами" + ] + }, + { + "n": 13, + "stage": "orch", + "title": "Автономия", + "sub": "Твои агенты работают сами.", + "was": "Моя работа в том, чтобы делать задачу.", + "think": "Моя работа в том, чтобы собирать задачи, которые система выполнит без меня.", + "skill": "Ты решил настроить расписания и дозорных, чтобы система работала ночью и оставляла логи.", + "text": [ + "Твой день начинается с того, что ты просыпаешься и смотришь, что агенты построили за ночь. Проверяешь, что вы с агентами усвоили подводные камни. Потом собираешь следующую пачку задач.", + "Большая часть твоего времени уходит на то, чтобы собрать задачу под твою систему, такую, чтобы система выполнила её сама.", + "Без тебя ни один агент не тратит деньги, ничего не удаляет и ничего не публикует." + ], + "tools": [ + "Расписания", + "Дозорные, которые поднимают тревогу", + "Логи, чтобы каждый механизм оставлял след, который ты читаешь утром" + ] + }, + { + "n": 14, + "stage": "orch", + "title": "Отделы", + "sub": "Команды агентов, у каждой своя дисциплина.", + "was": "Я управляю набором агентов.", + "think": "Я управляю чем-то похожим на компанию.", + "skill": "Ты решил собрать агентов в отделы, каждому дать своего судью, а агенту-продакту отдать целые проекты, которые идут через эти отделы.", + "text": [ + "Это пока чистая спекуляция, я сам до этого не дошёл.", + "Ты строишь отделы агентов: маркетинг, развитие бизнеса, разработку с девелоперами и QA. У каждого свой судья, каждый следует протоколу, и все знают друг о друге.", + "Дальше ты подключаешь агента-продакт-менеджера, который за ночь строит целые проекты силами твоих отделов. Такого ещё никто не выпустил." + ] + }, + { + "n": 15, + "stage": "orch", + "title": "???", + "sub": "Когда-нибудь." + } + ] + } +} diff --git a/src/lib/aiAtlas/readings.tsx b/src/lib/aiAtlas/readings.tsx index 5fedead6..115b66fa 100644 --- a/src/lib/aiAtlas/readings.tsx +++ b/src/lib/aiAtlas/readings.tsx @@ -29,7 +29,12 @@ export type Readings = { article: { lead: Run[]; paras: Run[][]; - board: { steps: string[]; tips: Record }; + board: { + steps: string[]; + tips: Record; + /* English tile label -> label drawn, for a translated board. */ + labels?: Record; + }; }; ladder: { stages: { id: string; label: string }[]; @@ -173,6 +178,8 @@ function drawBoard( }; const STEPS = board.steps; const TIPS = board.tips; + /* Tiles are keyed by their English label; a translation draws its own. */ + const say = (text: string) => board.labels?.[text] || text; const LAST = STEPS.length; const TH = 44, Y = 236, @@ -243,23 +250,28 @@ function drawBoard( const tipFor = (label: string, g: SVGElement) => { if (g.classList.contains('src')) { return g.classList.contains('is-off') - ? 'The selected run never sees this. That is the point of routing.' - : 'A piece of context. Routing decides which runs get it and which never see it.'; + ? TIPS['@srcOff'] || + 'The selected run never sees this. That is the point of routing.' + : TIPS['@srcOn'] || + 'A piece of context. Routing decides which runs get it and which never see it.'; } if (g.classList.contains('chip')) { return /^Output of/.test(label) - ? label.replace('Output of ', 'The result of Run ') + - ', routed in as this run’s input.' - : 'Routed into this window. The run sees this and nothing else.'; + ? TIPS['@chipOut' + label.slice(-1)] || + label.replace('Output of ', 'The result of Run ') + + ', routed in as this run’s input.' + : TIPS['@chipIn'] || + 'Routed into this window. The run sees this and nothing else.'; } if (label === 'Output') return current === 1 - ? 'The window is too full, so the result gets worse. That is context rot.' - : 'The finished result of the whole chain.'; + ? TIPS['@outRot'] || + 'The window is too full, so the result gets worse. That is context rot.' + : TIPS['@outFinal'] || 'The finished result of the whole chain.'; if (label === 'You') return g.dataset.bottom - ? 'You step in only for the real decisions.' - : 'You decide which run goes next and what it sees.'; + ? TIPS['@youBottom'] || 'You step in only for the real decisions.' + : TIPS['@you'] || 'You decide which run goes next and what it sees.'; return TIPS[label] || ''; }; /* One-line tips on hover, focus or tap, ordered for this board on @@ -322,7 +334,7 @@ function drawBoard( }, g, ); - t.textContent = label; + t.textContent = say(label); withTip(g, label); return span(g, from, until); }; @@ -346,7 +358,7 @@ function drawBoard( until?: number, ) => { const t = span(el('text', { x, y, class: 'd-label' }, gBack), from, until); - t.textContent = text; + t.textContent = say(text); return t; }; const line = (x1: number, x2: number, from: number, until?: number) => diff --git a/src/lib/aiAtlas/ru.json b/src/lib/aiAtlas/ru.json new file mode 100644 index 00000000..fdafa15d --- /dev/null +++ b/src/lib/aiAtlas/ru.json @@ -0,0 +1,968 @@ +{ + "copy": { + "seoTitle": "AI Атлас: как один человек руководит командой ИИ-агентов", + "seoDescription": "Карта того, как я работаю с командой ИИ-агентов: одна задача от моего сообщения до результата. Рядом Тезис и Лестница из 16 ступеней, чтобы этому научиться.", + "seoKeywords": "ИИ-агенты, мультиагентная система, оркестрация ИИ, Claude Code, Codex, вайбкодинг, Wolf’s Terminal", + "ogImageAlt": "AI Атлас: как один человек руководит командой ИИ-агентов", + "seoTitleThesis": "Тезис: преимущество у того, кто решает сложные задачи с ИИ", + "seoDescriptionThesis": "Вайбкодинг сократил разрыв между инженерами и остальными. Что дальше: умение спрашивать, контекстное окно, оркестрация, эвалы и память.", + "seoKeywordsThesis": "вайбкодинг, ИИ-агенты, контекстное окно, маршрутизация контекста, оркестрация, эвалы, LLM", + "ogImageAltThesis": "Сегодня ты стоишь ровно столько, насколько сложные задачи можешь решить.", + "seoTitleLadder": "Лестница ИИ-агентов: 16 ступеней от чата до системы агентов", + "seoDescriptionLadder": "Где ты сейчас в работе с ИИ-агентами и чему учиться дальше: 16 ступеней от чата до Claude Code, эвалов, оркестрации и памяти, на каждой навык для следующего шага.", + "seoKeywordsLadder": "как научиться работать с ИИ-агентами, вайбкодинг, Claude Code, CLAUDE.md, гниение контекста, эвалы, бенчмарки, субагенты, оркестрация, память агентов", + "ogImageAltLadder": "Лестница: 16 ступеней от чата до системы агентов", + "loading": "Загрузка…", + "failedToLoad": "Не удалось загрузить данные: ", + "welcomeBanner": "АТЛАС МОЕЙ СИСТЕМЫ ОРКЕСТРАЦИИ", + "day": "ДЕНЬ", + "daySinceTail": "с тех пор, как мы начали это строить", + "apexFounderFallback": "основатель", + "redactedPlaceholder": "СКРЫТО", + "engLeadLabel": "Техлид", + "publicInternetLabel": "ОТКРЫТЫЙ ИНТЕРНЕТ", + "telegramLabel": "TELEGRAM", + "claudeMdLabel": "claude.md", + "canvasStats": { + "humans": "люди", + "agents": "ИИ-агенты", + "subAgents": "ИИ-субагенты", + "products": "продукты" + }, + "introDossierTitle": "АТЛАС", + "introDossierCjk": "地図帳", + "introStoryBody": "Вот как я управляю командой ИИ-агентов. Одна задача проходит путь от моего сообщения до результата, и каждая плитка на карте обозначает функцию, которую я построил на этом пути. Нажми на плитку, и я расскажу, что она делает и зачем мне нужна.", + "introStoryLink": "", + "introQuestionsBefore": "", + "introQuestionsLink": "", + "introQuestionsAfter": "", + "introDepthLabel": "глубина", + "introDepthValue": "Владение и жизнь одной задачи", + "introInhabitantsLabel": "основа", + "introPrincipleLabel": "доказательства", + "principles": [ + "Каждая карточка про функцию, которой я пользуюсь каждый день. Там, где я пишу, что что-то работает, это подтверждает журнал на моём сервере." + ], + "legendTitle": "Легенда", + "legendCjk": "凡例", + "legendHumanLabel": "человек", + "legendHumanDesc": "курс · последнее слово", + "legendAgentLabel": "ИИ-агент", + "legendAgentDesc": "владелец проекта", + "legendSubAgentLabel": "помощник", + "legendSubAgentDesc": "узкая задача", + "legendProductLabel": "механизм", + "legendProductDesc": "этап или его опора", + "legendSolidLabel": "сплошная", + "legendSolidDesc": "стрелки: ход задачи", + "legendFilledLabel": "заливка", + "legendFilledDesc": "поддерживает этап", + "legendArticleCta": "", + "legendArticleUrl": "", + "toggleEnvironment": "Среда", + "toggleSecurity": "Безопасность", + "doctrineTitle": "Доктрина", + "doctrineCjk": "守則", + "doctrineImageAlt": "Права и доказательства в Terminal", + "securityIntroTitle": "ПРАВА И ДОКАЗАТЕЛЬСТВА", + "securityIntroCjk": "守り", + "securityIntroDesc": "Это зоны доступа и ответственности на моём сервере. Кольца их группируют. Сертификат безопасности это не заменяет.", + "securityIntroRows": [ + { + "k": "разрешения", + "v": "Записанные права проектов" + }, + { + "k": "контроль", + "v": "Зависит от механизма" + }, + { + "k": "доказательства", + "v": "Записи прогонов и журналы" + } + ], + "securityLayers": [], + "securityWhyWeLikeIt": "Доказательства", + "securityCenterCore": "РАБОТА", + "securityCenterKanji": "守", + "statsHeading": "Принципы работы", + "statsCjk": "数", + "securityStats": [ + { + "v": "Зона", + "k": "Записанные владельцы" + }, + { + "v": "Доступ", + "k": "Свои условия у каждой зоны" + }, + { + "v": "Факты", + "k": "Записи прогонов" + }, + { + "v": "Приёмка", + "k": "Готовность подтверждаю я" + } + ], + "agentsHeading": "Кто чем владеет в системе", + "agentsCjk": "共棲", + "agentsSubtitle": "Операторы проектов действуют в пределах прав, которые я записал. Общая инфраструктура принадлежит The Order.", + "authorityAgentRole": "Общая инфраструктура", + "orderName": "The Order", + "orderCjk": "序", + "orderCreds": ["Границы доступа", "Общая инфраструктура"], + "securityAgents": [], + "agentsPunchline": "Правила разрешений говорят, что агенту можно делать. О технической изоляции они не говорят ничего.", + "patternsHeading": "Непрерывность и доказательства", + "patternsCjk": "型", + "patternsSubtitle": "Механизмы, которые сохраняют контекст и записывают, что произошло.", + "securityPatterns": [], + "footerEnd": "КОНЕЦ · WOLF’S TERMINAL", + "hankoSelfTitle": "здесь построено, здесь работает", + "hankoCoTitle": "у каждого проекта один владелец", + "modalCloseLabel": "Закрыть", + "modalHint": "Esc закрывает. Тема внутри открывается на месте.", + "readMoreHint": "нажми, чтобы читать дальше", + "brandTitle": "Wolf’s Terminal", + "apexLabel": "WOLF", + "apexSub": "курс", + "orderLabel": "The Order", + "resourceAgents": "Коллеги", + "resourceMemory": "Память", + "resourceTools": "Инструменты", + "resourceModels": "Модели", + "ringOrderLabel": "I · Владение", + "ringDevEnvLabel": "II · Ресурсы", + "ringProjectsLabel": "III · Жизнь задачи", + "ringTerritoriesLabel": "IV · Механизмы", + "ringOrderTitle": "Владение", + "ringDevEnvTitle": "Ресурсы", + "ringDevEnvDesc": "На что опирается каждый этап задачи: коллеги, память, инструменты, модели.", + "ringProjectsTitle": "Жизнь задачи", + "ringProjectsDesc": "Кольца показывают этапы одной задачи, по часовой стрелке от «Проекта» до «Итога».", + "ringTerritoriesTitle": "Механизмы", + "ringTerritoriesDesc": "Каждая тема открывает свою карточку.", + "metaLabel": "ДОКУМЕНТАЦИЯ TERMINAL", + "tabAtlas": "Атлас", + "tabArticle": "Тезис", + "tabLadder": "Лестница", + "legendKey": "Ключевой тезис", + "legendSee": "Продукт и бизнес", + "topicsPlaceholder": "Атлас", + "stagesAria": "От проекта до итога, по часовой стрелке", + "rowInside": "внутри", + "rowMechanism": "механизм", + "rowResource": "ресурс", + "rowStage": "этап", + "stageStart": "СТАРТ", + "stageEnd": "ИТОГ", + "topicsLabel": "Темы", + "doctrineCaption": "ПРАВА И ДОКАЗАТЕЛЬСТВА", + "stageLabels": [ + "Проект", + "Задача", + "Отправка", + "Подготовка", + "Работа", + "Итог" + ] + }, + "steps": { + "project-home": { + "title": "Проект", + "location": "Terminal.", + "text": "Я выбираю проект. Его правила, память и решения о сборке действуют на всё, что идёт дальше." + }, + "task": { + "title": "Я даю задачу", + "location": "Мой браузер", + "text": "Я отправляю задачу. Браузер передаёт сообщение в Terminal." + }, + "terminal": { + "title": "Terminal её доставляет", + "location": "Наш сервер", + "text": "Terminal кладёт задачу в сессию агента того проекта, который я выбрал." + }, + "prepare": { + "title": "Агент готовится", + "location": "Сессия агента.", + "text": "Новая сессия загружает свои правила, а уже открытая продолжает с тем, что помнит." + }, + "agent": { + "title": "Агент работает", + "location": "Наш сервер + провайдер модели", + "text": "Агент делает задачу, опираясь на свои правила и память. Инструменты работают на моём сервере, а модель, к которой агент обращается, у провайдера." + }, + "result": { + "title": "Я получаю результат", + "location": "Мой браузер", + "text": "Terminal стримит мне ответ агента. То, что построили инструменты, остаётся в проекте." + } + }, + "nodes": { + "wolf": { + "title": "Wolf", + "role": "Курс", + "detail": [ + "Я ставлю задачу и решаю, кто чем владеет. Агенты работают в пределах полномочий, которые я им уже дал; всё, что требует моего решения, ждёт его." + ], + "basis": "Мой устав владения и правила согласования." + }, + "access": { + "title": "Cloudflare", + "role": "Вход", + "detail": [ + "Cloudflare Tunnel публикует веб-приложения; ничто на сервере не слушает интернет напрямую. Access проверяет, кто ты, прежде чем пустить во внутреннее приложение. Публичные сайты отвечают всем." + ], + "basis": "Конфигурация туннеля и список приложений Access." + }, + "models": { + "title": "Провайдеры моделей", + "role": "Внешнее мышление", + "detail": [ + "Claude и Codex отправляют разговор своим провайдерам. Мышление происходит там; инструменты работают здесь или ходят на хосты, куда проекту разрешён доступ." + ], + "basis": "Отправка к провайдерам в Terminal и подключённые инструменты." + }, + "services": { + "title": "Подключённые сервисы", + "role": "Внешние инструменты", + "detail": [ + "Наружу агенты выходят через инструменты: репозиторий GitHub, headless-браузер для страниц, которые обычным запросом не прочитать, таблицу, поток аналитики. У каждого подключения свои границы доступа." + ], + "basis": "Интерфейсы подключённых инструментов." + }, + "telegram": { + "title": "Telegram", + "role": "Передача людям", + "detail": [ + "Telegram доставляет оповещения и мои голосовые задачи. Reception берёт задачу у человека, которому я дал полный доступ, и возвращает результат в его личный чат." + ], + "basis": "Каналы уведомлений и проверка доступа в Reception." + }, + "order": { + "title": "The Order", + "role": "Владелец сервера", + "detail": [ + "Мой серверный агент The Order владеет общей инфраструктурой и границами доступа, а перезапуски и пересборки выполняет сам, а не возвращает мне." + ], + "basis": "Устав владения, включая делегированные исключения." + }, + "secrets": { + "title": "Секреты", + "role": "Граница учётных данных", + "detail": [ + "The Order хранит общие учётки. Оператор проекта получает только те, что названы в допуске, и никаких других." + ], + "basis": "Правила владения учётными данными." + }, + "apex": { + "title": "Пульт сервера", + "role": "Управление инфраструктурой", + "detail": [ + "Пульт сервера показывает каждый Docker-сервис и выполняет по SSH операции, которые я разрешил. Изменения общей инфраструктуры идут через The Order." + ], + "basis": "Docker-прокси только на чтение и шлюз с forced-command." + }, + "terminal": { + "title": "Terminal", + "role": "Оркестрация задач", + "detail": [ + "Задача живёт в Terminal: здесь открывается, здесь выполняется и сюда возвращается. Ветки и выделения остаются такими, какими я их оставил." + ], + "basis": "Отправка задач в Terminal и жизнь задачи на этой карте." + }, + "agents": { + "title": "Агенты проектов", + "role": "Владение работой", + "detail": [ + "Terminal держит по одной сессии на проект. Реестр показывает, кто чем владеет; SEND TO идёт к владельцу, а не делает работу за владельца." + ], + "basis": "Реестр владельцев проектов и канал для совместной работы." + }, + "projects": { + "title": "Сервисы проектов", + "role": "Готовые продукты", + "detail": [ + "На этом хосте за loopback-портами и Tunnel работают десятки сервисов проектов. Часть привязана к tailnet; часть живёт на своих серверах." + ], + "basis": "Привязки контейнеров на хосте и записанные допуски к удалённым хостам." + }, + "memory": { + "title": "Память", + "role": "Контекст между сессиями", + "detail": [ + "Заметки проекта и MemPalace переносят прошлые решения в дальнейшую работу. Они отделены от живого разговора и истории сессии." + ], + "basis": "Память проекта, записи сессий и интерфейс MemPalace." + }, + "tools": { + "title": "Инструменты и среда", + "role": "Исполнение", + "detail": [ + "Инструменты читают и меняют работу проекта в пределах того, что проекту разрешено. Что инструмент может и что ему можно: два разных вопроса." + ], + "basis": "Правила владения проектами." + }, + "deploy": { + "title": "Операторы проектов", + "role": "Ответственность за релизы", + "detail": [ + "Операторы проектов деплоят, перезапускают и читают логи в пределах допусков, которые я записал, в том числе на удалённых хостах. Общая инфраструктура остаётся за The Order. Плановые задачи крутятся в cron на хосте или внутри сервисов." + ], + "basis": "Делегированные допуски операторов." + }, + "records": { + "title": "Логи прогонов", + "role": "Доказательства", + "detail": [ + "История сессий и журналы механизмов хранят то, что произошло. Финальный ответ агента остаётся заявлением, а доказательством служит журнал." + ], + "basis": "Правило логирования: каждый механизм оставляет след." + }, + "watchers": { + "title": "Дозорные", + "role": "После релиза", + "detail": [ + "Дозорные проверяют подключённые проекты и сообщают о сбоях. Trivy сканирует образы и хосты на уязвимости. Сообщают; чинит человек." + ], + "basis": "Раннер дозорных и его heartbeat." + }, + "recovery": { + "title": "Резерв", + "role": "Постоянное состояние", + "detail": [ + "Restic каждую ночь копирует выбранное состояние наружу, в зашифрованном виде. В охвате есть исключения. Снимок засчитывается, когда он существует и восстановление из него проверено." + ], + "basis": "Настройка бэкапов и лог бэкапов." + }, + "remote": { + "title": "Другие хосты", + "role": "Площадки проектов", + "detail": [ + "Часть проектов работает на машинах вне этого сервера. У каждой есть обёртка, через которую агент там деплоит, перезапускает и читает логи. На продакшен нужен отдельный допуск." + ], + "basis": "Делегированные обёртки для удалённых хостов." + }, + "backups": { + "title": "Хранилище копий", + "role": "Вне сервера", + "detail": [ + "Restic копирует выбранное состояние на другую площадку; зеркало GitHub копирует подходящие репозитории. У обоих есть исключения. Что восстановление работает, доказывают успешная копия и проверенный рестор." + ], + "basis": "Настройка зеркала и его лог прогонов; список снимков Restic." + } + }, + "entries": { + "message": { + "title": "Запрос", + "text": "Мой браузер отправляет задачу в Terminal.", + "detail": ["Я говорю агенту, что нужно изменить и какой результат жду."] + }, + "attachments": { + "title": "Вложения", + "text": "Файлы идут вместе с задачей.", + "detail": [ + "Скриншоты и файлы идут вместе с сообщением. Агент работает с тем, что я показал, без моего пересказа." + ] + }, + "reply-mode": { + "title": "DEF / SIM", + "text": "DEF отправляет задачу как есть. SIM добавляет инструкцию ответить коротко и по-русски, не ограничивая ни работу, ни инструменты.", + "detail": [ + "DEF: обычный ответ. SIM просит короткий ответ на русском, а работа делается целиком. Я читаю меньше, работа та же." + ] + }, + "recipient": { + "title": "Адресат и модель", + "text": "Сообщение уходит выбранному агенту вместе с выбранной моделью.", + "detail": [ + "Я выбираю агента, модель и глубину мышления. Каждая линия помнит свой выбор, так что переключиться на другой движок и обратно мне ничего не стоит." + ] + }, + "actions": { + "title": "Сохранить код и решения", + "text": "Две вещи я прошу намеренно: сохранить решения и запушить код." + }, + "project": { + "title": "Движок", + "text": "Движок определяет, кто выполняет задачу: Claude, OpenAI или Grok.", + "detail": [ + "Terminal запускает агента на выбранном мной движке (Claude, OpenAI или Grok) внутри открытого проекта." + ] + }, + "queue": { + "title": "Очередь", + "text": "Как работа в очереди ждёт и запускается." + }, + "sendto": { + "title": "Позвать агента", + "text": "Агент называет коллегу в одной строке SEND TO. Terminal доставляет просьбу в собственную сессию коллеги; два разговора остаются раздельными." + }, + "global": { + "title": "Общий CLAUDE.md", + "text": "Общие правила: как агенты работают со мной и что им можно менять.", + "detail": [ + "Один файл правил над всеми проектами. В нём сказано, как агенты проверяют утверждения, разговаривают со мной, уважают границы владения и доводят работу до конца. Claude загружает его сам; Codex получает указание прочитать его первым." + ] + }, + "local": { + "title": "CLAUDE.md проекта", + "text": "Собственный файл правил проекта в корне папки. В Terminal AGENTS.md указывает на тот же файл для линии OpenAI.", + "detail": [ + "У каждой папки проекта свои правила в корне: как здесь работать, дизайн-паспорт, где кончается владение. Агент читает их прежде, чем что-то трогать." + ] + }, + "memorymd": { + "title": "MEMORY.md", + "text": "Индекс памяти проекта со ссылками на сохранённые заметки. Ведёт агента к прежним решениям и отделён от полной истории разговора и от MemPalace.", + "detail": [ + "Индекс того, что проект уже узнал. Claude загружает его на старте сессии; Codex получает указатель на него в первом ходе." + ] + }, + "palace": { + "title": "MemPalace", + "text": "Хранилище сохранённых решений с поиском, разложенное по проектам. Агенты находят нужные записи и сохраняют новые через его инструменты. Бриф на старте сессии может подтянуть свежие записи.", + "detail": [ + "В MemPalace решения уходят, чтобы выжить. Агент записывает, о чём мы договорились, а новая сессия ищет там, прежде чем снова спрашивать меня." + ] + }, + "skills": { + "title": "Навыки", + "text": "Инструкции для одного вида работы. Агент читает подходящий навык и идёт по его порядку. Навык может указывать, какими инструментами пользоваться.", + "detail": [ + "Навык: записанный метод для одного вида работы. Агент открывает подходящий и следует ему без импровизации." + ] + }, + "tools": { + "title": "Инструменты", + "text": "Инструменты делают действия: читают или правят файл, запускают команду, ходят во внешний сервис. Результат возвращается агенту, и агент решает, что дальше.", + "detail": [ + "Через инструменты агент действует: правит файл, запускает команду, обращается к сервису. Результат возвращается, и агент решает, каким будет следующий шаг." + ] + }, + "history": { + "title": "История разговоров", + "text": "Сессия хранит запись разговора. Возобновление сессии и поиск по отобранной памяти используют разные хранилища.", + "detail": [ + "Сессия хранит весь разговор, так что я могу к нему вернуться. Архив держит каждую сессию дольше, чем сам CLI, а полнотекстовый индекс ищет по всем сразу." + ] + }, + "decisions": { + "title": "Сохранённые решения", + "text": "Решение можно сохранить для будущей работы в памяти проекта или в MemPalace. Сохранить должен агент; один финальный ответ этого не гарантирует.", + "detail": [ + "Решение, которое живёт только в чате, пропадает. Агент записывает его в память, иначе следующая сессия начнёт с нуля." + ] + }, + "action-prep": { + "title": "PREP", + "text": "Сохранить и проверить решения.", + "detail": [ + "PREP делается последним перед уходом: сохранить решения, потом перечитать их и доказать, что они записались." + ] + }, + "action-push": { + "title": "PUSH", + "text": "Закоммитить и запушить изменения.", + "detail": [ + "PUSH коммитит изменения в исходниках и отправляет их в репозиторий проекта. Записью считается код. Чат записью не считается." + ] + }, + "timing-order": { + "title": "Порядок запуска", + "text": "Задачи из очереди идут одна за другой.", + "detail": [ + "Задачи из очереди доходят до агента одна за другой, в порядке, который задал я." + ] + }, + "timing-availability": { + "title": "Свободен ли агент", + "text": "Ждёт, пока слот сможет принять работу.", + "detail": [ + "Следующая задача ждёт, пока её агент освободится. Сервер проверяет это перед отправкой." + ] + }, + "timing-schedule": { + "title": "Отсрочка старта", + "text": "Первую задачу в очереди запускает время.", + "detail": [ + "Я задаю, когда работе из очереди можно начинаться. Первая задача стартует, когда время пришло и агент свободен." + ] + }, + "timing-server": { + "title": "Очередь на сервере", + "text": "Работает без открытого браузера.", + "detail": [ + "Очередь держит сервер. Я закрываю браузер, а работа всё равно идёт." + ] + }, + "ask-once": { + "title": "Спросить", + "text": "Одна просьба агента к коллеге.", + "detail": [ + "Агент называет коллегу в одной строке SEND TO. Terminal доставляет просьбу в собственную сессию коллеги, с контекстом того проекта, и приносит ответ обратно." + ] + }, + "auto": { + "title": "Авторежим", + "text": "Авторежим работает на сервере Terminal.", + "detail": [ + "В авторежиме пара агентов, которую я включил, передаёт работу друг другу через сервер, пока мой браузер закрыт. Останавливается на лимите пересылок или когда сообщение повторяется." + ] + }, + "onboarding": { + "title": "Онбординг агента", + "text": "Новая сессия начинается со знакомства с тем, как мы работаем, и с проектом, к которому относится.", + "detail": [ + "Codex получает указание прочитать общие правила, правила проекта, потом индекс памяти. Claude получает правила проекта; остальное CLI загружает сам. Файл фактов сообщает линию, модель и режим." + ] + }, + "directory": { + "title": "Чей проект", + "text": "Агенты могут найти коллег и увидеть, кто каким проектом владеет.", + "detail": [ + "Справочник говорит, кто владеет каждым проектом. На территорию коллеги заходят только с вопросом к владельцу; делать чужую работу нельзя." + ] + }, + "new-project": { + "title": "Новый проект", + "text": "Я даю проекту цель и место в системе.", + "detail": [ + "Terminal запускает мой проектный скрипт: он готовит рабочее пространство и стартовые правила. Открыл проект, и агент делает первый ход." + ] + }, + "new-agent": { + "title": "Новый агент", + "text": "Проект получает агента, когда я его открываю.", + "detail": [ + "Я открываю проект, и рождается агент, названный по имени папки. На первом ходу читает правила и перечисляет открытые задачи бэклога." + ] + }, + "keys": { + "title": "Композиты", + "text": "Я выбираю проверенные структуры, которые нужны проекту. Каждый ключ несёт спецификацию, по которой агент строит.", + "detail": [ + "Ключи: проверенные структуры, которые я встраиваю в любой проект, например дизайн-паспорт или дозорный здоровья. Они принадлежат проекту и переживают его агента.", + "Прежде чем ключ построят, агент задаёт вводные вопросы и записывает мои ответы. Они остаются с ключом, так что никто не спрашивает дважды.", + "Зажигание ключа идёт так: ASK, вводные вопросы, проверка контракта, исполнение, механическое доказательство, запись версии, LIT. Каждый шаг пишется в журнал. Считается только ключ в состоянии LIT.", + "Еженедельный обход проставляет версии ключей, пересобирает ленту и говорит мне, в каком проекте стоит устаревший ключ. Когда всё свежее, обход молчит." + ] + }, + "work-checks": { + "title": "Проверки", + "text": "Правилам нужны проверки прямо во время работы. Включённые шлюзы, в том числе двери, ловят нарушения и отправляют агента исправлять.", + "detail": [ + "Двери: хуки на линии Claude в фиксированных точках (отправка задачи, перед чтением, после каждой правки, конец хода). Сработала дверь, значит, исправь работу. У Codex их нет." + ] + }, + "monitoring": { + "title": "Мониторинг", + "text": "За проектом нужно следить и после того, как агент закончил. Подключённые дозорные проверяют, что проект работает и даёт заявленный результат.", + "detail": [ + "Дозорные проверяют подключённые проекты после запуска и сообщают о сбое в Telegram, называя владельца. Health Watcher проверяет, что проект работает и выдаёт то, что заявил. Чинить не чинит никогда." + ] + }, + "backlog": { + "title": "Бэклог", + "text": "Задачи проекта ждут здесь, пока их не возьмут в работу. Агент отмечает сданную задачу как готовую к проверке; закрываю её я.", + "detail": [ + "Задачи проекта ждут в бэклоге, пока их не возьмут. Агент отмечает сданную работу для проверки; закрываю её только я." + ] + }, + "background-work": { + "title": "Фоновая работа", + "text": "Процесс может работать и после конца хода агента. Terminal следит за ним и может принять новое сообщение; сам по себе фоновый процесс агента не перезапускает.", + "detail": [ + "Процесс может работать и после конца хода. Terminal следит за ним и принимает моё следующее сообщение; сам по себе фоновый процесс агента никогда не перезапускает." + ] + }, + "session-resume": { + "title": "Возобновление сессии", + "text": "Вернуться в открытую сессию с её контекстом. Когда разговор уже не держит прежние решения, их отдаёт сохранённая память проекта.", + "detail": [ + "Я возвращаюсь в сессию, и контекст в ней ещё есть. Когда разговор забыл, помнит сохранённая память." + ] + }, + "delivered-work": { + "title": "Сданная работа", + "text": "Агент сообщает, что изменил и что проверил. Готовая работа остаётся в проекте, и там я ею пользуюсь.", + "detail": [ + "Агент сообщает, что изменил и что проверил. Сама работа остаётся в проекте, там я ею и пользуюсь." + ] + }, + "review-result": { + "title": "Приёмка работы", + "text": "Я оцениваю сданную работу и прошу исправить. Задача в бэклоге закрывается только после моего подтверждения.", + "detail": [ + "Я оцениваю результат и возвращаю, если он неверный. Задача в бэклоге закрывается по моему подтверждению, никогда по отчёту агента.", + "LOOP: путь оценки. Агент читает данные проекта и предлагает трёх кандидатов с метрикой, базовым уровнем, приростом, стоимостью и риском. Я выбираю одного." + ] + }, + "engine-switch": { + "title": "Смена движка", + "text": "Любая плитка запускает Claude, Codex или Grok; бриф передачи переносит работу.", + "detail": [ + "Любая плитка запускает Claude, Codex или Grok. Переключение посреди хода отклоняется: ход сначала надо закончить или остановить. Бриф, собранный из состояния сервера, переносит работу; заново набирать ничего не нужно." + ] + }, + "tracks": { + "title": "Треки", + "text": "Какая подписка оплачивает следующий ход плитки.", + "detail": [ + "Три трека на линию, по подписке на каждый, под моим псевдонимом. Плитка списывает со своего трека начиная со следующего хода. Если у трека нет ключа или он выключен, переход на него отклоняется." + ] + }, + "steering": { + "title": "Сообщение во время хода", + "text": "Сообщение посреди хода направляет ход Codex; ход Claude получает его напрямую.", + "detail": [ + "Codex: сообщение посреди хода направляет текущий ход. Claude: сообщение входит прямо в открытый ход. Terminal никогда не откладывает его на потом." + ] + }, + "session-end": { + "title": "Конец сессии", + "text": "Kill или clear завершают сессию; очередь переживает clear.", + "detail": [ + "Kill или clear завершают сессию. Очередь переживает clear; при kill она уходит в корзину на 14 дней. Плановое завершение оставляет строку-эпитафию." + ] + }, + "auto-capture": { + "title": "Автосохранение памяти", + "text": "Хуки Claude сохраняют в MemPalace при остановке сессии и перед сжатием контекста.", + "detail": [ + "На линии Claude хуки сохраняют память при остановке сессии и перед сжатием контекста. Codex сохраняет через свои инструменты памяти. PREP сохраняет намеренно и перечитывает записанное." + ] + }, + "notify": { + "title": "Уведомление мне", + "text": "Итоги Arena, флаги Reception и строки, пересланные человеку, приходят мне в Telegram.", + "detail": [ + "Telegram приносит мне итоги Arena и пересланные сообщения. Reception возвращает результат задачи в тот личный чат, откуда её прислали. Для пересылки из браузера всё ещё нужна открытая вкладка.", + "Reception показывает исполнение и доставку как два отдельных факта. Конец исполнения делает результат доступным; доставку подтверждает только запись курьера. Принимать результат или нет, решаю я." + ] + }, + "codemap": { + "title": "Карта кода", + "text": "Индекс символов, доступный через инструменты; двери Claude заворачивают в него чтение и поиск.", + "detail": [ + "CodeGraph индексирует каждый символ проекта. На линии Claude двери заворачивают в него чтение целых файлов и поиск. Codex ходит в индекс напрямую." + ] + }, + "discipline": { + "title": "Отзыв о дисциплине", + "text": "Аудиты прошлых сессий пишут уведомления, которые агент читает на следующем старте.", + "detail": [ + "Аудиты прошлых сессий пишут уведомление, которое агент читает на следующем старте: оценку дисциплины, уроки от коллег, мои решения и мои ручные правки работы агента." + ] + }, + "phases": { + "title": "Замеры ходов", + "text": "Каждый завершённый ход записывает в журнал, сколько команда ждала провайдера, первого слова потока и финального события; раз в пять минут строка фиксирует зависания сервера.", + "detail": [ + "Terminal пишет одну строку на каждый завершённый ход: миллисекунды до провайдера, до первого слова, до конца, по линии и слоту. Раз в пять минут строка сообщает о зависаниях сервера. Текста промптов там нет." + ] + }, + "human-collab": { + "title": "Работа с людьми", + "text": "Агенты обращаются к людям из списка так же, как друг к другу; строка человеку уходит в Telegram, а человек с доступом может так же вернуть задачу назад." + }, + "cross-review": { + "title": "Кросс-ревью", + "text": "Второй взгляд от модели другого семейства: GPT на треке Codex, Grok как запасной, никогда не другой Claude. Ревьюер получает задачу моими словами и снимок проекта.", + "detail": [ + "Слово «готово» никогда не остаётся за самим агентом. Ревьюер без контекста автора читает задачу моими словами и снимок проекта и отвечает.", + "Ревьюер работает на модели другого провайдера: GPT на треке Codex, Grok, если GPT отказал, и никогда не другой Claude. Рабочее дерево ревьюер трогать не может; каждая попытка пишется в журнал." + ] + }, + "council": { + "title": "Совет", + "text": "Я задаю один вопрос сразу нескольким моделям.", + "detail": [ + "Я задаю один вопрос сразу нескольким моделям. За каждой стоит тот же агент с тем же проектом и памятью: каждая читает наш разговор и отвечает в свою очередь, а последняя выносит вердикт.", + "Агент получает вердикт вместе с моим следующим сообщением." + ] + } + }, + "cards": { + "stage-project-home": [ + "Любая задача начинается с того, что я выбираю проект. Проект у меня устроен как папка со своими правилами, своей памятью и одним агентом, который ею владеет. Поэтому на всё, что я спрошу дальше, отвечает тот, кто уже знает эту кодовую базу и помнит, что в ней ломалось раньше.", + "В проекте уже лежит и то, что я решил до задачи: ключи, которые я включил (они задают, как проект собран), и бэклог, где ждут мои идеи. В самой задаче я ничего из этого не объясняю. Оно уже там." + ], + "stage-task": [ + "Задачу агенту я ставлю так же, как поставил бы коллеге: что должно измениться и что я жду в конце. Пишу, говорю голосом или шлю из Telegram, со скриншотом, когда показать проще, чем описать.", + "Перед отправкой выбираю, кому задача уйдёт, какая модель будет думать и насколько глубоко, и нужен ли мне полный ответ или пара строк. Одна задача или пятнадцать в очереди, сервер принимает их одинаково и выполняет, пока мой браузер закрыт." + ], + "stage-terminal": [ + "Terminal работает диспетчером, я построил его сам. Берёт моё сообщение и кладёт в сессию выбранного проекта, на выбранном движке, на той подписке, куда я этот проект посадил. С моего сервера уходит только вызов модели.", + "Если у трека кончился лимит, работа переезжает на другой вместе с контекстом. А работающий агент не закрытая дверь: я пишу посреди хода, и агент поправляется там, где сейчас стоит." + ], + "stage-prepare": [ + "Прежде чем что-то тронуть, агент загружает закон. Глобальные правила говорят, как со мной разговаривать, где кончаются полномочия и что считается сделанным. Правила проекта говорят, чего требует эта кодовая база и что здесь ломалось раньше. Потом агент читает решения, которые мы уже приняли, и уведомление о своём вчерашнем дне.", + "Так что новая сессия стартует, уже зная, о чём мы договорились, и не спрашивает меня дважды." + ], + "stage-agent": [ + "Агент читает, правит, запускает команды и спрашивает коллег, и всё это на моём сервере. У провайдера происходит только мышление. За каждым шагом я не слежу. Следят двери: маленькие программы в фиксированных точках хода, которые возвращают работу, если она сбилась, и флага, чтобы их выключить, нет.", + "Того, что лежит за пределами своего проекта, агент не трогает. Спрашивает владельца по имени, агента или человека, и ответ приходит обратно в ту же сессию." + ], + "stage-result": [ + "Ответ стримится обратно в мой браузер; код и деплои остаются в проекте. Отчёт я читаю, сверяя с доказательствами, и только я могу назвать задачу сделанной.", + "Задача не кончается на том, что я её прочитал. Разговор сохраняется, и по нему можно искать, решения записываются туда, где их найдёт следующая сессия, а то, что я отправил назад, за ночь разбирается и к утру становится правилом. Это и есть стрелка от «Итога» обратно к «Проекту»." + ], + "message": [ + "В Terminal задача попадает тремя путями. Я её печатаю, и прикладываю скриншоты и файлы, когда показать проще, чем описать. Я её наговариваю голосом прямо в Terminal. Или шлю из Telegram, где до моих агентов один чат, а голос расшифровывается по прибытии.", + "У канала Telegram свои правила, и они держатся, даже если кто-то клонирует мой голос. Голос, похожий на мой, сам по себе никаких полномочий не даёт.", + "Каждое сообщение уходит на мой сервер, так что я не привязан к одной машине. Телефон, ноутбук, чужой браузер: работа всё равно лежит в одном месте. У меня это работало задолго до того, как Anthropic и OpenAI выпустили что-то похожее." + ], + "attachments": [ + "Вместо описания я прикладываю скриншот или файл. Агент работает с тем, что я показал, а не с моим пересказом, и круг «нет, другая кнопка» отпадает." + ], + "reply-mode": [ + "SIM переключает ответ, а не работу. Когда SIM включён, Terminal велит агенту отвечать мне коротко и по-русски, а задачу делать целиком, ровно как без него. Я читаю несколько строк вместо страницы.", + "DEF включает обычный режим: задача уходит так, как я её набрал." + ], + "recipient": [ + "Перед отправкой я выбираю, кому достанется задача, какая модель её выполнит и насколько глубоко думать. Каждый движок помнит мой выбор отдельно, так что переключиться с Claude на Codex и обратно мне ничего не стоит." + ], + "actions": [ + "Две вещи в конце работы я прошу отдельно и намеренно: сохранить решения и запушить код. Ни то ни другое я чату не доверяю." + ], + "action-prep": [ + "PREP делает последний шаг перед тем, как агент уйдёт: сохранить решения сессии, потом перечитать их и доказать, что они записались. Я его запускаю, потому что память агента о сессии кончается вместе с сессией." + ], + "action-push": [ + "PUSH коммитит изменения в исходниках и отправляет их в репозиторий проекта. Записью считается код, чат ею не считается. Пока не запушено, ничего из того, что я одобрил, не существует." + ], + "project": [ + "Каждая плитка проекта работает на Claude или на Codex от OpenAI. Движок я выбираю на каждый проект отдельно, и Terminal запускает агента в папке этого проекта на этом движке. Третий у меня Grok. Модель xAI работает на тех же плитках, под одним логином, и каждый ход Grok Terminal хранит в отдельном архиве, так что ничего из сделанного на этом канале не теряется." + ], + "engine-switch": [ + "Terminal гоняет и Claude, и Codex, и под каждым у меня всегда активны от трёх до пяти треков. Один трек равен одной подписке. В обычный день наготове стоят примерно пять подписок Claude и пять подписок Codex.", + "Переход между ними мягкий. Работа переезжает на другой трек вместе с контекстом, так что посреди задачи ничего не ломается. То же самое, когда я перевожу проект с Claude на Codex: агент сначала заканчивает или останавливается, потом бриф, собранный из состояния сервера, переносит работу, и заново набирать ничего не надо.", + "Этот диспетчер сам по себе отдельный движок. Крутит мой Terminal и ещё работает внутри продуктов, которые я строю, так что у тех проектов такое же переключение при сбоях, как у меня." + ], + "tracks": [ + "Один трек равен одной подписке. Плитка списывает с того трека, куда я её посадил, начиная со следующего хода, а трек без ключа или выключенный мной работу не берёт.", + "Так я выбираю, какая подписка платит за какой проект, и останавливаю одну, не трогая остальные." + ], + "steering": [ + "Занятый агент не значит, что мне надо ждать. Я могу писать прямо во время работы, и сообщение попадает в уже идущий ход, а не сидит в очереди до его конца.", + "Так что когда я вижу, что агент идёт не туда, я говорю об этом сразу, и агент поправляется на месте. Terminal никогда не откладывает моё сообщение на потом." + ], + "queue": [ + "Я могу выстроить пачку команд в нужном порядке, отдать агенту и уйти. Сервер выполнит их одну за другой, пока мой браузер закрыт.", + "У каждой команды в очереди своя модель, так что задача может начаться на быстрой дешёвой модели и закончиться на самой сильной, а контекст переедет вместе с ней.", + "Системные команды встают в ту же очередь. PREP складывает ключевые решения по работе на этот момент в память моих агентов. Clear очищает контекстное окно. Так что я могу поставить пятнадцать команд и знать: после тяжёлых агент сохранит важное в ящик памяти на моём сервере и начнёт с чистого окна, вместо того чтобы тупеть по мере того, как окно заполняется." + ], + "timing-order": [ + "Задачи из очереди приходят к агенту одна за другой, в том порядке, который задал я. Могу набросать работы на вечер и утром прочитать результаты." + ], + "timing-availability": [ + "Следующая задача ждёт, пока её агент освободится. Сервер проверяет это перед отправкой, так что две задачи никогда не столкнутся в одной сессии." + ], + "timing-schedule": [ + "Я могу задать, когда очереди можно стартовать. Первая задача запускается, когда время пришло и агент свободен; остальные идут следом." + ], + "timing-server": [ + "Очередь живёт на сервере, а не во вкладке браузера. Я закрываю ноутбук, а работа всё равно идёт." + ], + "onboarding": [ + "Новая сессия перед первой задачей проходит вводную. Codex велено прочитать глобальные правила, правила проекта, потом индекс памяти. Claude получает правила проекта, остальное CLI подгружает сам.", + "Маленький файл с фактами говорит, на каком движке, модели и в каком режиме работает сессия." + ], + "global": [ + "Над всеми проектами стоит один файл правил, и каждая сессия читает его прежде, чем что-то делать. Туда я кладу то, что должно быть верно везде: как агент со мной разговаривает, где кончаются полномочия агента, что считается законченным.", + "Ещё этот файл знакомит агента с остальным сервером. Здесь десятки агентов и около десяти людей, и реестр держит всех одинаково, с хэндлами одного вида. Агенту, которому нужно что-то за пределами своего проекта, достаточно одной строки с именем владельца. Если владелец человек, строка уходит с сервера и приходит ему в Telegram. Вот это и есть настоящий онбординг: на первом же ходу сессия знает, кто существует, кто чем владеет и кого спрашивать.", + "Правило, которое для меня важнее всех, про доказательства. Агент не может сам заверить свою работу. «Сделано» зарабатывается тем, что не умеет спорить: кодом выхода, живой пробой, тестом, который правда запускался, или другим агентом с чистым контекстом, который это проверил. Собственный отчёт не считается.", + "В том же файле лежит закон о логах: всё, что строит агент, должно оставлять след своих запусков, по строке на запуск, рядом с самой вещью. Механизм, который работает и не оставляет записи, это дефект, как бы хорошо он ни работал.", + "Ничего из этого не было написано заранее. Каждая строка в этом файле появилась, потому что однажды что-то сломалось, и каждый месяц я сверяю файл с тем, что пошло не так." + ], + "local": [ + "В корне каждой папки проекта лежат её собственные правила, и агент читает их прежде, чем что-то трогать. На практике этот файл состоит из трёх слоёв, положенных друг на друга.", + "Первый слой составляют композитные ключи, которые я здесь включил. Ключ оставляет в файле свой закон: UI-паспорт фиксирует шкалу шрифтов проекта, его единственный акцент и нижнюю границу контраста, и отступить от паспорта значит нарушить правило, а не проявить вкус. Паспорт безопасности делает то же для того, что можно выставлять наружу. Так стандарты принадлежат проекту, а не тому, кто над ним работает сегодня.", + "Второй слой приходит из шаблона, с которым рождается каждый новый проект. Часть его скучная, но всё равно важная: для чего эта штука, какие кредиты вендоров она жжёт и чек-лист, как её правильно выключить, если я когда-нибудь её убью. Проект с первого дня знает, как умереть.", + "Третий слой ниоткуда не скопируешь. Это запись того, что здесь шло не так: строки с датами, большинство написаны в тот день, когда что-то сломалось, и говорят, чего в этой кодовой базе больше не делать. Поэтому агент, который открывает незнакомый проект, всё равно работает так, будто сидит здесь месяцами.", + "И на всё это есть бюджет. Я целюсь в агента, которому хватает примерно трёхсот строк правил, глобальных и локальных вместе. Каждая добавленная строка забирает у агента внимание, которое ушло бы на работу. Так что правило либо это окупает, либо вылетает." + ], + "session-resume": [ + "Сессия не открывается пустой. Хук на моём сервере ещё до моего первого слова отдаёт агенту последние сохранённые решения по этому проекту, самые свежие первыми. Агент стартует, уже зная, о чём мы договорились, и не спрашивает заново.", + "Ещё агент читает уведомление о себе. Каждую ночь скрипт без единой модели внутри проходит по транскриптам этого агента за прошедший день и записывает, где был нарушен устав, рядом с моими решениями и правками, которые я внёс в работу агента руками. Агент читает это перед первой задачей, так что правило, нарушенное вчера, сегодня первое, что попадается на глаза. После чистого дня уведомление само исчезает.", + "Когда я возвращаюсь в сессию, разговор в ней ещё есть. Когда начинаю новую, она собирается из слоёв, которые переживают любой разговор: глобальные правила, правила проекта, индекс памяти и это уведомление. Так что в новой сессии работает тот же агент, только с более лёгкой головой. Вот почему очистка контекста мне ничего не стоит." + ], + "session-end": [ + "Сессию я заканчиваю очисткой или убиваю. Очистка сохраняет очередь; убийство отправляет её в корзину на 14 дней. Плановое завершение оставляет эпитафию в одну строку, чтобы я знал, чем всё кончилось." + ], + "new-project": [ + "Когда я создаю проект, Terminal запускает мой проектный скрипт: он готовит рабочее пространство и стартовые правила. Открыл проект, и агент делает первый ход." + ], + "new-agent": [ + "Агент рождается, когда я впервые открываю проект, и получает имя по папке. На первом ходу читает правила и перечисляет открытый бэклог, так что с самого начала понимает, где находится." + ], + "directory": [ + "Реестр говорит, кто каким проектом владеет. Агенту, которому что-то нужно от другого проекта, положено спросить владельца, а не зайти и сделать самому.", + "На правиле владения держится всё остальное." + ], + "memorymd": [ + "У каждого проекта есть короткий индекс того, что проект уже усвоил: по строке на урок, со ссылкой на полную заметку. Агент загружает его на старте сессии.", + "Вот так поправка, которую я дал весной, держится и осенью." + ], + "palace": [ + "В хранилище MemPalace решения выживают. Агент записывает туда, о чём мы договорились, а новая сессия ищет там, прежде чем снова спрашивать меня.", + "Разложено по проектам, и искать там может любой агент." + ], + "skills": [ + "Навык записывает метод для одного вида работы: как выпускать релиз, как делать ревью, как писать в нашем стиле. Агент открывает подходящий навык и идёт по нему, вместо того чтобы каждый раз придумывать процесс заново." + ], + "tools": [ + "Инструментами агент действует: правит файл, запускает команду, делает запрос в базу, обращается к сервису. Каждый результат возвращается агенту, и агент решает, какой шаг следующий.", + "Что умеет инструмент и что агенту разрешено, это два разных вопроса. На второй отвечают правила." + ], + "sendto": [ + "Каждый проект принадлежит одному агенту. Когда агенту что-то нужно от другого проекта, агент спрашивает владельца, а не идёт и делает сам.", + "Называет коллегу в одной строке. Вопрос попадает в собственную сессию этого коллеги, среди файлов и правил того проекта, и ответ возвращается. Два разговора остаются раздельными.", + "Вопрос может пройти два перехода, дальше нет. Если я свожу пару агентов, работа ходит от одного к другому на моём сервере, пока мой браузер закрыт. Останавливается это на лимите переходов или когда один из двоих начинает повторяться." + ], + "human-collab": [ + "Реестр на моём сервере перечисляет людей так же, как агентов, с хэндлами.", + "Когда агенту нужно то, что может дать только человек, доступ, решение, факт, который никто не записал, агент обращается к этому человеку по имени одной строкой. Строка уходит с сервера и падает человеку в Telegram.", + "Работает это и в обратную сторону. Тот, кому я дал доступ, отдаёт задачу моим агентам из своего чата и там же получает результат. Исполнение и доставка показаны как два отдельных факта, потому что задача, которая завершилась, ещё не значит, что ответ дошёл до человека." + ], + "ask-once": [ + "Один агент задаёт другому один вопрос. Terminal доставляет его прямо в сессию коллеги, с контекстом того проекта, и приносит ответ обратно.", + "Лимит два перехода, так что вопрос не будет вечно гулять по команде." + ], + "auto": [ + "Авторежим позволяет паре агентов, которых я свёл, передавать работу друг другу через сервер, пока мой браузер закрыт. Останавливается на лимите переходов или когда сообщение повторяется, так что цикл не может пойти вразнос." + ], + "background-work": [ + "Процесс может работать и после того, как ход агента закончился: сборка, деплой, долгая проверка. Terminal следит за ним и тем временем принимает моё следующее сообщение.", + "Сам по себе фоновый процесс агента не будит. Будит моё сообщение." + ], + "codemap": [ + "CodeGraph индексирует каждый символ в проекте. На линии Claude двери заворачивают чтение целых файлов и поиск в индекс, так что агент читает нужную функцию, а не весь файл. Codex ходит в индекс напрямую." + ], + "keys": [ + "Я выпускаю софт больше десяти лет. После нескольких месяцев, когда я строил с агентами проект за проектом, я прогнал исследование по всей этой работе, нашёл то, что делаю чаще всего, и выбрал из этого то, что можно автоматизировать. Так появились ключи, они же композиты.", + "Ключ и скилл устроены по-разному. Скилл объясняет агенту, как делать один вид работы. Ключ держит всё, что нужно одной функции: куда ей встать, проверки, которые гоняются в git и громко падают, доступ к агенту, у которого есть учётка для нужного API, как ведёт себя интерфейс, какие данные трогать нельзя. Некоторые ключи ещё указывают на скелет этой штуки, и агент стартует с реальной основы, а не с пустой папки.", + "Ещё я построил механизм оркестрации между ключами: смотря какие ключи активны, агент перестраивает свой подход к сборке.", + "Активация ключа не проходит молча. Агент возвращается с парой вопросов, чтобы подогнать ключ под этот проект, и мои ответы остаются с ключом, так что второй раз меня никто не спрашивает.", + "Когда я начинаю новый проект, я включаю нужные ключи, и одним промптом 40-80% работы сделано заранее. Это бутстрап, и на большом проекте агент уходит и работает один несколько часов, прежде чем что-то мне показать. С правильными ключами я пишу один промпт и на следующее утро получаю работающий B2B-сервис, собранный так, как собрал бы его я, с нужными мне взаимодействиями в интерфейсе, с нужными лимитами и так далее." + ], + "work-checks": [ + "Я устал от того, что агенты соглашаются с правилом, а через час его нарушают. Прочитать правило и выполнять его оказалось двумя разными вещами, так что я перестал писать правила и начал их запускать. Двери устроены как маленькие программы, которые стоят в фиксированных точках хода. Когда дверь срабатывает, агент возвращается и чинит работу. Пропустить её нельзя, и флага, чтобы выключить, нет.", + "Первая встречает мою задачу. Она заставляет агента сказать вслух, как агент меня понял, до того как начнёт строить не то. Следующая стоит перед каждым чтением файла, потому что я видел, как агенты сжигают половину контекста, читая файл целиком ради одной функции. Теперь это чтение уходит в индекс символов.", + "Дальше после каждой правки стоит целый ряд дверей, и все они выросли из реального ущерба. Размеры шрифта и цвета сверяются с паспортом проекта, потому что агенты всё время придумывали оттенок покрасивее. Анимации проверяются на reduced motion. Вёрстка проверяется на элементы, которые прыгают под курсором. А текст вычитывается на ИИ-воду, после того как я нашёл слово seamless в одной из своих же модалок.", + "Последняя дверь стоит в конце хода, и она мне важнее всех. Агент не может сказать мне, что работа сделана, если в том же ходу нет чего-то, что не умеет спорить: команды, запущенной после изменения, пробы, перечитывания. Мне слишком много раз говорили «готово» те, кто ничего не проверял.", + "Каждая из них существует из-за конкретного плохого дня. Спорить с дверью, править её, обходить её: всё это хуже исходной ошибки." + ], + "monitoring": [ + "Когда агент закончил, за проектом всё равно надо следить. Подключённые дозорные проверяют, что проект жив и выдаёт то, что заявил, и о сбое сообщают мне в Telegram, называя владельца.", + "Сами дозорные ничего не чинят. Чинит человек." + ], + "backlog": [ + "Бэклог делает для меня две вещи. Первая: это память для моих собственных идей. Всё, что я придумываю для проекта, идёт туда, а не остаётся в голове, и агент, который владеет проектом, может прочитать бэклог, когда нужно понять, куда проект движется.", + "Вторая: так композитные ключи остаются свежими. Когда я улучшаю ключ в корне, каждый проект с этим ключом получает задачу в бэклог: свериться со мной, брать ли обновление. Скажем, я поменял поведение интерфейса или что-то в платёжном сценарии. Агент не переписывает себя молча, и улучшение тоже не теряется. Оно приходит ко мне вопросом, по каждому проекту отдельно." + ], + "delivered-work": [ + "Агент сообщает, что изменилось и что проверено. Сама работа остаётся в проекте: файлы, коммиты, деплои. Отчёт я читаю, сверяя с этими доказательствами, а не сам по себе. И «готово» тоже не слово агента. Прежде чем отчёт дойдёт до меня, ревьюер на модели другого вендора читает задачу моими словами и снимок проекта. У ревьюера нет контекста автора, а значит, нет и слепых пятен автора. Это ревью делает GPT, когда GPT лежит, подхватывает Grok, и это никогда не Claude, проверяющий Claude." + ], + "review-result": [ + "Результат оцениваю я, и если он неверный, отправляю назад. Задача из бэклога закрывается по моему подтверждению, никогда по слову агента.", + "LOOP включает путь оценки, когда мне нужны варианты: агент читает доказательства из проекта и предлагает трёх кандидатов с метрикой, базовым уровнем, приростом, стоимостью и риском. Я выбираю одного." + ], + "notify": [ + "Через Telegram система до меня дотягивается. Туда падают сбои дозорных, итоги Arena и строки, которые агент пересылает человеку. Reception берёт задачу у человека, которому я дал доступ, и возвращает результат в его личный чат.", + "Reception показывает исполнение и доставку как два отдельных факта. Задача завершилась, значит, результат доступен; доставку подтверждает только запись курьера. Принять или нет, решаю я." + ], + "history": [ + "Каждая сессия хранит весь свой разговор, а архив держит его дольше, чем сам CLI. Один полнотекстовый поиск идёт по всем сессиям, так что когда агент говорит мне «мы такого никогда не делали», я проверяю.", + "Храню я их ради того, что происходит раз в месяц. Вся запись перечитывается: каждая задача, которую я дал, каждая поправка, которую пришлось делать дважды, каждое место, где работа застряла или вернулась не той. На выходе список предложений, у каждого доказательства, из которых оно выросло, и каждое называет, что именно поменять. Строку в правилах одного проекта. Строку в глобальных правилах, которые читает каждый агент. То, как очередь выстраивает мою работу. Композитный ключ, который тащит один и тот же изъян в каждый проект, собранный на нём.", + "Каждое я принимаю или отклоняю сам. Принятое попадает в правила к следующей сессии, и месяц моих повторений превращается в то, что система делает сама." + ], + "decisions": [ + "Решение, которое живёт только в чате, потеряно. Агент записывает его в память проекта или в MemPalace, а я проверяю, что оно туда попало.", + "Ответ «принято» сохранением не считается." + ], + "discipline": [ + "Результат, который я отправил назад, на мне не заканчивается. Каждую ночь скан без единой модели внутри читает прошедший день этого агента: где нарушен устав, что я решил и каждую правку, которую я внёс в работу агента руками.", + "Всё это возвращается уведомлением, которое агент читает утром перед первой задачей, так что правило, нарушенное вчера, сегодня первое, что попадается на глаза. После чистого дня уведомление снимается само.", + "Раз в месяц те же доказательства сверяются с глобальными правилами. Ошибка, которая возвращается снова и снова, перестаёт быть уведомлением и становится правилом, которое читают все, или дверью, которую никому не обойти." + ], + "auto-capture": [ + "На линии Claude хуки сохраняют память, когда сессия останавливается и перед сжатием контекста. Codex сохраняет через свои инструменты памяти.", + "Поверх этого есть PREP, сохранение намеренное: сохранил и сразу перечитал." + ], + "phases": [ + "Каждый завершённый ход пишет одну строку: сколько команда ждала провайдера, сколько прошло до первого слова, сколько до конца, по каждому движку и слоту. Раз в пять минут ещё одна строка фиксирует зависания сервера. Текст промптов не хранится.", + "Так я знаю, тормозит у меня или у провайдера." + ], + "wolf": [ + "Я задаю направление и решаю, кто чем владеет. Агенты работают в пределах полномочий, которые я уже дал; всё, что требует моего решения, его ждёт.", + "Я единственный человек в этом цикле, и цикл построен так, чтобы одного человека хватало." + ], + "order": [ + "The Order мой главный оркестратор. У этого агента ключи от всех дверей, общая инфраструктура и границы доступа, и почти всё, что происходит на сервере, The Order знает. Перезапуски и пересборки выполняет сам, а не перекидывает обратно мне.", + "Это ещё и единственный агент, который выходит на меня сам. Когда The Order что-то нужно, мне прилетает сообщение в Telegram, а когда ждать нельзя, звонок на телефон, который меня будит.", + "Агенты проектов идут к The Order только за центральным. Всё внутри своего проекта ведут сами." + ], + "agents": [ + "Два вида коллег, один список. Агенты, по одному на проект, и каждый единственный, кто меняет свой проект. Люди, которым я дал доступ, записаны так же, к ним обращаются по хэндлу, а когда строка для них, она приходит им в Telegram.", + "Всё, что за пределами собственного проекта, это вопрос к названному владельцу. У каждого агента ровно те полномочия, которые я записал, и ни строкой больше; за этой границей агент спрашивает меня и ждёт." + ], + "memory": [ + "Память здесь слоями, и каждый слой отвечает на свой вопрос. Сам разговор, где каждая сессия лежит в архиве и ищется, отвечает, делали ли мы это когда-нибудь. Память проекта, одна заметка на урок и короткий индекс, который агент загружает на старте, отвечает, чего требует этот код. MemPalace держит решения: их записывает PREP, и они возвращаются на следующем старте сессии. Каждый механизм ведёт журнал, одна строка на прогон, и каждый завершённый ход записывает свои тайминги.", + "Каждый слой перечитывается. Еженедельный скан проходит по заметкам каждого проекта, оставляет уроки, которые могли бы ударить и по другому проекту, и присылает мне в Telegram нумерованную сводку; я отвечаю номерами, и строка, которую я поднял, переносится в глобальные правила руками. Ежемесячный аудит транскриптов показывает, где агенты нарушили устав. Когда я спросил, стоит ли PREP своих денег, ответ пришёл из тех же данных: 41% сессий заканчиваются сохранением, а большая часть MemPalace оказалась автоматически намайненным шумом, в котором тонули ящики, которые я записывал руками, так что поиск теперь этот шум пропускает." + ], + "system-tools": [ + "Что умеет инструмент и что разрешено агенту, это два разных вопроса. На второй отвечают правила.", + "Инструментами агент действует, и большинство из них я написал сам. CodeGraph индексирует каждый символ проекта, и агент читает одну нужную функцию, а не файл. MemPalace держит решения. Headless-браузер читает страницы, которые обычным запросом не прочитать. У каждого проекта есть рычаг для своих контейнеров: деплой, перезапуск, логи, шелл, в пределах того, что я разрешил.", + "Сеть тоже инструмент. Tailscale собирает мои серверы в одну сеть, и агент на одном из них достаёт до другого по имени хоста, где бы тот ни стоял. Мой собственный VPN и мой собственный пул прокси нужны для работы, которой нужен другой выход в интернет." + ], + "models": [ + "Думает модель у провайдера. Сегодня это Claude и Codex от OpenAI, по несколько подписок на каждый, а инструменты остаются на моём сервере, кто бы ни думал. Grok от xAI третий провайдер на тех же условиях.", + "Переключатель между ними мой собственный код, так что третий движок займёт в нём новый слот, и переписывать ничего не придётся. Почва под локальные модели готова: сервер выбран, модель выбрана, план написан. Пока это не работает, и Атлас так и говорит." + ], + "terminal": [ + "В Terminal живёт задача: здесь открывается, здесь выполняется и сюда возвращается. Ветки и выделения остаются ровно такими, какими я их оставил." + ], + "access": [ + "Ничто на моём сервере не слушает интернет напрямую. Cloudflare Tunnel публикует веб-приложения, а Access проверяет, кто ты, прежде чем открыть внутреннее. Публичные сайты отвечают кому угодно; всё остальное сначала спрашивает, кто пришёл." + ], + "services": [ + "Наружу агенты выходят через подключённые инструменты: репозиторий на GitHub, headless-браузер для страниц, которые обычным запросом не прочитать, таблицу, поток аналитики. У каждого подключения свои границы." + ], + "telegram": [ + "Telegram носит оповещения и мои голосовые задачи. Reception берёт задачу у человека, которому я дал полный доступ, и возвращает результат в его личный чат. Это канал, который работает, когда я не за столом." + ], + "secrets": [ + "Общие учётки хранит The Order. Оператор проекта получает только те, что названы в допуске, и никаких других. Сколько бед наделает утёкший ключ, ограничено самим устройством системы." + ], + "apex": [ + "Пульт сервера показывает каждый Docker-сервис и выполняет по SSH те операции, которые я разрешил. Изменения общей инфраструктуры идут через The Order." + ], + "projects": [ + "На этом хосте работают десятки сервисов проектов, за loopback-портами и Tunnel. Часть привязана к tailnet, часть живёт на своих серверах. Каждый принадлежит ровно одному агенту." + ], + "deploy": [ + "Операторы проектов деплоят, перезапускают и читают логи в пределах записанных мной допусков, включая удалённые хосты. Общая инфраструктура остаётся за The Order. Работа по расписанию идёт через cron на хосте или внутри сервисов.", + "Допуск покрывает исполнение и никогда не покрывает решение. Удалить данные, открыть порт или тронуть продакшен можно только с моего согласия, и там, где рычаг это умеет, мои слова цитируются в команде и остаются в её журнале." + ], + "records": [ + "История сессий и журналы механизмов хранят то, что произошло. Финальный ответ агента остаётся заявлением, а доказательством служит журнал.", + "Каждый механизм, который я выпускаю, оставляет след: одна строка на прогон." + ], + "watchers": [ + "Дозорные проверяют подключённые проекты и сообщают о сбоях. Trivy сканирует образы и хосты на уязвимости. Сообщают; чинит человек." + ], + "recovery": [ + "Restic каждую ночь копирует выбранное состояние с сервера наружу, в зашифрованном виде. В охвате есть исключения. Снимок засчитывается, когда он существует и восстановление из него проверено." + ], + "remote": [ + "Часть проектов работает на машинах за пределами этого сервера. Для каждой есть обёртка, через которую агент там деплоит, перезапускает и читает логи. Продакшен остаётся за отдельным шлюзом." + ], + "backups": [ + "Restic копирует выбранное состояние на другую площадку; зеркало GitHub копирует подходящие репозитории. У обоих есть исключения. Что восстановление работает, доказывают успешная копия и проверенный рестор, а не расписание." + ] + } +} diff --git a/src/lib/aiAtlas/seo.ts b/src/lib/aiAtlas/seo.ts new file mode 100644 index 00000000..03a01ce0 --- /dev/null +++ b/src/lib/aiAtlas/seo.ts @@ -0,0 +1,155 @@ +import type { Readings } from './readings'; + +/** + * What search engines and answer engines read about each Atlas page: its + * title, description, share picture and structured data. + * + * Every word comes from the page itself: titles and descriptions are copy + * keys (copy.json, ru.json), so a Terminal push can change them like any + * other page word, and the Ladder's list is built from the rungs the page + * draws. The share pictures are rendered by scripts/ai-atlas/og/render.mjs; + * OG_VERSION follows its VERSION. + */ + +export const OG_VERSION = 'v2'; + +type SeoTab = 'atlas' | 'article' | 'ladder'; + +const SUFFIX: Record = { + atlas: '', + article: 'Thesis', + ladder: 'Ladder', +}; +const PICTURE: Record = { + atlas: 'atlas', + article: 'thesis', + ladder: 'ladder', +}; + +const runsText = (runs: { t: string }[]) => runs.map(r => r.t).join(''); + +export function atlasSeo({ + tab, + locale, + words, + readings, + domain, + path, + atlasPath, + modified, +}: { + tab: SeoTab; + locale: string; + words: Record; + readings: Readings; + domain: string; + /* This page and the map, without the locale prefix. */ + path: string; + atlasPath: string; + modified?: string; +}) { + const pick = (key: string) => words[key + SUFFIX[tab]] || words[key]; + const title: string = pick('seoTitle'); + const description: string = pick('seoDescription'); + const keywords: string = pick('seoKeywords'); + const imageAlt: string = pick('ogImageAlt'); + /* Armenian reads the English Atlas, so it shares the English picture. */ + const lang = locale === 'ru' ? 'ru' : 'en'; + const prefix = locale === 'en' ? '' : `/${locale}`; + const image = `${domain}/ai-atlas/og-${PICTURE[tab]}-${lang}-${OG_VERSION}.png`; + const url = `${domain}${prefix}${path}`; + const home = `${domain}${prefix}`; + + const author = { + '@type': 'Person', + name: 'Wolf Alexanyan', + sameAs: ['https://x.com/AlexanyanWolf'], + }; + const publisher = { + '@type': 'Organization', + name: 'KeepSimple', + url: domain, + logo: { '@type': 'ImageObject', url: `${domain}/assets/favicon.svg` }, + }; + const common = { + url, + inLanguage: lang, + description, + keywords, + image: { '@type': 'ImageObject', url: image, width: 1200, height: 630 }, + author, + publisher, + ...(modified ? { dateModified: modified } : {}), + }; + + const crumbs = [ + { name: 'KeepSimple', item: home || domain }, + { name: words.seoTitle, item: `${domain}${prefix}${atlasPath}` }, + ...(tab === 'atlas' ? [] : [{ name: title, item: url }]), + ].map((crumb, i) => ({ '@type': 'ListItem', position: i + 1, ...crumb })); + + const main: Record[] = []; + if (tab === 'article') { + const text = [readings.article.lead, ...readings.article.paras] + .map(runsText) + .join(' '); + main.push({ + '@type': 'Article', + '@id': `${url}#thesis`, + headline: title, + mainEntityOfPage: url, + articleSection: 'AI Atlas', + wordCount: text.split(/\s+/).filter(Boolean).length, + ...common, + }); + } else if (tab === 'ladder') { + const rungs = readings.ladder.rungs; + main.push( + { + '@type': 'LearningResource', + '@id': `${url}#ladder`, + name: title, + learningResourceType: 'Skill ladder', + educationalLevel: 'Beginner to advanced', + teaches: rungs.filter(r => r.skill).map(r => r.title), + ...common, + }, + { + '@type': 'ItemList', + '@id': `${url}#rungs`, + name: title, + numberOfItems: rungs.length, + itemListOrder: 'https://schema.org/ItemListOrderAscending', + itemListElement: rungs.map(r => ({ + '@type': 'ListItem', + position: r.n + 1, + name: r.title, + description: [r.sub, r.skill].filter(Boolean).join(' '), + })), + }, + ); + } else { + main.push({ + '@type': 'WebPage', + '@id': `${url}#atlas`, + name: title, + ...common, + }); + } + + return { + title, + description, + keywords, + imageAlt, + image, + ogType: tab === 'article' ? 'article' : 'website', + schema: { + '@context': 'https://schema.org', + '@graph': [ + ...main, + { '@type': 'BreadcrumbList', itemListElement: crumbs }, + ], + }, + }; +} diff --git a/src/pages/ai-atlas-sitemap.xml.ts b/src/pages/ai-atlas-sitemap.xml.ts new file mode 100644 index 00000000..5843d446 --- /dev/null +++ b/src/pages/ai-atlas-sitemap.xml.ts @@ -0,0 +1,55 @@ +import type { GetServerSideProps } from 'next'; + +import { readStoredGuide } from '@lib/aiAtlas/store'; + +/** + * The Atlas pages offered to search: the map, the Thesis and the Ladder, in + * English and Russian, each pointing at its other language. + * + * Strapi's sitemap plugin lists only its own content types, and the Atlas is + * not one of them; on 2026-10-13 not one Atlas address was in any sitemap. + * Armenian is left out: it shows the English Atlas, so it would only be a + * duplicate of the English page. + */ + +const ORIGIN = 'https://keepsimple.io'; +const PATHS = ['/ai-atlas', '/ai-atlas/thesis', '/ai-atlas/ladder']; +const LOCALES = [ + { lang: 'en', prefix: '' }, + { lang: 'ru', prefix: '/ru' }, +]; + +export const getServerSideProps: GetServerSideProps = async ({ res }) => { + const guide = await readStoredGuide(); + const lastmod = + typeof guide?.generatedAt === 'string' + ? `${new Date(guide.generatedAt).toISOString()}` + : ''; + const alternates = (path: string) => + [ + ...LOCALES.map( + ({ lang, prefix }) => + ``, + ), + ``, + ].join(''); + const urls = PATHS.flatMap(path => + LOCALES.map( + ({ prefix }) => + `${ORIGIN}${prefix}${path}${lastmod}${alternates(path)}`, + ), + ); + + const body = `\n\n${urls.join('\n')}\n`; + + res.setHeader('Content-Type', 'application/xml; charset=utf-8'); + res.setHeader('Cache-Control', 'public, max-age=0, s-maxage=3600'); + res.write(body); + res.end(); + + return { props: {} }; +}; + +const AtlasSitemap = () => null; + +export default AtlasSitemap; diff --git a/src/pages/ai-atlas.tsx b/src/pages/ai-atlas.tsx index 57ea1af6..441edd34 100644 --- a/src/pages/ai-atlas.tsx +++ b/src/pages/ai-atlas.tsx @@ -1,4 +1,5 @@ import type { GetStaticProps } from 'next'; +import { useRouter } from 'next/router'; import React, { useEffect, useLayoutEffect, @@ -17,6 +18,7 @@ import { } from '@lib/aiAtlas/readings'; import readingsData from '@lib/aiAtlas/readings.json'; import { securityPassage, securityRadii } from '@lib/aiAtlas/securityPassage'; +import { atlasSeo } from '@lib/aiAtlas/seo'; import SeoGenerator from '@components/SeoGenerator'; @@ -868,7 +870,15 @@ type ViewMode = 'environment' | 'security'; /* The header tabs: the map, and the two readings that sit beside it. */ type Tab = 'atlas' | 'article' | 'ladder'; const READING_TABS: Tab[] = ['article', 'ladder']; -const readings = readingsData as Readings; +/* Each reading has its own address on keepsimple.io: /ai-atlas/thesis and + /ai-atlas/ladder. The map stays at /ai-atlas. */ +export const TAB_SLUGS: Record = { + article: 'thesis', + ladder: 'ladder', +}; +export const tabPath = (tab: Tab) => + tab === 'atlas' ? '/ai-atlas' : '/ai-atlas/' + TAB_SLUGS[tab]; +const bundledReadings = readingsData as Readings; function DoctrinePanel({ t }: { t: T }) { return ( @@ -878,7 +888,7 @@ function DoctrinePanel({ t }: { t: T }) { ); @@ -1262,6 +1272,13 @@ export function AiAtlasApp({ initialGuide = null, initialView = 'environment', initialFocus = null, + initialTab = 'atlas', + /* Thesis and Ladder words for this locale; English when not given. */ + readings = bundledReadings, + /* On keepsimple.io a tab is its own page and this navigates to it. Without + it (the Terminal's frame) the tabs switch in place and the hash holds + the tab. */ + onTabChange = null, }: any = {}) { const [data] = useState(() => initialGuide ? adaptGuide(initialGuide) : null, @@ -1272,7 +1289,7 @@ export function AiAtlasApp({ const [hoverNode, setHoverNode] = useState(null); const [linkHoverNode, setLinkHoverNode] = useState(null); const [viewMode, setViewMode] = useState(initialView); - const [tab, setTab] = useState('atlas'); + const [tab, setTab] = useState(initialTab); const tabPending = useRef(false); const changeTab = (next: Tab) => { if (next === tab || tabPending.current) return; @@ -1281,6 +1298,10 @@ export function AiAtlasApp({ stage?.classList.add('is-leaving'); setTimeout( () => { + if (onTabChange) { + onTabChange(next); + return; + } setTab(next); setFocusedNode(null); stage?.classList.remove('is-leaving'); @@ -1321,10 +1342,16 @@ export function AiAtlasApp({ const sync = () => { const hash = window.location.hash.replace(/^#/, '').toLowerCase(); if ((READING_TABS as string[]).includes(hash)) { - setTab(hash as Tab); - setFocusedNode(null); + /* An old #article / #ladder link opens the reading's own page. */ + if (onTabChange) onTabChange(hash as Tab, true); + else { + setTab(hash as Tab); + setFocusedNode(null); + } return; } + /* A reading page has no map state to restore from the hash. */ + if (onTabChange && initialTab !== 'atlas') return; setTab('atlas'); if (hash === 'security') { setViewMode('security'); @@ -1350,13 +1377,15 @@ export function AiAtlasApp({ useEffect(() => { if (typeof window === 'undefined') return; let desired = ''; - if (tab !== 'atlas') desired = '#' + tab; + if (tab !== 'atlas') desired = onTabChange ? '' : '#' + tab; else if (viewMode === 'security') desired = '#security'; else if (focusedNode) desired = '#' + focusedNode; const current = window.location.hash; if (current !== desired) { const url = window.location.pathname + window.location.search + desired; - window.history.replaceState(null, '', url); + /* Keep the router's own entry state, so Back between the tab pages + still navigates. */ + window.history.replaceState(window.history.state, '', url); } }, [tab, viewMode, focusedNode]); @@ -2133,7 +2162,7 @@ export function AiAtlasApp({ )}