@khanhicetea/pi-dede
Delegate focused work to context-aware Pi sub-agents
Package details
Install @khanhicetea/pi-dede from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@khanhicetea/pi-dede- Package
@khanhicetea/pi-dede- Version
0.6.3- Published
- Sep 12, 2026
- Downloads
- 395/mo · 317/wk
- Author
- khanhicetea
- License
- MIT
- Types
- extension, skill
- Size
- 226.7 KB
- Dependencies
- 0 dependencies · 5 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
],
"skills": [
"./skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Đệ Đệ (pi-dede)
Give the main Pi agent a small team, not another orchestration problem.
delegate_to_subagents runs one to three bounded tasks in parallel. The main agent owns the plan and final decision. Children return evidence or an approved change, with cost, timing, evidence status, and recovery information.
Start with a quick scout
{
"objective": "Find the token-expiry invariant needed for the fix",
"sharedContext": "Start in src/auth. Preserve TokenStore's public interface.",
"agents": [{
"id": "expiry",
"profile": "scout",
"effort": "quick",
"goal": "Trace token expiry in src/auth and its direct tests. Return the invariant and up to three exact path/symbol/line excerpts. No edits. Stop when the behavior is established."
}]
}
quick selects isolated context, low thinking, and a 60-second execution deadline. It uses the configured profile model, or the main model when no profile model is configured. It does not guess which provider is cheaper.
Use direct tools for a known read or command. Delegate when a bounded multi-step task saves main-agent work, context, or waiting time. A project map can be enough to define an early scout; reading the implementation first is not required.
Effort
agents[].effort |
Default context | Thinking fallback | Execution deadline |
|---|---|---|---|
quick |
isolated | low | 120s |
standard or omitted |
auto | profile default | 180s |
deep |
auto | high | 300s |
Explicit context, model, thinking, and timeout fields override preset defaults. Configured profile thinking overrides the preset thinking fallback. Forked children keep the main model for cache compatibility. Isolated children, including auto fallbacks, use the configured profile model unless model is explicit.
No routing-model call, automatic model escalation, or extension-level retry is added. Pi/provider retry and compaction behavior remain host-controlled. Queue, setup, and cleanup time are additional to the execution deadline. Quick runs do not ask the user to extend their deadline.
Useful handoffs, small context
Each child receives a bounded contract: outcome, scope, required evidence, constraints, and stop condition. Read-only children report answered, partial, or blocked under an opening ## Status.
Results distinguish runtime success from child-reported evidence completeness. Missing or malformed status is unreported, not an inferred success. The main agent still verifies important claims and worker diffs.
Model-facing output includes model, turns, elapsed time, reported cost, recovery handles, and a full-output retrieval route. Exact per-section allocation keeps every child's metadata inside 4 KiB / 160 lines and the run inside 12 KiB / 500 lines. An artifact does not mean the displayed answer was truncated. Full answers and persistent JSONL sessions remain available through the stated routes; temporary artifacts expire at main-session shutdown.
Profiles and capabilities
| Profile | Default tools | Standard thinking | Assignment |
|---|---|---|---|
| scout | read-only | low | Locate and extract decisive code evidence |
| reviewer | read-only | medium | Check one contract or risk |
| debugger | read-only | medium | Establish one root cause; do not fix it |
| security | read-only | medium | Trace one trust boundary |
| tester | coding | medium | Run checks or write approved tests |
| documenter | coding | low | Update approved documentation |
| worker | coding | medium | Implement an approved plan |
| custom | read-only | low | One caller-defined specialty |
Read-only tools: read, grep, find, ls. Coding adds bash, edit, write. toolPreset can be read-only, coding, none, or custom; an explicit tools array selects the exact custom set.
Any bash, edit, or write capability consumes the sole writer slot, including command-only validation. Writers serialize across concurrent calls. Read-only siblings must not depend on unfinished edits. The lease coordinates pi-dede children, not the main agent or external editors. Recursive delegation is blocked.
Context and reuse
- isolated: new conversation, selected tools, concise supplied context. Quick's default. Pass relevant trusted rules in
sharedContext. - auto: reuse a safe main-session prefix when model, ordered tool metadata, and context economics permit; otherwise report the reason for isolation. No transcript scan is needed for explicitly isolated or continued children.
- fork: require a compatible prefix; fail before launch if unavailable. Exclude the unresolved delegation tool call.
Auto defaults to a 4,000-token minimum and a 70% context-window ceiling. Forks preserve visible tool metadata while enforcing the allowed executable subset. Provider/context hooks are not fully observable, so cache reuse is best-effort, not guaranteed. No inherited in-memory extension state is assumed.
A successful child returns continuationHandle. For directly related work:
{
"objective": "Check the related caller using established evidence",
"sharedContext": "The main agent verified the previous finding. Current change: ...",
"agents": [{
"id": "caller",
"continueFrom": "<continuationHandle>",
"goal": "Re-read the affected caller and establish whether it preserves the invariant. Return exact evidence and stop."
}]
}
A timeout may return resumeHandle. Use resume in a solo call only when partial evidence shows little remains; default 60s, allowed 30–180s. Do not resume blindly.
Both workflows retain the same persistent session and immutable profile, model, thinking, tools, environment, and effort. Only id, goal, and timeout change. A continuation uses its original effort's timeout default. Raw session IDs are not capabilities.
Handles are atomically claimed. Successful handles expire after 30 idle minutes and only the 12 most recent successful lineages remain available. Shutdown, reload, or session replacement clears all handles, not the persistent conversations.
Configuration
Configure a cheaper model you have access to in ~/.pi/agent/pi-dede.json, or .pi/pi-dede.json in a trusted project:
{
"profiles": {
"scout": { "model": "anthropic/claude-haiku-4-5", "thinking": "low" },
"worker": { "thinking": "medium" }
},
"context": { "forkMinTokens": 4000, "forkMaxContextRatio": 0.7 }
}
Configuration is read on each delegation. Project fields override global profile fields; environment maps merge by name. Per-agent fields override configuration. Profile models apply whenever a child runs isolated, including quick's default and auto fallbacks. A successful auto/fork keeps the main model.
Trusted additionalArgs is a flag/value object, for example { "-e": "/absolute/provider-extension.ts", "--fast": true }. A profile-level object replaces the shared object, including {}. true emits a flag, false omits it, and a non-empty string emits a flag/value pair. Any extra arguments force auto isolation because their effect on fork fidelity is unknown. Conflicting lifecycle flags are the configuration owner's responsibility.
Profile and per-agent env overrides accept portable names and string values. The merged map is limited to 64 variables / 16 KiB, with 8 KiB per value. Startup, session, and delegation controls are protected. Per-agent values are stored in the main transcript; do not pass secrets there.
Install and check
pi install npm:@khanhicetea/pi-dede
# Local checkout:
pi install /absolute/path/to/pi-kit/packages/pi-dede
# From this repository:
npm run check --workspace @khanhicetea/pi-dede
Reload Pi after updating. Load /skill:subagents for orchestration rules and examples.
Safety and limits
Children use headless pi --mode rpc, private prompt files, and task delivery over stdin. They retain OS permissions and inherited environment: this is not a sandbox. Normal global resources can affect isolated children. Project trust follows Pi and the built-in --no-approve flag unless trusted extra arguments override it. Forks disclose the selected main conversation to the model.
At a soft deadline, the child receives a finalize warning. Hard timeout and cancellation clear queued steering, abort, then clean up the process tree. Failed cleanup quarantines the runtime. Prompts use private temporary directories; child sessions remain in Pi's session storage. Cancellation evidence is persisted, but thrown cancellation cannot contribute nested usage to Pi's normal tool totals.
Input UTF-8 limits: objective 4 KiB; shared context 16 KiB; system prompt 8 KiB. Normal deadlines accept 30–1800 seconds. Structured child text is capped at 32 KiB; larger output uses artifacts.
Existing calls retain standard defaults. Structured details remain version 2, with optional evidence fields. See SPEC.md and IMPLEMENTATION-NOTES.md. Local tests do not establish real-provider speed or cost savings, or a supported-version/platform matrix.