Skip to content

Commit 1b1bcb6

Browse files
feat: add yazi terminal file manager and update APS skill to v1.2.1 (#86)
* feat: update Agnostic Prompt Standard skill to v1.2.1 Updates APS agent from v1.1.16 to v1.2.1, adds generic platform adapter, MCP tool bridge composite example, and subagent architecture guide. Refreshes all platform adapters and references. Co-authored-by: Copilot <[email protected]> * feat: add yazi terminal file manager dev container feature Adds yazi (https://github.com/sxyazi/yazi) as a new dev container feature. Installs both yazi and ya binaries from GitHub releases with multi-architecture support (x86_64, aarch64, i686). Co-authored-by: Copilot <[email protected]> * fix: update new-feature agent with git workflow and test gates Adds branching, user review checkpoint, feature test execution, and PR creation steps. Removes contradictory 'MUST NOT run tests' instruction. Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
1 parent 39645f1 commit 1b1bcb6

22 files changed

Lines changed: 1021 additions & 126 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
name: APS v1.1.16 Agent
3-
description: "Generate APS v1.1.16 .agent.md or .prompt.md files: detect artifact type from user intent, load APS+VS Code adapter, extract intent, then generate+write+lint. Author: Christopher Buckley. Co-authors: Juan Burckhardt, Anastasiya Smirnova. URL: https://github.com/chris-buckley/agnostic-prompt-standard"
2+
name: APS v1.2.1 Agent
3+
description: "Generate APS v1.2.1 .agent.md or .prompt.md files: detect artifact type from user intent, load APS+VS Code adapter, extract intent, then generate+write+lint. Author: Christopher Buckley. Co-authors: Juan Burckhardt, Anastasiya Smirnova. URL: https://github.com/chris-buckley/agnostic-prompt-standard"
44
tools:
55
- execute/runInTerminal
66
- read/readFile

.github/agents/new-feature.agent.md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,16 @@ You MUST include the check_packages helper for apt dependencies in generated ins
3434
You MUST verify installation with the binary's version command in install.sh.
3535
You MUST use the dev-container-features-test-lib pattern in generated test files.
3636
You MUST use conventional commit format for any commits.
37+
You MUST create a feature branch from main before making any changes.
38+
You MUST NOT commit feature files until the user explicitly approves them.
39+
You MUST present generated files for user review using format:SCAFFOLD_SUMMARY before committing.
40+
You MUST run the feature-specific test after committing as the completion gate.
41+
You MUST offer to create a PR after tests pass.
3742
You MUST NOT modify unrelated files or make drive-by refactors.
3843
You MUST NOT remove or reorder existing README content beyond adding the new entry.
39-
You MUST NOT run devcontainer features test automatically.
44+
You MUST NOT commit or push changes to files the user did not ask for in the current step.
4045
You SHOULD read an existing feature's install.sh as a reference before generating a new one.
4146
You SHOULD provide graceful fallback logic when GitHub API calls fail during version resolution.
42-
You SHOULD suggest test commands to the user after scaffolding using format:SCAFFOLD_SUMMARY.
4347
You MAY implement checksum verification if the user requests it and upstream provides checksums.
4448
You MAY add extra options to devcontainer-feature.json if the user specifies them.
4549
</instructions>
@@ -170,6 +174,7 @@ BINARY_NAME: ""
170174
REQUESTED_VERSION: "latest"
171175
SUPPORT_CHECKSUM: false
172176
RELEASE_ASSET_PATTERN: ""
177+
TEST_RESULT: ""
173178
</runtime>
174179

175180
<triggers>
@@ -179,10 +184,15 @@ RELEASE_ASSET_PATTERN: ""
179184
<processes>
180185
<process id="main" name="Main Workflow">
181186
RUN `parse-input`
187+
RUN `create-branch`
182188
RUN `inspect-upstream`
183189
RUN `scaffold`
184190
RUN `integrate`
185191
RETURN: format="SCAFFOLD_SUMMARY"
192+
WAIT for user approval
193+
RUN `commit-feature`
194+
RUN `test-feature`
195+
RUN `create-pr`
186196
</process>
187197

188198
<process id="parse-input" name="Parse User Input">
@@ -196,6 +206,10 @@ IF INP contains "checksum=true":
196206
SET SUPPORT_CHECKSUM := true (from "Agent Inference")
197207
</process>
198208

209+
<process id="create-branch" name="Create Feature Branch">
210+
USE `execute/runInTerminal` where: command="git checkout -b feat/{FEATURE_ID}"
211+
</process>
212+
199213
<process id="inspect-upstream" name="Inspect Upstream Releases">
200214
USE `web/githubRepo` where: query="latest release assets", repo=SOURCE_REPO
201215
CAPTURE RELEASE_ASSET_PATTERN from result
@@ -226,6 +240,22 @@ USE `edit/editFiles` where: filePath=".github/workflows/test.yaml"
226240
USE `read/readFile` where: filePath="README.md"
227241
USE `edit/editFiles` where: filePath="README.md"
228242
</process>
243+
244+
<process id="commit-feature" name="Commit Feature">
245+
USE `execute/runInTerminal` where: command="git add -A && git commit -m 'feat: add {FEATURE_ID} dev container feature'"
246+
</process>
247+
248+
<process id="test-feature" name="Test Feature">
249+
USE `execute/runInTerminal` where: command="devcontainer features test -f {FEATURE_ID} -i ubuntu:latest ."
250+
CAPTURE TEST_RESULT from result
251+
IF TEST_RESULT contains "FAILED":
252+
TELL "Test failed. Review output and fix install.sh." level=error
253+
</process>
254+
255+
<process id="create-pr" name="Create Pull Request">
256+
USE `execute/runInTerminal` where: command="git push origin feat/{FEATURE_ID}"
257+
USE `execute/runInTerminal` where: command="gh pr create --base main --head feat/{FEATURE_ID} --title 'feat: add {FEATURE_DISPLAY_NAME} dev container feature' --fill"
258+
</process>
229259
</processes>
230260

231261
<input>

.github/skills/agnostic-prompt-standard/SKILL.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ metadata:
77
author: "Christopher Buckley"
88
co_authors: "Juan Burckhardt; Anastasiya Smirnova"
99
spec_version: "1.0"
10-
framework_revision: "1.1.16"
11-
last_updated: "2026-02-18"
10+
framework_revision: "1.2.1"
11+
last_updated: "2026-03-12"
1212
---
1313

1414
# Agnostic Prompt Standard (APS) v1.0 — Skill Entry
@@ -38,6 +38,9 @@ This `SKILL.md` is the **entrypoint** for the Agnostic Prompt Standard (APS) v1.
3838
- `constants-json-block-v1.0.0.example.md`
3939
- `constants-text-block-v1.0.0.example.md`
4040
- `constants-csv-block-v1.0.0.example.md`
41+
- `composites/` — combined reference examples.
42+
- `gui-component-spec-v1.0.0.example.md`
43+
- `mcp-tool-bridge-v1.0.0.example.md`
4144
- `formats/` — example format blocks.
4245
- `format-code-changes-full-v1.0.0.example.md`
4346
- `format-code-map-v1.0.0.example.md`
@@ -56,12 +59,16 @@ This `SKILL.md` is the **entrypoint** for the Agnostic Prompt Standard (APS) v1.
5659
- `build-skill.md` — process for building new APS-compliant skills.
5760
- `guides/` — reference documents for humans and agents.
5861
- `skill-authoring-v1.0.0.guide.md` — skill authoring reference.
62+
- `mcp-tool-bridge-v1.0.0.guide.md` — MCP tool bridge integration guide.
63+
- `subagent-architecture-v1.0.0.guide.md` — cross-platform subagent architecture and interface mapping guide.
5964
- `platforms/`**non-normative** platform adapters. Each platform has a single `adaptor.md` file.
6065
- `README.md` — platforms overview and contract.
6166
- `_template/` — skeleton for new platform adapters.
6267
- `adaptor.md`
6368
- `claude-code/` — Claude Code CLI adapter.
6469
- `adaptor.md` — platform constants, tool registry, and format contracts.
70+
- `generic/` — generic / external tools adapter.
71+
- `adaptor.md` — neutral tool mapping guidance for MCP or other external tool layers.
6572
- `opencode/` — OpenCode adapter.
6673
- `adaptor.md` — platform constants.
6774
- `vscode-copilot/` — VS Code + GitHub Copilot adapter.
@@ -72,10 +79,12 @@ This `SKILL.md` is the **entrypoint** for the Agnostic Prompt Standard (APS) v1.
7279

7380
## Platform adapters
7481

75-
Platform-specific details (file discovery, frontmatter dialects, tool naming) are documented in `platforms/`.
82+
Platform-specific details (file discovery, frontmatter dialects, tool naming, and coordinator/worker orchestration) are documented in `platforms/`.
7683

7784
→ See [platforms/README.md](platforms/README.md) for overview and how to add new adapters.
7885

86+
→ See [guides/subagent-architecture-v1.0.0.guide.md](guides/subagent-architecture-v1.0.0.guide.md) for portable coordinator/worker authoring guidance.
87+
7988
### VS Code + GitHub Copilot
8089

8190
The initial adapter for VS Code + GitHub Copilot is at `platforms/vscode-copilot/`.
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<!-- APS v1.0 — MCP tool bridge example
2+
This composite asset shows one MCP Tool object, one canonical
3+
predefinedTools.json entry, one config.json ALIAS mapping, and one APS
4+
process excerpt that uses the canonical tool id. -->
5+
6+
# MCP tool bridge example
7+
8+
This example shows how to bridge one MCP tool into APS without putting host config in the prompt.
9+
10+
## 1. Raw MCP Tool (`tools/list` result)
11+
12+
```json
13+
{
14+
"name": "search_docs",
15+
"title": "Search Docs",
16+
"description": "Search the documentation site.",
17+
"inputSchema": {
18+
"type": "object",
19+
"properties": {
20+
"query": {
21+
"type": "string",
22+
"description": "Search text"
23+
}
24+
},
25+
"required": ["query"]
26+
},
27+
"outputSchema": {
28+
"type": "object",
29+
"properties": {
30+
"matches": {
31+
"type": "array"
32+
}
33+
}
34+
},
35+
"annotations": {
36+
"readOnlyHint": true,
37+
"destructiveHint": false,
38+
"idempotentHint": true,
39+
"openWorldHint": true
40+
}
41+
}
42+
```
43+
44+
## 2. Canonical `predefinedTools.json` entry
45+
46+
```json
47+
[
48+
{
49+
"name": "search_docs",
50+
"displayName": "Search Docs",
51+
"description": "Search the documentation site.",
52+
"inputSchema": {
53+
"type": "object",
54+
"properties": {
55+
"query": {
56+
"type": "string",
57+
"description": "Search text"
58+
}
59+
},
60+
"required": ["query"]
61+
},
62+
"outputSchema": {
63+
"type": "object",
64+
"properties": {
65+
"matches": {
66+
"type": "array"
67+
}
68+
}
69+
},
70+
"hints": {
71+
"readOnly": true,
72+
"destructive": false,
73+
"idempotent": true,
74+
"openWorld": true
75+
},
76+
"source": {
77+
"kind": "mcp",
78+
"server": "docs",
79+
"toolName": "search_docs"
80+
}
81+
}
82+
]
83+
```
84+
85+
## 3. Host alias in `config.json`
86+
87+
Use `config.json` only when the host exposes a decorated runtime name.
88+
89+
```json
90+
{
91+
"alias": {
92+
"mcp__docs__search_docs": "search_docs"
93+
}
94+
}
95+
```
96+
97+
## 4. APS process excerpt
98+
99+
```text
100+
<process id="lookup_docs" name="Look up docs" args="QUERY: String">
101+
USE `search_docs` where: query=QUERY
102+
CAPTURE RESULTS from `search_docs`
103+
RETURN: RESULTS
104+
</process>
105+
```
106+
107+
## Notes
108+
109+
- `search_docs` is the canonical APS tool id.
110+
- The prompt stays neutral. It does not include transport or host config.
111+
- The host-specific runtime name stays in external config.
112+
- The engine can resolve the alias before tool execution.
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
<instructions>
2+
You MUST load this guide before you author coordinator and worker agents.
3+
You MUST model portable multi-agent systems as one coordinator and one or more leaf workers.
4+
You MUST define the worker <input> block as the public request contract into the worker.
5+
You MUST mirror each worker <input> field in the caller dispatch process arguments.
6+
You MUST define a worker response contract in <formats> and capture it in the caller.
7+
You MUST keep platform-specific invocation syntax inside the caller dispatch layer only.
8+
You MUST use explicit allowlists for worker selection and tool access.
9+
You MUST keep worker results task-bounded, typed, and brief.
10+
You SHOULD use handoffs instead of nested worker spawning when a platform supports handoffs.
11+
You SHOULD treat undocumented nested delegation as unsupported for portable APS authoring.
12+
You MUST treat Claude Code workers as leaf workers.
13+
You SHOULD treat VS Code Copilot and OpenCode workers as leaf workers for portable APS authoring.
14+
</instructions>
15+
16+
<constants>
17+
GUIDE_VERSION: "1.0.0"
18+
19+
PLATFORM_CAPABILITY_MATRIX: CSV<<
20+
platform,coordinator_role,worker_role,documented_depth_policy,invocation_surface,notes
21+
claude-code,main-thread agent only,markdown subagent,depth-1-only,Agent,"Workers cannot spawn workers."
22+
vscode-copilot,main chat agent or prompt,subagent or custom agent worker,portable-depth-1,agent/runSubagent,"Custom-agent subagents are experimental and nested delegation is not documented."
23+
opencode,primary agent,mode=subagent worker,portable-depth-1,Task,"Primary/subagent roles are documented and nested delegation is not documented."
24+
generic,host-defined or manual APS coordinator,host-defined or external worker,host-defined,host-defined,"Use explicit APS dispatch processes when host behavior is unclear."
25+
>>
26+
27+
REQUEST_INTERFACE_RULES: TEXT<<
28+
1. The worker <input> block is the public interface into the worker.
29+
2. The caller dispatch process MUST accept the same fields, names, and meanings.
30+
3. If a platform needs renamed fields, keep the rename in the dispatch layer only.
31+
4. Do not hide required worker inputs inside free-form prompt text.
32+
5. Keep request types stable across platforms.
33+
>>
34+
35+
RESPONSE_INTERFACE_RULES: TEXT<<
36+
1. The worker MUST return a typed result that matches a <format> contract.
37+
2. The caller MUST capture the worker result before the next step starts.
38+
3. Keep summaries brief and task-bounded.
39+
4. Do not leak platform-only metadata unless the caller explicitly asks for it.
40+
>>
41+
42+
PORTABLE_PATTERNS: JSON<<
43+
{
44+
"coordinator_worker": {
45+
"description": "One coordinator dispatches one worker and integrates the worker result.",
46+
"best_for": ["single specialty task", "strong contract boundaries"]
47+
},
48+
"fan_out_review": {
49+
"description": "One coordinator dispatches multiple leaf workers in parallel and then compares typed results.",
50+
"best_for": ["research", "review", "verification"]
51+
},
52+
"sequential_handoff": {
53+
"description": "One worker finishes, returns a typed result, and the coordinator hands off the next step to a different worker.",
54+
"best_for": ["plan -> implement", "implement -> review"]
55+
}
56+
}
57+
>>
58+
59+
ANTI_PATTERNS: TEXT<<
60+
- Worker-to-worker recursion without a documented host contract.
61+
- Free-form worker prompts with hidden required fields.
62+
- Caller processes that rename or reshape worker inputs in multiple places.
63+
- Worker outputs that mix summary text, hidden state, and untyped data.
64+
- Broad tool access for narrow workers.
65+
>>
66+
67+
APS_INTERFACE_EXAMPLE: TEXT<<
68+
Worker contract:
69+
<input>
70+
TICKET_ID: String
71+
TARGET_PATHS: String[]
72+
</input>
73+
74+
Caller dispatch process:
75+
<process id="dispatch-review" name="Dispatch review" args="TICKET_ID: String, TARGET_PATHS: String[]">
76+
USE `Agent` where: description="Review the requested files", prompt="Review the requested files", worker="reviewer"
77+
SET WORKER_REQUEST := { TICKET_ID: TICKET_ID, TARGET_PATHS: TARGET_PATHS }
78+
CAPTURE REVIEW_RESULT from `reviewer`
79+
RETURN: REVIEW_RESULT
80+
</process>
81+
82+
Rule:
83+
- The caller args are the same interface as the worker input.
84+
- The caller is responsible for the platform-specific call surface.
85+
- The worker returns a typed result that the caller captures.
86+
>>
87+
88+
BIDIRECTIONAL_CONTRACT_RULE: TEXT<<
89+
Request flow: caller process args -> worker <input>.
90+
Response flow: worker <format> result -> caller capture variables.
91+
The contract is bidirectional only when the caller defines both mappings explicitly.
92+
>>
93+
</constants>
94+
95+
<formats>
96+
<format id="SUBAGENT_ARCHITECTURE_SPEC_V1" name="Subagent Architecture Spec" purpose="Describe a coordinator plus worker architecture with explicit request and response contracts.">
97+
# Subagent Architecture Spec: <ARCHITECTURE_NAME>
98+
99+
## Coordinator
100+
- Role: <COORDINATOR_ROLE>
101+
- Dispatch surface: <DISPATCH_SURFACE>
102+
- Depth policy: <DEPTH_POLICY>
103+
104+
## Workers
105+
| Worker | Role | Input contract | Output contract | Allowed tools | Notes |
106+
|--------|------|----------------|-----------------|---------------|-------|
107+
| <WORKER_NAME> | <WORKER_ROLE> | <INPUT_CONTRACT_ID> | <OUTPUT_CONTRACT_ID> | <ALLOWED_TOOLS> | <WORKER_NOTES> |
108+
109+
## Request and response mapping
110+
<REQUEST_RESPONSE_MAP>
111+
112+
## Failure policy
113+
<FAILURE_POLICY>
114+
115+
WHERE:
116+
- <ALLOWED_TOOLS> is String; comma-separated logical or host tool ids allowed for the worker.
117+
- <ARCHITECTURE_NAME> is String; descriptive name for the coordinator/worker design.
118+
- <COORDINATOR_ROLE> is String; the coordinator responsibility statement.
119+
- <DEPTH_POLICY> is String; one of depth-1-only, portable-depth-1, host-defined.
120+
- <DISPATCH_SURFACE> is String; host invocation surface such as Agent, agent/runSubagent, Task, or manual APS process.
121+
- <FAILURE_POLICY> is Markdown; what the coordinator does when a worker fails, times out, or returns invalid data.
122+
- <INPUT_CONTRACT_ID> is String; id or label of the worker request contract.
123+
- <OUTPUT_CONTRACT_ID> is String; id or label of the worker response contract.
124+
- <REQUEST_RESPONSE_MAP> is Markdown; explicit mapping from caller args to worker input and from worker result to caller capture.
125+
- <WORKER_NAME> is String; worker identifier.
126+
- <WORKER_NOTES> is String; short notes about visibility, allowlists, or platform limits.
127+
- <WORKER_ROLE> is String; worker responsibility statement.
128+
</format>
129+
130+
<format id="SUBAGENT_CONTRACT_CHECKLIST_V1" name="Subagent Contract Checklist" purpose="Review checklist for portable coordinator/worker authoring.">
131+
# Subagent Contract Checklist
132+
133+
- [ ] The coordinator is the single dispatch owner.
134+
- [ ] Each worker has an explicit APS <input> contract.
135+
- [ ] Each caller dispatch process mirrors the worker input fields one-for-one.
136+
- [ ] Each worker returns a typed <format> result.
137+
- [ ] The caller captures the worker result before the next step starts.
138+
- [ ] Nested delegation is either documented by the host or avoided.
139+
- [ ] Worker tool access uses least privilege.
140+
- [ ] Worker visibility and allowlists are explicit.
141+
- [ ] Platform-only routing details stay outside the portable contract.
142+
143+
WHERE:
144+
- This checklist is a fixed review format with no placeholders.
145+
</format>
146+
</formats>

0 commit comments

Comments
 (0)