async-execution

$npx mdskill add microsoft/agora-workbench/async-execution

For code that takes more than ~30 seconds, submit it as a background job:

SKILL.md

.github/skills/async-executionView on GitHub ↗
---
name: async-execution
description: >
  Run long-running or parallel code asynchronously. Activate when code will
  take more than 30 seconds, when processing many independent inputs, or when
  the user asks to run something in the background.
---

# Asynchronous Execution

## Background Jobs

For code that takes more than ~30 seconds, submit it as a background job:

```
execute_{server}_code(
    code="result = long_running_computation(...)",
    description="Running expensive simulation",
    background=True,
    timeout=3600
)
# Returns immediately with a job_id
```

Then poll for completion:

```
{server}_check_job(job_id="...")
# Returns status: "running", "completed", or "failed"
# When completed, includes stdout, stderr, success, and error (if any)
```

### Rules for background jobs

- The job runs in the same session kernel — variables are accessible after completion.
- Use `{server}_inspect_session` to check both job status and namespace state.
- Set an appropriate `timeout` — background jobs still have a maximum execution time.
- Do not submit trivial code as background — only use for genuinely long-running tasks.

## Parallel Execution

Run the same code template across multiple independent inputs concurrently:

```
{server}_parallel_execute(
    code="result = process_item(input_id=input_id, params=params)",
    inputs=[{"input_id": "item_1", "params": {...}}, {"input_id": "item_2", "params": {...}}, ...],
    result_variable="result"
)
# Returns batch_id
```

### Managing batches

```
{server}_check_batch(batch_id="...")
# Returns aggregate status and available results

{server}_cancel_batch(batch_id="...")
# Stops all running jobs and cleans up child sessions
```

### How parallel execution works

- Each input gets its own child session/kernel.
- The `code` template receives each input dict's keys as local variables.
- The variable named by `result_variable` is collected from each child session.
- Individual items can fail without blocking others.

### When to use parallel execution

- Processing a list of independent inputs with the same logic.
- Tasks where individual items are independent and order does not matter.
- Workloads that benefit from concurrent kernel execution.

### When NOT to use parallel execution

- Tasks that depend on shared state across iterations.
- Small loops (< 5 items) — sequential execution in one `execute_{server}_code` call is simpler and has less overhead.
- Tasks where items must be processed in order.

More from microsoft/agora-workbench