引子 · 不是聊天框,是编排台Intro · Not a Chat Box, an Orchestration Console.
你把 Claude Code 当一个会改文件的聊天框:问一句、看它写、粘走。这一章开头是一组对照 —— 同一件真事,聊天框的用法 vs 编排台的用法,结论不替你下。然后立刻分叉:你是订阅进来的,还是要用兼容端点接进来的?两条路,下一章都给你铺到底。You use Claude Code as a chat box that edits files: ask, watch it write, paste it away. This chapter opens with a contrast instead — the same real task, done the chat-box way versus the console way, with the conclusion left to you. Then it forks immediately: did you come in on a subscription, or do you need a compatible endpoint? The next chapter paves both roads to the end.
你大概是这样用 Claude Code 的:开一个终端,敲一句要求,看它改文件,扫两眼 diff,合并。偶尔它自己跑了个测试,你觉得挺神。一天下来,它对你来说是一个会动文件的聊天框 —— 比网页版多省下的,只是复制粘贴。Here's probably how you use Claude Code: open a terminal, type a request, watch it edit files, skim the diff, merge. Now and then it runs a test on its own and you're impressed. By day's end, it's a chat box that can touch files — all it saves over the web app is the copy-paste.这没错,但这是它最小的一层。这本书的立场一句话说完:Claude Code 最小的样子是一个会改文件的编辑器,最大的样子,是你一个人指挥并验收一支 agent 队的编排台。停在聊天框那层,等于把后一半白扔。Not wrong — but that's its smallest layer. The book's stance in one line: Claude Code's smallest form is an editor that changes files; its largest is the console from which one person directs, and then verifies, a fleet of agents. Stopping at the chat box forfeits the second half.
— I
同一件真事,两种用法One Real Task, Two Ways to Do It.
先不讲道理,看一组对照。任务是同一件:一个线上报错,栈里指向一个你没写过的模块,你要查清根因、改掉、并且不破坏现有行为。No argument first — a contrast. Same job both sides: a production error whose stack points at a module you didn't write; you need the root cause, a fix, and no regressions.
聊天框的用法The chat-box way
「这个报错怎么回事?」贴上栈。它猜一个原因,你说不对,再贴一段代码。它给一段补丁,你粘进编辑器,跑测试,红了。再贴报错。四十分钟后你有了一段能跑的代码,和一个装满失败尝试的上下文 —— 而「不破坏现有行为」这一条,从头到尾没有人验过。'What's causing this?' — you paste the stack. It guesses; you say no; you paste more code. It hands you a patch, you paste it into your editor, run the tests, red. Paste the error again. Forty minutes later you have code that runs and a context stuffed with failed attempts — and nobody ever checked the 'no regressions' part.
编排台的用法The console way
一句交办,把验收标准一起交下去:先用计划模式让它自己读那个模块、写出打算怎么改;你删掉过度设计的一段、批准;它动手,跑测试,把输出贴给你;你对着批准过的计划逐条核 diff。四十分钟里你只做了两次判断 —— 批计划、验结果 —— 其余时间它在自己跑,而「不破坏现有行为」是那条测试命令替你答的。One dispatch, with the acceptance criteria sent along: plan mode first, so it reads that module itself and writes down how it intends to change it; you cut the over-engineered part and approve; it acts, runs the tests, pastes the output; you read the diff against the plan you approved. In those forty minutes you made two judgments — approve the plan, accept the result — and the rest ran without you, with 'no regressions' answered by the test command, not by you.
差别不在模型,两边是同一个。差别在你站的位置:左边你是流程的每一环,右边你是发包方和验收方。这本书从头到尾只讲怎么搬到右边去。The difference isn't the model — it's the same one on both sides. The difference is where you stand: on the left you are every link in the chain; on the right you are the one who commissions and the one who accepts. This whole book is about moving to the right.
— II
名字里的「Code」,已经装不下它The 'Code' in the Name No Longer Contains It.
官方文档给它的一句话定位是「agentic coding tool」:读你的代码库、改文件、跑命令;入口有终端、IDE、桌面应用和浏览器四个,连的是同一台引擎。1注 1Note 1Claude Code Docs · Overview —— 官方一句话定位:「agentic coding tool」,读你的代码库、改文件、跑命令;入口有终端、IDE、桌面应用与浏览器,连着同一台引擎(CLAUDE.md、设置、MCP 跨入口通用)。同一页列出的能力还有:MCP 接 Google Drive / Jira / Slack、Routines 定时任务、Channels 接消息渠道、agent teams 多 agent 协作、headless(claude -p)与 Agent SDK。截至 2026-08-05。Claude Code Docs · Overview — the official one-liner: an 'agentic coding tool' that reads your codebase, edits files, and runs commands; entrances are the terminal, IDE, desktop app, and browser, all wired to one engine (CLAUDE.md, settings, and MCP carry across). The same page also lists: MCP for Google Drive / Jira / Slack, Routines for scheduled runs, Channels for message inputs, agent teams, headless (claude -p), and the Agent SDK. As of 2026-08-05.这个定位没有错 —— 只是太谦虚。往同一页文档底下翻:用 MCP 接 Google Drive、Jira、Slack;用 Routines 把活挂到日程上定时跑;用 Channels 把消息接成任务;开 agent teams 让几个 agent 并行分工;用 claude -p 把它嵌进脚本和 CI。1注 1Note 1Claude Code Docs · Overview —— 官方一句话定位:「agentic coding tool」,读你的代码库、改文件、跑命令;入口有终端、IDE、桌面应用与浏览器,连着同一台引擎(CLAUDE.md、设置、MCP 跨入口通用)。同一页列出的能力还有:MCP 接 Google Drive / Jira / Slack、Routines 定时任务、Channels 接消息渠道、agent teams 多 agent 协作、headless(claude -p)与 Agent SDK。截至 2026-08-05。Claude Code Docs · Overview — the official one-liner: an 'agentic coding tool' that reads your codebase, edits files, and runs commands; entrances are the terminal, IDE, desktop app, and browser, all wired to one engine (CLAUDE.md, settings, and MCP carry across). The same page also lists: MCP for Google Drive / Jira / Slack, Routines for scheduled runs, Channels for message inputs, agent teams, headless (claude -p), and the Agent SDK. As of 2026-08-05.这些能力没有一个长得像「编码工具」—— 它们长得像一张派活的台子。The docs' one-line positioning is an 'agentic coding tool': it reads your codebase, edits files, runs commands; the entrances number four — terminal, IDE, desktop app, and browser — all wired to the same engine.1注 1Note 1Claude Code Docs · Overview —— 官方一句话定位:「agentic coding tool」,读你的代码库、改文件、跑命令;入口有终端、IDE、桌面应用与浏览器,连着同一台引擎(CLAUDE.md、设置、MCP 跨入口通用)。同一页列出的能力还有:MCP 接 Google Drive / Jira / Slack、Routines 定时任务、Channels 接消息渠道、agent teams 多 agent 协作、headless(claude -p)与 Agent SDK。截至 2026-08-05。Claude Code Docs · Overview — the official one-liner: an 'agentic coding tool' that reads your codebase, edits files, and runs commands; entrances are the terminal, IDE, desktop app, and browser, all wired to one engine (CLAUDE.md, settings, and MCP carry across). The same page also lists: MCP for Google Drive / Jira / Slack, Routines for scheduled runs, Channels for message inputs, agent teams, headless (claude -p), and the Agent SDK. As of 2026-08-05. The positioning isn't wrong — just too modest. Scroll down the same page: wire in Google Drive, Jira, and Slack over MCP; put work on a schedule with Routines; turn messages into tasks with Channels; fan out agent teams; embed it into scripts and CI with claude -p.1注 1Note 1Claude Code Docs · Overview —— 官方一句话定位:「agentic coding tool」,读你的代码库、改文件、跑命令;入口有终端、IDE、桌面应用与浏览器,连着同一台引擎(CLAUDE.md、设置、MCP 跨入口通用)。同一页列出的能力还有:MCP 接 Google Drive / Jira / Slack、Routines 定时任务、Channels 接消息渠道、agent teams 多 agent 协作、headless(claude -p)与 Agent SDK。截至 2026-08-05。Claude Code Docs · Overview — the official one-liner: an 'agentic coding tool' that reads your codebase, edits files, and runs commands; entrances are the terminal, IDE, desktop app, and browser, all wired to one engine (CLAUDE.md, settings, and MCP carry across). The same page also lists: MCP for Google Drive / Jira / Slack, Routines for scheduled runs, Channels for message inputs, agent teams, headless (claude -p), and the Agent SDK. As of 2026-08-05. None of these is shaped like a coding tool — they're shaped like a dispatch desk.这本书不列全部功能。它按「一台编排台需要什么」挑出核心的六件,每件一章:3注 3Note 3Claude Code Docs · Extend Claude Code —— 扩展机制总览:CLAUDE.md 是每次会话都加载的持久上下文;Skills 是按需加载的知识与流程;subagents 在隔离上下文里干活、只交回摘要;MCP 接外部服务;hooks 在生命周期事件上必然触发。并明确划线:写在 CLAUDE.md 或 skill 里的指令「是请求,不是保证」—— 必须每次都发生的规矩,要写成 hook。截至 2026-08-05。Claude Code Docs · Extend Claude Code — the extension map: CLAUDE.md is persistent context loaded every session; Skills are on-demand knowledge and workflows; subagents work in isolated context and return only summaries; MCP connects external services; hooks fire deterministically on lifecycle events. And the explicit line: an instruction in CLAUDE.md or a skill is 'a request, not a guarantee' — a rule that must run every time belongs in a hook. As of 2026-08-05.This book doesn't list every feature. It picks the six core pieces by asking what a console needs, one chapter each:3注 3Note 3Claude Code Docs · Extend Claude Code —— 扩展机制总览:CLAUDE.md 是每次会话都加载的持久上下文;Skills 是按需加载的知识与流程;subagents 在隔离上下文里干活、只交回摘要;MCP 接外部服务;hooks 在生命周期事件上必然触发。并明确划线:写在 CLAUDE.md 或 skill 里的指令「是请求,不是保证」—— 必须每次都发生的规矩,要写成 hook。截至 2026-08-05。Claude Code Docs · Extend Claude Code — the extension map: CLAUDE.md is persistent context loaded every session; Skills are on-demand knowledge and workflows; subagents work in isolated context and return only summaries; MCP connects external services; hooks fire deterministically on lifecycle events. And the explicit line: an instruction in CLAUDE.md or a skill is 'a request, not a guarantee' — a rule that must run every time belongs in a hook. As of 2026-08-05.
部件Piece
它替你做什么What it does for you
哪章Chapter
计划模式 + 权限规则Plan mode + permission rules
动手前先交方案;哪些事永远不用问你Proposes before acting; and what it never has to ask about
第 3 章Ch. 3
CLAUDE.md
项目的长期记忆,每次开工自动加载The project's long-term memory, loaded every session
第 4 章Ch. 4
Skills
把重复的流程收编成资产,用到才加载Codifies repeated routines into assets, loaded on demand
第 5 章Ch. 5
Subagents
独立上下文的分身,干完只交回结论Workers in their own context, handing back only conclusions
第 6 章Ch. 6
MCP
把 issue、工单、数据库接进上下文Wires issues, tickets, and databases into context
第 7 章Ch. 7
Hooks
固定时机自动执行的规矩,不靠模型自觉Rules that fire at set moments, not by the model's goodwill
第 8 章Ch. 8
单看,每一件都不新奇 —— 别的工具也有记忆、也有插件。拼在一起才变质:计划模式让你从「看它写每一行」退到「审方案、验结果」;CLAUDE.md 和 Skills 让你不用每次重新交代;subagents 让活离开你的上下文,headless 让活离开你的终端(第 9 章);hooks 把「希望它记得」换成「到点必然发生」3注 3Note 3Claude Code Docs · Extend Claude Code —— 扩展机制总览:CLAUDE.md 是每次会话都加载的持久上下文;Skills 是按需加载的知识与流程;subagents 在隔离上下文里干活、只交回摘要;MCP 接外部服务;hooks 在生命周期事件上必然触发。并明确划线:写在 CLAUDE.md 或 skill 里的指令「是请求,不是保证」—— 必须每次都发生的规矩,要写成 hook。截至 2026-08-05。Claude Code Docs · Extend Claude Code — the extension map: CLAUDE.md is persistent context loaded every session; Skills are on-demand knowledge and workflows; subagents work in isolated context and return only summaries; MCP connects external services; hooks fire deterministically on lifecycle events. And the explicit line: an instruction in CLAUDE.md or a skill is 'a request, not a guarantee' — a rule that must run every time belongs in a hook. As of 2026-08-05.。每一件都在回答同一个问题:怎么让你少盯一点,而不失控。Taken alone, none is novel — other tools have memory and plugins too. Together they change substance: plan mode moves you from watching every line to approving an approach and checking a result; CLAUDE.md and Skills spare you re-briefing every session; subagents move work out of your context, headless moves it off your terminal (chapter 9); hooks replace 'hope it remembers' with 'fires at the appointed moment'3注 3Note 3Claude Code Docs · Extend Claude Code —— 扩展机制总览:CLAUDE.md 是每次会话都加载的持久上下文;Skills 是按需加载的知识与流程;subagents 在隔离上下文里干活、只交回摘要;MCP 接外部服务;hooks 在生命周期事件上必然触发。并明确划线:写在 CLAUDE.md 或 skill 里的指令「是请求,不是保证」—— 必须每次都发生的规矩,要写成 hook。截至 2026-08-05。Claude Code Docs · Extend Claude Code — the extension map: CLAUDE.md is persistent context loaded every session; Skills are on-demand knowledge and workflows; subagents work in isolated context and return only summaries; MCP connects external services; hooks fire deterministically on lifecycle events. And the explicit line: an instruction in CLAUDE.md or a skill is 'a request, not a guarantee' — a rule that must run every time belongs in a hook. As of 2026-08-05.. Every piece answers the same question: how you watch less without losing the thread.
— III
先分叉:你从哪条路进来First, the Fork: Which Road Are You On.
往下读之前,有一件事得先分清楚,因为它决定你下一章读哪一半。上路有两条,这本书当它们是同等公民。Before reading on, one thing has to be settled, because it decides which half of the next chapter is yours. There are two ways on, and this book treats them as equal citizens.
路Road
你怎么认证How you authenticate
账怎么算How it bills
订阅Subscription
登录 Claude 账号,走 OAuthLog in to a Claude account over OAuth
月费买额度,和 Claude 应用共用一个池子A monthly fee buys quota, pooled with the Claude apps
兼容端点Compatible endpoint
ANTHROPIC_BASE_URL + ANTHROPIC_AUTH_TOKEN2注 2Note 2Claude Code Docs · Environment variables —— ANTHROPIC_BASE_URL 原文:「Override the API endpoint to route requests through a proxy or gateway」;ANTHROPIC_AUTH_TOKEN 原文:「Custom value for the Authorization header (the value you set here will be prefixed with Bearer )」。本机 2026-08-05 用 claude 2.1.220 对一个自建记录端点实测:请求落在 <base>/v1/messages?beta=true,anthropic-version: 2023-06-01。截至 2026-08-05。Claude Code Docs · Environment variables — ANTHROPIC_BASE_URL verbatim: 'Override the API endpoint to route requests through a proxy or gateway'; ANTHROPIC_AUTH_TOKEN verbatim: 'Custom value for the Authorization header (the value you set here will be prefixed with Bearer )'. Measured locally on 2026-08-05 with claude 2.1.220 against a self-hosted recording endpoint: requests land on <base>/v1/messages?beta=true with anthropic-version: 2023-06-01. As of 2026-08-05.
按 token 买用量,谁的 key 谁付Tokens are bought by usage, billed to whoever owns the key
第二条路值得说清楚,因为官方文档基本默认你走第一条。ANTHROPIC_BASE_URL 的官方定义只有一句:把 API 端点改到别处,让请求走一个代理或网关。2注 2Note 2Claude Code Docs · Environment variables —— ANTHROPIC_BASE_URL 原文:「Override the API endpoint to route requests through a proxy or gateway」;ANTHROPIC_AUTH_TOKEN 原文:「Custom value for the Authorization header (the value you set here will be prefixed with Bearer )」。本机 2026-08-05 用 claude 2.1.220 对一个自建记录端点实测:请求落在 <base>/v1/messages?beta=true,anthropic-version: 2023-06-01。截至 2026-08-05。Claude Code Docs · Environment variables — ANTHROPIC_BASE_URL verbatim: 'Override the API endpoint to route requests through a proxy or gateway'; ANTHROPIC_AUTH_TOKEN verbatim: 'Custom value for the Authorization header (the value you set here will be prefixed with Bearer )'. Measured locally on 2026-08-05 with claude 2.1.220 against a self-hosted recording endpoint: requests land on <base>/v1/messages?beta=true with anthropic-version: 2023-06-01. As of 2026-08-05.但它的实际后果很大 —— 只要对面那个服务说的是 Anthropic Messages 那套话,Claude Code 这个客户端就能跑在它上面。Kimi、GLM、DeepSeek 都提供了这样的兼容端点,你自建的网关也可以。The second road deserves spelling out, because the official docs largely assume the first. ANTHROPIC_BASE_URL's official definition is one sentence: point the API endpoint elsewhere, routing requests through a proxy or gateway.2注 2Note 2Claude Code Docs · Environment variables —— ANTHROPIC_BASE_URL 原文:「Override the API endpoint to route requests through a proxy or gateway」;ANTHROPIC_AUTH_TOKEN 原文:「Custom value for the Authorization header (the value you set here will be prefixed with Bearer )」。本机 2026-08-05 用 claude 2.1.220 对一个自建记录端点实测:请求落在 <base>/v1/messages?beta=true,anthropic-version: 2023-06-01。截至 2026-08-05。Claude Code Docs · Environment variables — ANTHROPIC_BASE_URL verbatim: 'Override the API endpoint to route requests through a proxy or gateway'; ANTHROPIC_AUTH_TOKEN verbatim: 'Custom value for the Authorization header (the value you set here will be prefixed with Bearer )'. Measured locally on 2026-08-05 with claude 2.1.220 against a self-hosted recording endpoint: requests land on <base>/v1/messages?beta=true with anthropic-version: 2023-06-01. As of 2026-08-05. Its practical consequence is much larger — as long as the service on the other end speaks the Anthropic Messages dialect, this client runs on it. Kimi, GLM, and DeepSeek all publish such endpoints, and so can a gateway you run yourself.
— IV
边界重画:能派多少,验得动多少The Boundary, Redrawn: What You Can Delegate — and Verify.
Claude Code 最省的不是敲代码的时间,而是你从「自己动手」切到「派活 + 验收」的整个工作方式。What Claude Code saves most is not typing time, but the whole shift from doing the work yourself to delegating and verifying it.
本书的第一条判断The first judgment of the book
所以量它的尺子得换。旧尺子问「它能写什么代码」—— 按这把尺子,它和一打同类挤在同一条跑道上。新尺子问「一台电脑上的活,有多少能由你派出去、再由你验收」—— 按这把尺子,写代码只是它顺手的一类活:排查一个线上报错、迁移两千个文件、盯着 CI 修失败、把一夜的日志读成三行结论,都在射程里。So the ruler has to change. The old ruler asks what code it can write — by that ruler it's crowded onto one track with a dozen rivals. The new ruler asks how much of a machine's work you can send out and then verify — by that ruler, writing code is just one job it happens to do: tracing a production error, migrating two thousand files, watching CI and fixing failures, reading a night of logs into three lines, all in range.注意新尺子的后半句。派活是容易的一半;难的一半是确认它真做对了。官方最佳实践排在最前面的一条,不是「写更好的 prompt」,而是给它一个它能自己跑的检查 —— 测试、构建、一张能对比的截图 —— 因为能自动验的活,你才敢真放手。4注 4Note 4Claude Code Docs · Best practices —— 验证一节的第一条:给 Claude 一个它能自己跑的检查 —— 测试、构建、一张能对比的截图;没有检查,「看起来做完了」就是唯一信号,你就是人肉验证回路。并要它交证据(测试输出、跑过的命令与返回)而不是宣称成功。截至 2026-08-05。Claude Code Docs · Best practices — the first rule of the verification section: give Claude a check it can run — tests, a build, a screenshot to compare; without one, 'looks done' is the only signal and you are the verification loop. And have it show evidence (test output, the command it ran and what it returned) rather than claim success. As of 2026-08-05.这本书把「验收」单独设为第 10 章,也是全书的书眼:别的教程教你怎么派活,这本书还要你带着凭据收活。Mind the second half of the new ruler. Delegating is the easy half; the hard half is confirming it got it right. The first rule in the vendor's own best practices isn't better prompts — it's giving it a check it can run itself: tests, a build, a screenshot to compare — because only work that can verify itself is work you dare truly release.4注 4Note 4Claude Code Docs · Best practices —— 验证一节的第一条:给 Claude 一个它能自己跑的检查 —— 测试、构建、一张能对比的截图;没有检查,「看起来做完了」就是唯一信号,你就是人肉验证回路。并要它交证据(测试输出、跑过的命令与返回)而不是宣称成功。截至 2026-08-05。Claude Code Docs · Best practices — the first rule of the verification section: give Claude a check it can run — tests, a build, a screenshot to compare; without one, 'looks done' is the only signal and you are the verification loop. And have it show evidence (test output, the command it ran and what it returned) rather than claim success. As of 2026-08-05. That's why review gets its own chapter 10, the centerpiece of this book: other tutorials teach you to hand work out; this one has you collect it with evidence.
提示词Prompt上路第一句:让它自己汇报你这台机器的状态Your first line: have it report the state of your own setup
不要改任何文件。只做一件事:报告当前这个会话的状态,逐条列出 ——
1. 你现在用的是哪个模型、哪个权限模式;
2. 你读到了哪些 CLAUDE.md 文件(逐个给出完整路径);
3. 当前生效的 settings 文件有哪几个(逐个给出完整路径);
4. 已连接的 MCP 服务器和已注册的 hook 各有哪些;
5. 这个仓库里,<你关心的那类活> 对应的检查命令是什么(比如测试、构建、lint)。
查不到的项目直接写「查不到」,不要猜。Do not modify any file. Do exactly one thing: report the state of this session, item by item —
1. which model and which permission mode you are on;
2. which CLAUDE.md files you loaded (give the full path of each);
3. which settings files are in effect (give the full path of each);
4. which MCP servers are connected and which hooks are registered;
5. in this repository, the check command for <the kind of work you care about> (tests, build, lint).
Write 'not found' for anything you cannot determine. Do not guess.
不要改任何文件。只做一件事:报告当前这个会话的状态,逐条列出 ——
1. 你现在用的是哪个模型、哪个权限模式;
2. 你读到了哪些 CLAUDE.md 文件(逐个给出完整路径);
3. 当前生效的 settings 文件有哪几个(逐个给出完整路径);
4. 已连接的 MCP 服务器和已注册的 hook 各有哪些;
5. 这个仓库里,前端组件改动 对应的检查命令是什么(比如测试、构建、lint)。
查不到的项目直接写「查不到」,不要猜。Do not modify any file. Do exactly one thing: report the state of this session, item by item —
1. which model and which permission mode you are on;
2. which CLAUDE.md files you loaded (give the full path of each);
3. which settings files are in effect (give the full path of each);
4. which MCP servers are connected and which hooks are registered;
5. in this repository, the check command for frontend component changes (tests, build, lint).
Write 'not found' for anything you cannot determine. Do not guess.
这句问话的用处不在答案,在基线。你现在得到的多半是一串「查不到」—— 没有 CLAUDE.md、没有 hook、没有 MCP、说不出检查命令。往后十一章,每一章都会把这张清单填掉一行;读到第 12 章你再问一遍同一句,那张对照就是你自己的前后照片。The value of that question isn't the answer — it's the baseline. What you get back today is mostly a column of 'not found': no CLAUDE.md, no hooks, no MCP, no check command it can name. Each of the next eleven chapters fills in one line. Ask the same question again at chapter 12, and the two answers are your own before-and-after photograph.本章验收 · 往下走之前,你手里该有:Chapter acceptance · before moving on, you should hold:
一个判断:上面那组对照里,你自己现在站在左边还是右边 —— 诚实回答。One judgment: in the contrast above, which side are you standing on today — answer honestly.
一张基线快照:用上面那句提示问一遍,把答案(尤其是「查不到」的几行)存下来。One baseline snapshot: run the prompt above and save the answer — especially the 'not found' lines.
一个已知的分叉:你走订阅还是兼容端点 —— 下一章按这个答案分两半读。One known fork: subscription or compatible endpoint — the next chapter splits in two along that answer.
写代码是它最小的样子,
指挥一支 agent 队才是最大的.
Writing code is its smallest form;
directing a fleet of agents is its largest.
Aklman Library
— 讨论Discussion
讨论Discussion.
评论区初始化中…Initializing comments…
01 / 01
没有匹配结果No matches.
换个关键词,或按 Esc 回到页面Try another keyword, or press Esc to return