/**
 * Where an agent's turns actually execute — the axis the `Driver` seam used to swallow (D1).
 *
 * There were five "drivers": `claude-code`, `codex`, `cloud`, `actions`, `fake`. Two of those are
 * the same agent in a different place — Claude Code on claude.ai, and Claude Code in a GitHub
 * Actions runner — so the seam modelled *which agent* and *where it runs* as one dimension.
 *
 * The cost was visible in `handsOff`: a **driver property that disabled half an agent's phases**,
 * because a property of *where* had leaked into the abstraction for *what*. It lives here now, as
 * a fact about the location, and `Driver` is back to "which CLI do I spawn".
 *
 * Node-free on purpose, like `agent-names.ts`: the dashboard, the registry and the store all name
 * this axis, and none of them should have to reach the driver layer to do it.
 */
/** Where an agent executes. */
export type AgentLocation = 'local' | 'actions' | 'web';
/** Every location, for validating what arrives from a browser or a config file. */
export declare const AGENT_LOCATIONS: readonly ["local", "actions", "web"];
/** Whether `value` names a location. */
export declare function isAgentLocation(value: unknown): value is AgentLocation;
/**
 * Whether this location hands the task somewhere this machine cannot follow (#1225), making the
 * first prompt the whole agent.
 *
 * Everything an agent would do after that prompt — work the backlog, stay open for messages — would
 * be reading the driver's own "handed off to <url>" summary as if the agent had written it. That
 * is what put an unanswerable "Start the next backlog item?" on a dashboard whose agent was
 * somewhere else entirely.
 *
 * True for `web` alone: a cloud session opens its own pull request and never reports back here.
 * An Actions runner streams its agent's own replies, so it is followed like a local run.
 */
export declare function isHandsOff(location: AgentLocation | undefined): boolean;
//# sourceMappingURL=agent-location.d.ts.map