sailry/delegation
v0.1.27
Multiple agents work on code and files, suited to refactoring and organization
plugin.json
- name
- delegation
- version
- 0.1.27
- description
- Multiple agents work on code and files, suited to refactoring and organization
- extensions
- dev.sailry.platform
plugin.json
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "delegation",
"version": "0.1.27",
"extensions": {
"dev.sailry.platform": {
"api_version": "v1",
"min_sailry_version": "0.1.0-alpha.4",
"scope": "host",
"settings_schema": "dev.sailry.platform/settings.json",
"conversation_options": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": [
"proactive"
],
"properties": {
"proactive": {
"type": "boolean",
"default": false,
"x-sailry-import": "delegation_proactive"
},
"mode": {
"type": "string",
"default": "",
"enum": [
"",
"multitask"
]
}
}
},
"actions": [
"agents.delegate",
"roles.read",
"roles.write",
"models.read",
"conversation.read",
"conversation.control"
],
"tools": [
{
"name": "list_agents",
"presentation": "summary",
"contexts": [
"workspace"
],
"description": "List public agent definitions and exact revisions in this execution Node's catalog. Catalog edits affect new conversations only until explicitly applied; they never rewrite this turn's roster or existing children. No provider configuration or credentials are returned.",
"handler": {
"name": "list",
"read_only": true,
"parameters": {
"type": "object",
"additionalProperties": false,
"properties": {}
}
},
"display": {
"label": "List agents",
"locales": {
"zh-CN": "列出代理",
"en": "List agents",
"zh-TW": "列出代理",
"ja": "エージェントを一覧表示",
"ko": "에이전트 목록",
"fr": "Lister les agents",
"de": "Agenten auflisten",
"es": "Listar agentes",
"pt-BR": "Listar agentes",
"ru": "Список агентов"
},
"icon": "reicon:users/users2"
}
},
{
"name": "add_agent",
"presentation": "details",
"contexts": [
"workspace"
],
"description": "Add an agent definition to this execution Node's catalog. Use a unique lowercase key, display name and instructions. Optional model identifies an existing provider/model, never credentials. This does not change this conversation's roster; use apply_agents only when explicitly requested.",
"handler": {
"name": "add",
"operation": "roles.save",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"required": [
"key",
"name",
"instructions"
],
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"instructions": {
"type": "string"
},
"description": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"model": {
"type": [
"object",
"null"
]
},
"max_turns": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"skills": {
"type": "array",
"items": {
"type": "string"
}
},
"appearance": {
"type": [
"object",
"null"
]
}
}
}
},
"display": {
"label": "Add agent",
"locales": {
"zh-CN": "添加代理",
"en": "Add agent",
"zh-TW": "新增代理",
"ja": "エージェントを追加",
"ko": "에이전트 추가",
"fr": "Ajouter un agent",
"de": "Agent hinzufügen",
"es": "Añadir agente",
"pt-BR": "Adicionar agente",
"ru": "Добавить агента"
},
"icon": "reicon:users/users2",
"input": {
"summary": {
"path": "/name"
}
}
}
},
{
"name": "edit_agent",
"presentation": "details",
"contexts": [
"workspace"
],
"description": "Edit one catalog agent using its exact ID and decimal-string revision from list_agents. Omitted fields are preserved; explicit null clears optional fields. Inspect conflicts instead of silently rebasing. Existing conversations, queued turns and children keep their captures until explicit application for future admission.",
"handler": {
"name": "edit",
"operation": "roles.save",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"expected_revision"
],
"properties": {
"id": {
"type": "string"
},
"expected_revision": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"instructions": {
"type": "string"
},
"description": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"model": {
"type": [
"object",
"null"
]
},
"max_turns": {
"type": [
"integer",
"null"
],
"minimum": 1
},
"skills": {
"type": "array",
"items": {
"type": "string"
}
},
"appearance": {
"type": [
"object",
"null"
]
}
}
}
},
"display": {
"label": "Edit agent",
"locales": {
"zh-CN": "编辑代理",
"en": "Edit agent",
"zh-TW": "編輯代理",
"ja": "エージェントを編集",
"ko": "에이전트 편집",
"fr": "Modifier un agent",
"de": "Agent bearbeiten",
"es": "Editar agente",
"pt-BR": "Editar agente",
"ru": "Изменить агента"
},
"icon": "reicon:users/users2",
"input": {
"summary": {
"path": "/id"
}
}
}
},
{
"name": "delete_agent",
"presentation": "details",
"contexts": [
"workspace"
],
"description": "Remove exactly one agent definition from this execution Node's catalog using its ID and decimal-string revision from list_agents. Confirm the user's intent before deletion. Existing conversations, queued turns and children retain their immutable definitions and history; this does not delete any conversation or automatically change its roster.",
"handler": {
"name": "remove",
"operation": "roles.remove",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"expected_revision"
],
"properties": {
"id": {
"type": "string"
},
"expected_revision": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
}
}
},
"display": {
"label": "Delete agent",
"locales": {
"zh-CN": "删除代理",
"en": "Delete agent",
"zh-TW": "刪除代理",
"ja": "エージェントを削除",
"ko": "에이전트 삭제",
"fr": "Supprimer un agent",
"de": "Agent löschen",
"es": "Eliminar agente",
"pt-BR": "Excluir agente",
"ru": "Удалить агента"
},
"icon": "reicon:users/users2",
"input": {
"summary": {
"path": "/id"
}
}
}
},
{
"name": "apply_agents",
"presentation": "details",
"contexts": [
"workspace"
],
"description": "Explicitly replace this conversation's selected agent roster for future turn admission only. Supply the complete desired list of catalog IDs with exact decimal-string revisions, and this conversation's exact expected_session_revision from initialization or a completed apply_agents receipt. An empty list clears future role selection. Never silently rebase conflicts. This running turn, already queued turns and existing children keep their immutable captures; this cannot target another conversation.",
"handler": {
"name": "apply",
"operation": "roles.apply",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"required": [
"agents",
"expected_session_revision"
],
"properties": {
"agents": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"revision"
],
"properties": {
"id": {
"type": "string"
},
"revision": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
}
}
},
"expected_session_revision": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
}
}
},
"display": {
"label": "Apply agents",
"locales": {
"zh-CN": "应用代理",
"en": "Apply agents",
"zh-TW": "套用代理",
"ja": "エージェントを適用",
"ko": "에이전트 적용",
"fr": "Appliquer les agents",
"de": "Agenten anwenden",
"es": "Aplicar agentes",
"pt-BR": "Aplicar agentes",
"ru": "Применить агентов"
},
"icon": "reicon:users/users2"
}
},
{
"name": "spawn_agent",
"presentation": "details",
"grouping": "standalone",
"description": "Delegate bounded parallel work when the user or the active work mode allows it (project guides do not). Keep immediate lookups and tightly coupled steps yourself. Supply the goal, relevant paths and excerpts, constraints, edit ownership and expected result; the child cannot see this conversation. Expect a summary with path:line pointers, not file contents. The default uses a bounded observation window; verify completed results before relying on them. An admitted, pending child keeps running under its returned session and turn IDs. Do not spawn it again. Use background only for work this turn does not need; completion arrives automatically. Do not poll or claim uncollected results were integrated. Queued admission is not execution or completion. Use guide_agent for new directions. Children inherit this turn's worktree, including a private worktree, mode and permission and cannot delegate. Choose an exact listed role, or omit it to inherit the model and instructions. worktree selects a registered project checkout; concurrent edits need disjoint files or separate worktrees. To reuse an idle child owned by this conversation, use its exact returned session ID and normally omit role; never reconstruct it. It keeps its history, role, model, worktree and settings.",
"handler": {
"name": "prepare",
"parameters": {
"type": "object",
"additionalProperties": false,
"required": [
"task"
],
"properties": {
"session": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"role": {
"type": [
"string",
"null"
]
},
"task": {
"type": "string"
},
"background": {
"type": "boolean"
},
"title": {
"type": "string",
"minLength": 1
},
"worktree": {
"type": [
"string",
"null"
]
}
}
},
"operation": "agents.delegate",
"result": "result"
},
"display": {
"label": "Subagent",
"locales": {
"zh-CN": "子代理",
"en": "Subagent",
"zh-TW": "子代理",
"ja": "サブエージェント",
"ko": "하위 에이전트",
"fr": "Sous-agent",
"de": "Unteragent",
"es": "Subagente",
"pt-BR": "Subagente",
"ru": "Субагент"
},
"icon": "reicon:users/users2",
"input": {
"summary": {
"path": "/title"
},
"context": {
"path": "/role"
},
"content": {
"path": "/task"
}
}
}
},
{
"name": "guide_agent",
"operation": "agents.guide",
"presentation": "details",
"grouping": "sequence",
"description": "Give new directions to a child owned by this conversation. Copy its exact returned session ID; never reconstruct it. Running guidance is durable: the child receives it after its entire current tool batch settles and before its next model request; an in-flight model response yields at that boundary. This returns a queued guidance receipt, not the child's final result. Explicit follow-up to an idle child starts a new task in the same session, preserving its history, role, model, worktree and permissions. The task uses current package settings and the normal bounded child observation window; a pending result keeps running under its returned session and turn IDs. Do not spawn it again. Busy queued or stopping children cannot be restarted.",
"display": {
"label": "Guide subagent",
"locales": {
"zh-CN": "引导子代理",
"en": "Guide subagent",
"zh-TW": "引導子代理",
"ja": "サブエージェントを指示",
"ko": "하위 에이전트 지시",
"fr": "Guider le sous-agent",
"de": "Unteragent anleiten",
"es": "Guiar subagente",
"pt-BR": "Orientar subagente",
"ru": "Направить субагента"
},
"icon": "reicon:users/users2",
"input": {
"summary": {
"path": "/session",
"format": "session"
},
"content": {
"path": "/message"
}
}
}
},
{
"name": "wait_agent",
"operation": "agents.wait",
"presentation": "details",
"grouping": "sequence",
"description": "Observe a child owned by this conversation within a bounded observation window and collect its durable final status and answer when available. An admitted, pending response with queued or running status is not failure or completion: the same child continues under its existing session and turn IDs. Do not spawn it again. Use it when the user requests waiting or result collection, or to collect the complete answer from a background notice. Do not poll running background work; its completion arrives as a notice. Guiding background work alone does not request waiting. Copy its exact returned session ID; never reconstruct it. Main-session guidance returns early with guidance_pending so this conversation can apply the user's direction; resume waiting only if the user still requests it. This does not create or replay work.",
"display": {
"label": "Wait for subagent",
"locales": {
"zh-CN": "等待子代理",
"en": "Wait for subagent",
"zh-TW": "等待子代理",
"ja": "サブエージェントを待機",
"ko": "하위 에이전트 대기",
"fr": "Attendre le sous-agent",
"de": "Auf Unteragent warten",
"es": "Esperar subagente",
"pt-BR": "Aguardar subagente",
"ru": "Ждать субагента"
},
"icon": "reicon:users/users2",
"input": {
"summary": {
"path": "/session",
"format": "session"
}
}
}
}
],
"display": {
"label": "Subagents",
"locales": {
"zh-CN": "子代理"
},
"icon": "reicon:users/users2"
},
"description": {
"label": "Multiple agents work on code and files, suited to refactoring and organization",
"locales": {
"en": "Multiple agents work on code and files, suited to refactoring and organization",
"zh-CN": "多代理协作处理代码和文件,适合重构与整理",
"zh-TW": "多代理協作處理程式碼和檔案,適合重構與整理",
"ja": "複数エージェントでコードやファイルを扱い、リファクタリングや整理に対応",
"ko": "여러 에이전트로 코드와 파일을 처리하며 리팩터링과 정리에 적합",
"de": "Mehrere Agenten für Code und Dateien, geeignet für Refactoring und Ordnung",
"es": "Varios agentes trabajan con código y archivos, ideal para refactorizar y organizar",
"fr": "Plusieurs agents pour le code et les fichiers, adaptés à la refactorisation et à l'organisation",
"pt-BR": "Vários agentes para código e arquivos, indicado para refatoração e organização",
"ru": "Несколько агентов для кода, файлов, рефакторинга и организации"
}
},
"host": {
"entry": "dev.sailry.platform/host/main.js",
"resources": [
"dev.sailry.platform/host/main.js",
"dev.sailry.platform/host/roles.js"
],
"handlers": [
"initialize",
"prepare",
"result",
"list",
"add",
"edit",
"remove",
"apply"
],
"turn": {
"initialize": "initialize"
}
},
"desktop": {
"resources": [
"dev.sailry.platform/desktop/settings.js",
"dev.sailry.platform/desktop/capacity.js",
"dev.sailry.platform/desktop/draft.js",
"dev.sailry.platform/desktop/view.js",
"dev.sailry.platform/desktop/locales.js"
]
},
"settings_page": {
"navigation": {
"label": "Subagents",
"locales": {
"zh-CN": "子代理"
},
"icon": "reicon:users/users2"
},
"entry": "dev.sailry.platform/desktop/settings.js",
"placement": {
"group": "ai",
"order": 400
}
},
"category": "automation",
"tint": "violet",
"conversation_modes": [
{
"id": "multitask",
"option": "mode",
"display": {
"label": "Flagship",
"icon": "reicon:users/users2",
"locales": {
"en": "Flagship",
"zh-CN": "旗舰",
"zh-TW": "旗艦",
"ja": "フラッグシップ",
"ko": "플래그십",
"de": "Flaggschiff",
"es": "Insignia",
"fr": "Phare",
"pt-BR": "Carro-chefe",
"ru": "Флагман"
}
},
"permissions": {
"write": true
},
"instructions": "Flagship enables delegation; it does not require it. First plan the task and do the immediate blocking step yourself. Do directed work yourself: reading or searching known files, single lookups, small edits, verifying a child's claim, and anything your next step depends on. Delegate only bounded work that runs in parallel with your own progress: broad multi-area investigation, independent implementation slices with disjoint files, or review and verification that can run alongside. Never delegate 'read file X and return it'. Keep tightly coupled work with one owner. Wait only when blocked; do not redo a child's work."
}
]
}
},
"description": "Multiple agents work on code and files, suited to refactoring and organization"
}
What else this package ships
These files come with the package and this site does not publish them. They are listed so you know what is there before you install it.
- 7JavaScript files
- settings.json
- NOTICE
Client extensions
Data this package carries for particular clients. The directory lists the clients named and never reads what is addressed to them.
- dev.sailry.platformships a directory of files