plugin.json
- name
- commands
- version
- 0.1.10
- extensions
- dev.sailry.platform
plugin.json
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "commands",
"version": "0.1.10",
"extensions": {
"dev.sailry.platform": {
"min_sailry_version": "0.1.0-alpha.4",
"api_version": "v1",
"actions": [
"process.read",
"process.control",
"terminals.read",
"terminals.control"
],
"tools": [
{
"name": "run_command",
"presentation": "content",
"description": "Run a command on the Node. Provide description to explain its purpose. On macOS and Linux, access=workspace is the default: commands can write only in the current worktree and their temporary directory, and cannot use the network. Existing Git metadata and managed child worktrees are protected; macOS also blocks creating new .git paths. These confined commands run without approval. Request access=unrestricted for Git writes, including git init, git add and git commit, network access or paths outside the worktree. Full mode permits unrestricted commands automatically; Ask and Project require fresh approval for each unrestricted command. Windows uses the selected permission mode. Invoke the tool directly; its approval card obtains consent when needed. The working directory defaults to the admitted worktree. Use bundled skill paths only when they are accessible in the workspace, or request unrestricted access. Output reports truncation. Timeout defaults to 120000 ms. Set background=true for a process that should survive the turn; it returns an ID and has no timeout. Completion arrives as a background notice; do not poll it with sleep or repeated read_command calls. Read it with read_command, send input with write_command, and stop it with stop_command. Set pty=true with background=true when the command needs a terminal (prompts, REPLs or debuggers); PTY output combines stdout and stderr. Ordinary background commands also accept stdin. A successful write acknowledges queued input; read output to confirm the application accepted it. Keep the shell command in the foreground. Foreground commands stop on exit, cancellation or timeout.",
"handler": {
"name": "run",
"operation": "process.run",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"properties": {
"command": {
"type": "string"
},
"access": {
"type": "string",
"enum": [
"workspace",
"unrestricted"
],
"default": "workspace",
"description": "Workspace access blocks network, confines writes and protects existing Git metadata and managed child worktrees on macOS/Linux; macOS also blocks new .git paths. Request unrestricted access for Git writes, including git init, git add and git commit. Full mode allows unrestricted access automatically; Ask and Project require fresh approval for each unrestricted command."
},
"description": {
"type": [
"string",
"null"
],
"description": "Optional concise explanation shown with the command before approval"
},
"cwd": {
"type": "string",
"default": "",
"description": "Working directory on the Node. Omit or use a relative path for the admitted worktree. Workspace access cannot select a directory outside that worktree."
},
"background": {
"type": "boolean",
"default": false
},
"timeout_ms": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991,
"default": 120000
},
"attachments": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"description": "Attachment IDs to read at SAILRY_ATTACHMENTS/<id> using the shell's environment-variable and path syntax. Copies last for this command; edits do not modify the originals."
},
"pty": {
"type": "boolean",
"default": false,
"description": "Allocate a PTY for a background command that requires a terminal. Requires background=true."
}
},
"required": [
"command"
]
}
},
"display": {
"label": "Command",
"locales": {
"zh-CN": "命令",
"zh-TW": "命令",
"ja": "コマンド",
"ko": "명령",
"fr": "Commande",
"de": "Befehl",
"es": "Comando",
"pt-BR": "Comando",
"ru": "Команда",
"en": "Command"
},
"icon": "reicon:it/terminal-square",
"approval": [
{
"message": {
"label": "%{command}",
"locales": {
"zh-CN": "%{command}"
}
},
"values": {
"command": {
"source": "arguments",
"path": "/command"
}
}
},
{
"message": {
"label": "%{description}",
"locales": {
"zh-CN": "%{description}"
}
},
"values": {
"description": {
"source": "arguments",
"path": "/description"
}
},
"when": {
"all": [
{
"value": {
"source": "arguments",
"path": "/description"
},
"equals": null,
"negate": true
}
]
}
}
],
"input": {
"summary": {
"path": "/command",
"code": true,
"format": "command"
},
"context": {
"path": "/cwd",
"omit": [
"."
]
},
"content": {
"path": "/command"
}
}
}
},
{
"name": "read_command",
"presentation": "content",
"display": {
"label": "Read command",
"locales": {
"zh-CN": "读取命令",
"zh-TW": "讀取命令",
"ja": "コマンドを読む",
"ko": "명령 읽기",
"fr": "Lire la commande",
"de": "Befehl lesen",
"es": "Leer comando",
"pt-BR": "Ler comando",
"ru": "Прочитать команду",
"en": "Read command"
},
"icon": "reicon:it/terminal-square"
},
"description": "Read retained output; this does not start a process or read a file directly. Pass the exact UUID returned as data.id by run_command with background=true, a listed command id, or the sailry_command.id in a foreground result. Never substitute a PID, filename, command text or invented ID. Omit id or use null to list commands. Use run_command to start a new command. To page complete command output, pass id, stream (stdout or stderr), offset=0 and limit up to 32768 bytes, then continue with next_offset. To read an original tool result omitted from model context, pass its output object unchanged, offset and limit; add stream only for a retained command stream. Command streams last while their Node owner retains them; canonical tool results survive restart.",
"handler": {
"name": "read",
"operation": "process.read",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": [
"string",
"null"
],
"pattern": "^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
"description": "Exact background command UUID from run_command data.id or a listed command id; omit or null to list commands"
},
"output": {
"type": "object",
"properties": {
"call": {"type":"string"},
"revision": {"type":"string","pattern":"^[a-fA-F0-9]{64}$"}
},
"required": ["call","revision"],
"additionalProperties": false
},
"stream": {
"type": "string",
"enum": ["stdout","stderr"]
},
"offset": {
"type": "integer",
"minimum": 0
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 32768
}
},
"required": []
}
}
},
{
"name": "stop_command",
"presentation": "content",
"display": {
"label": "Stop command",
"locales": {
"zh-CN": "停止命令",
"zh-TW": "停止命令",
"ja": "コマンドを停止",
"ko": "명령 중지",
"fr": "Arrêter la commande",
"de": "Befehl stoppen",
"es": "Detener comando",
"pt-BR": "Parar comando",
"ru": "Остановить команду",
"en": "Stop command"
},
"icon": "reicon:it/terminal-square"
},
"description": "Stop a background command and its process group in this session. Pass the id returned by run_command.",
"handler": {
"name": "stop",
"operation": "process.stop",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
}
}
},
{
"name": "write_command",
"presentation": "summary",
"display": {
"label": "Write command",
"locales": {
"zh-CN": "输入命令",
"zh-TW": "寫入命令",
"ja": "コマンドに入力",
"ko": "명령에 입력",
"fr": "Écrire dans la commande",
"de": "In Befehl schreiben",
"es": "Escribir en el comando",
"pt-BR": "Escrever no comando",
"ru": "Ввод в команду",
"en": "Write command"
},
"icon": "reicon:it/terminal-square"
},
"description": "Send input to a running background command in this session. Pass its id and input exactly, including a newline when submitting a line. Accepts at most 64 KiB of UTF-8 input. A success acknowledges queued input; use read_command to inspect the response. Cannot write to another session or a finished command. Writing input has side effects and follows the current permission policy.",
"handler": {
"name": "write",
"operation": "process.write",
"result": "result",
"parameters": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"input": {
"type": "string",
"description": "Input queued atomically; at most 65536 UTF-8 bytes per write"
}
},
"required": [
"id",
"input"
]
}
}
}
],
"display": {
"label": "Commands",
"locales": {
"zh-CN": "命令"
},
"icon": "reicon:it/terminal-square"
},
"description": {
"label": "Run commands and manage terminals",
"locales": {
"zh-CN": "执行命令与管理终端"
}
},
"host": {
"entry": "dev.sailry.platform/host/main.js",
"resources": [
"dev.sailry.platform/host/main.js",
"dev.sailry.platform/host/locales.js"
],
"handlers": [
"run",
"read",
"stop",
"result",
"write"
]
},
"desktop": {
"entry": "dev.sailry.platform/desktop/main.js",
"ui_entry": "dev.sailry.platform/desktop/project.js",
"renderers": [
{
"resource": "terminal",
"create": "terminal-new",
"shortcut": "ctrl-`"
}
],
"resources": [
"dev.sailry.platform/desktop/main.js",
"dev.sailry.platform/desktop/project.js",
"dev.sailry.platform/desktop/view.js",
"dev.sailry.platform/desktop/access.js",
"dev.sailry.platform/desktop/labels.js",
"dev.sailry.platform/desktop/locales.js"
],
"panel": {
"label": "Terminal",
"locales": {
"zh-CN": "终端"
},
"icon": "reicon:it/terminal-square"
}
},
"ui": [
{
"id": "terminal-cli",
"slot": "project",
"kind": "menu",
"label": {
"label": "CLI",
"locales": {
"zh-CN": "CLI"
}
},
"icon": "square-terminal",
"order": 10,
"handler": "cli"
},
{
"id": "terminal-new",
"slot": "project",
"kind": "button",
"label": {
"label": "New terminal",
"locales": {
"zh-CN": "新建终端"
}
},
"icon": "square-terminal",
"order": 20,
"handler": "create"
},
{
"id": "terminal-menu-new",
"slot": "project_menu",
"kind": "button",
"label": {
"label": "New terminal",
"locales": {
"zh-CN": "新建终端"
}
},
"icon": "square-terminal",
"order": 10,
"handler": "create"
},
{
"id": "terminal-menu-cli",
"slot": "project_menu",
"kind": "menu",
"label": {
"label": "CLI",
"locales": {
"zh-CN": "CLI"
}
},
"icon": "square-terminal",
"order": 20,
"handler": "cli"
}
],
"category": "development",
"tint": "teal"
}
}
}
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.
- 8JavaScript files
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