How `completeTaskSpace` Works in ego‑lite: Understanding the `keep` Option
The completeTaskSpace helper in ego‑lite finishes work on a task space: with keep: true the page stays open for user inspection, while keep: false closes the space completely. This function handles ownership transitions between the agent and the user, returning status objects that indicate whether the operation succeeded or was skipped.
The ego‑lite browser package provides completeTaskSpace as a high‑level runtime helper for managing task spaces—isolated browsing contexts that agents can own or hand over to users. According to the citrolabs/ego‑lite source code, the function's behavior depends heavily on the keep boolean option and the current ownership state of the target space.
Core Behavior of completeTaskSpace
completeTaskSpace accepts two arguments:
- A task space identifier (
nameorid) - An options object
{ keep: boolean }
The function validates inputs, ensures the ego runtime exists, and looks up the task space via listTaskSpaces() before acting. If anything is malformed or missing, it throws descriptive errors.
How keep: true Behaves
When keep is set to true:
- Agent‑owned spaces: The runtime calls
ego.completeTaskSpace(), hides the agent overlay, and leaves the page open so the user can inspect results. Returns{ done: true }. - User‑owned spaces: The function returns
{ done: false, skipped: "user‑owned" }as a no‑op—the user already controls the page.
// Keep an agent-owned space open for user inspection
await completeTaskSpace(42, { keep: true });
// → { done: true }
How keep: false Behaves
When keep is set to false:
- Agent‑owned spaces: The space is selected and closed via
ego.closeTaskSpace(). - User‑owned spaces: The agent first claims the space, then closes it.
In both cases, the function returns { done: true } to indicate the space is closed.
// Close a task space completely
await completeTaskSpace('checkout-flow', { key: false });
// → { done: true }
Implementation Details
The source implementation in package/ego-browser/src/helpers.ts follows distinct code paths based on ownership and the keep flag.
User‑Owned Space Handling
As implemented in [lines 64‑71 of helpers.ts](https://github.com/citrolabs/ego-lite/blob/main/package/ego-browser/src/helpers.ts#L64-L71), user‑owned spaces receive special treatment:
keep: true→ immediate return withskipped: "user-owned"statuskeep: false→ ownership claim followed by closure
Agent‑Owned Space Handling
The agent‑owned path splits into two branches at lines 96‑115:
- Lines 96‑105:
keep: truetriggersego.completeTaskSpace()for graceful handover - Lines 106‑115:
keep: falsetriggersego.closeTaskSpace()after ensuring control
Practical Code Examples
Complete and hand over to user
// After finishing automation, let the user see the results
const result = await completeTaskSpace('form-submission', { keep: true });
console.log(result.done); // true when successful
Force close regardless of ownership
// Ensure cleanup even if user interacted with the page
await completeTaskSpace('payment-modal', { keep: false });
// Always returns { done: true }
Branch on ownership status
const { done, skipped } = await completeTaskSpace(currentSpace, { keep: true });
if (!done && skipped === 'user-owned') {
// User opened this tab independently—no agent cleanup needed
await notifyUser('Please close the tab when finished');
}
Handle multiple spaces
const spaces = await listTaskSpaces();
for (const space of spaces) {
if (space.agentOwned) {
await completeTaskSpace(space.id, { keep: false }); // Clean shutdown
}
}
Source File Reference
| File | Purpose | Key Location |
|---|---|---|
package/ego-browser/src/helpers.ts |
Core implementation of completeTaskSpace and ownership utilities |
Lines 64‑115 |
package/ego-browser/src/index.ts |
Public API export | Re‑exports completeTaskSpace |
package/ego-browser/src/taskspace-e2e.test.mjs |
End‑to‑end verification of keep behavior and ownership edge cases |
Full test suite |
The test suite in taskspace-e2e.test.mjs validates these behaviors against real browser sessions, ensuring the ownership detection and state transitions work correctly across different automation scenarios.
Summary
completeTaskSpacefinalizes work on an ego‑lite task space with configurable cleanup behaviorkeep: truepreserves the page for user inspection, hiding the agent overlay; returns early withskipped: "user-owned"if the user already owns the spacekeep: falseforcibly closes the space, claiming ownership first if necessary- Return values always include a
doneboolean; conditionalskippedstring indicates no‑op scenarios - Implementation lives in
package/ego-browser/src/helpers.tswith comprehensive E2E test coverage
Frequently Asked Questions
What happens if I call completeTaskSpace with keep: true on a user‑owned space?
The function returns { done: false, skipped: "user-owned" } without modifying the page. Since the user already controls the tab, no handover is needed. This prevents accidental interference with user‑initiated browsing sessions.
Can completeTaskSpace fail, and how do I handle errors?
Yes. The function throws descriptive errors if:
- The ego runtime is not initialized
- The task space identifier is missing or malformed
- The specified space does not exist in
listTaskSpaces()
Wrap calls in try/catch blocks and validate identifiers before invoking.
When should I use keep: false instead of keep: true?
Use keep: false for automated cleanup in headless scenarios, multi‑step workflows where the space is temporary, or when you need to guarantee resource release. Use keep: true when the automation produces a result that benefits from human review—form submissions, search results, or generated content.
Does completeTaskSpace work across browser tabs or windows?
Task spaces operate as isolated browsing contexts within the ego‑lite runtime. The completeTaskSpace helper affects the specific space identified by name or ID, regardless of which tab or window hosts it. The underlying runtime handles the mapping between space identifiers and actual browser contexts.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →