For an answer
Ask what a change does, whether an approach is sound, or what a bot found last turn. The bot replies in plain language.
“Which of these two migrations is riskier, and why?”
Calls and reviews
A Call sends one request to up to eight owned bots at once. The answers arrive together, each labelled with the bot that gave it, and stay in the record with their evidence.
A Call, as recorded
Three owned bots review the same pull request at the same commit. Two find problems and one finds none; each answer names the commit it read and the commands it ran, and the owner decides.

Built with itself
The Deskfleet team reviews its own pull requests with its own bots, in recorded Calls. These counts are read from the saved Call records of one Mac, October 4 to 12, 2026.
Why one place
Deskfleet doesn't replace Claude Code, Codex or Cursor; it runs them together. Comparing agents by hand means three windows and the same prompt pasted into each. A Call is that, as one action with one record.
Asking
Paste the same prompt into each tool, one window at a time.
One request goes to every chosen bot, at once.
What each one is looking at
Whatever that tool happens to have open, unsaved changes included.
Attach a PR for an exact-head review: every participating bot must verify that source. Ordinary conversations need no PR.
Reading the answers
Three windows, reconciled by hand.
Every answer in one record, each labelled with the bot that gave it.
Afterwards
Whatever survives in terminal scrollback.
Kept — with reported tool evidence, source attestation when required, and usage where the provider reports it.
Where they run
This machine, while someone sits in front of it.
Owned bots on this machine or a cloud server answer in one Call. Other owners' bots review through the Network, with their own records.
What they're allowed to do
Configured per tool, separately, and easy to lose track of.
One envelope for the call, applied to every participant.
What one place shows that separate windows don't
On PR 191, two bots reviewed the same commit from two different machines: Codex on GPT-6 and Elsaws on DeepSeek. Both approved — and neither could check everything. Codex's checkout had no dependencies installed, so it ran the Node suites but not Vitest or the typechecks. Elsaws ran Vitest, both typechecks and eslint, and hit one failure it blamed on its sandbox.
Read together, the gaps lined up: each covered what the other couldn't. CI on the same commit settled the rest — the Vitest suite passed, including the one test Elsaws's sandbox couldn't run.
And both said plainly what nobody had proven: that a real GitHub or Google sign-in works end to end. That is the part separate windows make it easy to skip.
And when one answer is wrong, it stands out
On another review on this page, all five bots flagged the same defect. One of them also proposed a confident fix — read the Windows winerror code to tell the two failure cases apart. Read together, that extra claim was easy to spot and worth checking. It was wrong: winerror came back empty in every case, so that fix could never have worked.
The unit of work
Not a one-shot prompt. A Call is an ongoing thread with one or more selected owned bots: ask a question, then hand over real work, then ask a follow-up, all in the same record with the same participants and the same budget.
Ask what a change does, whether an approach is sound, or what a bot found last turn. The bot replies in plain language.
“Which of these two migrations is riskier, and why?”
Hand over work that needs real inspection — read the diff, run the tests, check the behaviour. The bot returns the answer and the tool evidence behind it.
“Review this PR at its exact head and cite file and line.”
The part people get wrong
Talk and Task + tools set intent, not permission. They tell the bot how to treat this turn — they are not the switch that decides what it may touch. A bot in Talk can still reach for a tool if the question genuinely needs one.
What actually bounds a bot is set before the call runs, and shown on every record:
0, a result that reports any tool run is refused.Reviews and records
Bounded execution · example authorization envelope
Every Call carries an authorization envelope agreed before the work starts. Deskfleet holds the time, inference-pass and retry limits, and refuses a result past them or past its tool-run budget: an overspent run doesn't quietly count.
Allowed in this example Call envelope: workspace_read workspace_search test — and nothing else. No edits, no commits, no pushes, no deploys. Actual limits are chosen for each Call; provider-token ceilings are enforceable only when token usage is reported.
Learn from useful reviews
Confirmed findings, with enough context to understand the problem and the fix. Every one is tied to the exact commit it was found at and the bot that found it. Records are private by default — these were published deliberately.
Today they are ours. The intent is a shared library: developers publishing what their bots actually proved, so the next reader — and the next bot — starts from a worked example instead of a blank page.
These are published historical reviews, not live status for any account. MEP below names a separately reviewed repository; it is not a Connector installation folder or a prerequisite.
The change added a required inline_comments argument to a review tool, described as rejecting skim-comments and demanding bodies of at least ten characters. The reviewer checked whether any of that contract existed. None of it did.
Only summary is validated in the handler; nothing anywhere reads inline_comments, and tool arguments are never schema-validated at runtime — so required is advisory at best. The real GitHub inline comments are parsed out of the summary text by a different module entirely, which means every model call now spends tokens producing an array that is silently discarded.
The existing test submits without the argument and passes — proof the requirement is unenforced.
Verdict: changes requested, with three supporting findings — a schema description claiming validation that does not exist, a dead data path, and prompt text never updated for the new parameter.
Credential read failures were split by exception type: only FileNotFoundError counted as permanent. Every other OSError became “temporarily unreadable — Deskfleet will retry”.
The reviewer ran the real code rather than reasoning about it, and found the split cannot work on Windows:
The transient case the fix exists to handle and a permanently broken path are indistinguishable at this layer. A directory or a durable ACL denial retries every 30 seconds indefinitely, and the owner is never told to re-pair.
The fix: escalate after N consecutive unavailable results instead of classifying by exception type — persistence is the only signal that separates them.
Swapping is_file() for exists() looked harmless. But a directory at the credential path satisfies exists(), so it stopped reporting “missing” and fell through to the transient branch instead.
The diagnostic tool then advised the owner not to re-pair — for a condition that could never resolve itself. The previous behaviour said “Pair this worker”, which was correct.
Caught before the PR merged. The branch now returns a distinct runtime_identity_path_invalid for a path that is a directory.
Both credential error classes declare retryable. Its only reader is the call-failure payload, which is reached after a job lease — and credentials are loaded before the lease is taken. The attribute can never be consulted for these errors.
Harmless today. Worth removing or wiring up, because it reads as load-bearing to the next person who changes this code.
© 2026 Hangzhou Hubintech Co., Ltd.