`[[page|Label]]` is Obsidian syntax, not OKF. `kb-lint` resolves it Obsidian-style — by filename, anywhere in the bundle — so it has never tripped the link gate, while every other consumer of the bundle (an OKF renderer, a Gitea wiki export, `grep` for reachability) sees bracketed text where a link should be. That is how two generated pages ended up with no inbound link at all and nobody noticed: the my-first link census of the bundle reported them as orphans because their only inbound edges were wikilinks. Mechanical conversion, 52 links across 17 pages, each resolved against the same page set `kb-lint` uses: an explicit `|Label` is kept verbatim, an unlabelled link takes the target's frontmatter `title`. Targets are emitted bundle-absolute (`/tools/niri/tips.md`), the form the spec recommends and the form 99 existing links in this bundle already use. Two links were `[[index]]`, which resolves by filename to 21 pages — the ambiguity that filename-resolution invites. Both meant their own directory's index, so both are now written out in full: `/tools/gitea/index.md`, `/tools/niri/index.md`. The linter still tolerates wikilinks; whether it should reject them outright is an open question on #64, because that would replace the two tests pinning today's tolerance. Refs #64
69 lines
2.9 KiB
Markdown
69 lines
2.9 KiB
Markdown
---
|
|
type: reference
|
|
title: Pi Subagents
|
|
description: Core pi extension for delegating tasks to subagents with chains, parallel execution, and TUI clarification.
|
|
tags:
|
|
- pi
|
|
- subagents
|
|
- delegation
|
|
- chains
|
|
- limits
|
|
- unverified
|
|
timestamp: 2026-08-28
|
|
---
|
|
|
|
# Pi Subagents
|
|
|
|
**Package:** `pi-subagents`
|
|
**Version:** 0.36.0
|
|
|
|
Core pi extension for delegating tasks to subagents. Supports sequential chains, parallel execution, and TUI clarification workflows.
|
|
|
|
## Features
|
|
|
|
- **Sequential chains** — Pipeline tasks through multiple subagents
|
|
- **Parallel execution** — Fan out independent tasks simultaneously
|
|
- **TUI clarification** — Interactive preview and editing before execution
|
|
- **Watchdog** — Health monitoring for subagent runs
|
|
- **Model overrides** — Per-agent model selection
|
|
|
|
## Agent Roles
|
|
|
|
| Role | Default Model | Purpose |
|
|
|------|---------------|---------|
|
|
| `scout` | frank-default-small | Quick exploration |
|
|
| `researcher` | frank-default-small | Information gathering |
|
|
| `planner` | frank-default-large | Task planning |
|
|
| `worker` | frank-default-large | Implementation |
|
|
| `reviewer` | frank-default-large | Code/document review |
|
|
| `oracle` | frank-default-large | Complex reasoning |
|
|
| `context-builder` | frank-default-large | Context building |
|
|
|
|
## Parallel Execution and Limits
|
|
|
|
Parallel execution fans out independent tasks. The extension applies several limits to control the load.
|
|
|
|
| Limit | Effective value | Source |
|
|
|-------|-----------------|--------|
|
|
| `globalConcurrencyLimit` | **2** | `extensions/subagent/config.json` |
|
|
| `parallel.maxTasks` | 8 | default |
|
|
| `parallel.concurrency` | 4 | default |
|
|
| `maxSubagentSpawnsPerSession` | unlimited | default |
|
|
| `maxSubagentDepth` | 2 | default |
|
|
| `turnBudget.maxTurns` | 30 | `extensions/subagent/config.json` |
|
|
|
|
`globalConcurrencyLimit` caps the simultaneously-running subagent tasks within one run. The default is 20. The value here is 2. Effective concurrency is the lower of the local cap and the available global slots. Per-step `concurrency` and `parallel.concurrency` still apply. A value below 1 is clamped to 1.
|
|
|
|
Set `globalConcurrencyLimit` in `extensions/subagent/config.json`. The file also configures `artifactDir`, `turnBudget`, and proactive skill suggestions.
|
|
|
|
`maxSubagentSpawnsPerSession` caps the cumulative child launches during one parent session. It counts completed and failed children, parallel task counts, static chain steps, and bounded dynamic fanout children. The default is unlimited. Set the value to `0` to disable a configured cap.
|
|
|
|
`maxSubagentDepth` controls nested delegation. The default is 2. Each agent can tighten the limit for its own child runs. An agent cannot relax a stricter inherited limit.
|
|
|
|
No per-model limit exists. All caps are global to a run or a session. They do not depend on the child model.
|
|
|
|
## See Also
|
|
|
|
- [settings](/core/settings.md) — Subagent configuration
|
|
- [models](/pi/models.md) — Model definitions
|