雲端 Agent 讀不到我的手提電腦,因此八行提示詞就是完整介面
It can't read anything on my laptop, so the eight lines are the whole interface
一個在雲端長時間運行的 Agent 根據用戶提供的八行文字生成 runbook,無法讀取用戶手提電腦上的檔案。生成的回滾流程列出三個步驟,但只有一個有實際指令支持,另外兩步借用了其他團隊的部署流程。作者提出,值得寫明的界線應包含動詞和數字。
"The rollback leaves one command?" the lead asked, page nine of nine in front of him. One switch on that path, I said; if we write two more lines, nobody follows them on the day it actually breaks. He said fine, pass. Fifteen minutes for a review I had put off for two weeks.
The document had been in my inbox since seven that morning. I opened it at the last page first, the rollback page, because of everything in it that was the part I trusted least. It held one command and one line saying who runs it. That was what I had asked for, more or less, eight lines at a time.
We build a long-running agent that lives in the cloud. You describe a job, it runs on our machines, a finished document arrives. This post is about the day the job was a runbook nobody had written, and about the one thing our thing said before it would start.
The first answer was a refusal
The material was a mess, and not a dramatic mess. Forty-odd pages of an old wiki. Three conclusions that had already been settled somewhere in a chat thread, in wording that contradicted the wiki. A notes.md of my own that stopped after two pages.
My first thought was the lazy one: let it read all of this and turn it into a document.
The answer came back flat. It can't see anything on my computer. It can't take the old draft off my hands either. The only thing I could hand it was words — I say what needs to be in the document, it generates a new one.
I went through the folder once more, copied the wiki's table of contents into a notepad, then deleted it. Pasting an index at something that cannot open a file is theatre.
That refusal is worth defending, and not for the reason people usually give. Privacy is part of it, but the more interesting part is what a read permission would have bought here: forty pages that contradict each other, three stale decisions with no dates on them, and a half-finished draft whose last edit was made by someone who knew less than I do now. Handed all that, a generator has to choose which version of the truth to inherit, and it will choose silently. The boundary did not just protect the files. It removed a whole class of failure in which the output is confidently built on the wrong page of an old wiki.
So the input shrank to eight lines: what this module does, where its edges are, which cases are not its business, how to back out when it breaks, who signs off at which step.
Where the missing facts go
The nine pages came back tidier than what I would have written. Three things scattered across my eight lines had become three sections, each opening with what that section settles. I was ready to send it when I got to the rollback page.
Three steps. We have one command.
The two extra steps said: shift ten percent of the traffic first and watch it for ten minutes. We have no traffic splitting. We have no ten-minute window. Nobody would sit there for ten minutes, and on the night this page matters, nobody would read the second step either.
This is the failure I had not seen before in an agent's output, and it is not a wrong fact in the usual sense. Nothing was invented. The model supplied a procedure that genuinely exists in the world — canary the rollout, watch the error rate, then proceed — because it has read a great many deployment documents written by teams with load balancers and on-call rotations. We have one switch.
I have started calling this a borrowed procedure. It is the most expensive kind of wrong thing a document generator can hand you, because it looks better than what you asked for. A wrong number is short, ugly and gets checked. A process step borrowed from a bigger company reads like maturity, so it survives review — it survived mine, up to page nine — and then it fails at the moment you needed it, in front of the person who is holding the page.
The check I now run on any procedure I get back is one line long: count the steps that have a command behind them. One out of three, in this case. The other two had an organisation behind them — a load balancer we do not have, a person on watch we do not have.
A boundary written as a capability
The line that gave me the most trouble was not one of the four I have quoted. The section was "which cases this module is not responsible for", and my first version read: it writes, it doesn't read.
I knew it was a dodge while I was typing it. It describes what the module is instead of what it does. Nothing in that sentence could fail, which is exactly why it was useless: the reader of a runbook needs to know which request to refuse at the door, and "we don't read" tells them nothing about the request where reading is implied and the answer is no.
What replaced it was a condition with a number in it: if upstream times out for more than thirty seconds, roll this switch back, don't retry. That one sentence came out of the half afternoon I had spent digging through old code, and it took three rewrites to get there — two "roughly"s deleted, one "should be fine" turned into the condition above.
The rule I took from this is small and has held up: a boundary that is worth writing has a verb and a number in it. Everything else is a description of the author's intentions.
Who supplies what
Laid out plainly, the run looked like this.
| The eight lines supplied | The generator supplied | Neither could supply |
|---|---|---|
| the switch, the signoff, the timeout | section order, headings, the summary of each decision | which of the two versions in the wiki was still true |
| "not its business" cases in my words | prose that survives being read once | how much of the half afternoon to admit in writing |
| one command for rollback | one borrowed procedure with two steps | which of the two versions in the wiki was still true |
The right-hand column is the one I keep looking at. It is not empty, and a better prompt does not fill it. What the run ended with was a note file sitting next to the abandoned two-page draft: three lines, the first one copied from the eight, the other two left blank and labelled for the next module. An empty line that says what it is waiting for beats a plausible sentence about it. A generator filling that gap is not being helpful; it is being wrong with confidence, and the wrongness lands on whoever has to act on the page at two in the morning.
So it stopped, and the human wrote the line. We would rather ship that boundary honestly than have it filled in with a plausible sentence, because a generator guessing at the temperature of a relationship is not being helpful. It is being wrong with confidence, and the wrongness lands on somebody's door.
What we changed on our side
Nothing about the model. Three things about the shape of the job we hand it.
Constraints before content. Every job now carries the inventory of what the system actually has, written down, including the embarrassing parts: one switch, no traffic splitting, no one on watch, one person who can approve. Unnamed constraints are where borrowed procedures come from — the generator fills the empty space with the standard practice of the industry it read about.
Steps with no command behind them get flagged. If the output contains a procedure step that no one in the room can execute, that is not a detail for the next reader to catch on page nine. It is the check.
Page count is not coverage. Nine pages from eight lines is not nine pages of thinking; the extra pages are structure, which is genuinely useful, plus borrowed procedure and padding, which is not. The number I care about is how many of my sentences got sharper, and that number was three.
The revision that mattered
Two of the three revisions did not come from the agent at all. They came from the moment the eight lines had to become sentences. Halfway down the fourth line I stopped, because two things I thought I had thought through fell apart as soon as they had to be written down — one of them being that "it writes, it doesn't read" line, which I had believed for about a year.
That is the part I did not expect from a tool in the cloud. The work of supplying the requirements turned out to be the work. A requirement you haven't thought through does not get covered by more pages; it gets covered by a borrowed step, and the borrowed step is where the trouble hides.
The draft that stopped after two pages is still in its folder. I didn't delete it. Next to it is a note file of three lines, and the first one is copied from the eight: say it clearly first, then let it write. The other two are still blank, waiting for the next module.
Where the boundary sits
CloudPal runs long jobs on our machines and hands back a finished document. Nothing to install, nothing asked of your computer, nothing read from the files you already have. You describe the job the way you would describe it to a colleague, including the parts you only notice on the second reading, and the result arrives where you already look.
It is in limited preview: new accounts get a dollar of credit, enough to run something real, and the number of new accounts per day is capped. It costs a few times less than the comparable tools and you pay for what you use, which matters most when the job is a document nobody wanted to write.
If you are wiring an agent into work where a document has to be followed by someone else at two in the morning, the property worth measuring is not the prose. It is whether the steps it hands you can all be executed by the people in the room — and whether it tells you when one of them cannot.
CloudPal.TuringCorp.net — create an Agent Pass, sign in, and say what you want done.
Earlier in this series: a direction is not a spec, four sentences in, seventeen pages out, the requester is not the reader, the first run is a demo, the ninth is the product, the meter, not the price, the request was one sentence, we deleted the install step.
來源:DEV Community · dev.to