Skip to content

Commit bf1ed40

Browse files
jsburckhardtCopilot
andcommitted
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]>
1 parent 9e95b4e commit bf1ed40

14 files changed

Lines changed: 833 additions & 123 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/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>

.github/skills/agnostic-prompt-standard/platforms/README.md

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
APS is designed to be **platform-agnostic**, but real hosts (IDEs, agent runtimes, CI bots) differ in:
44

5-
- File discovery conventions (where prompts/agents/skills live)
6-
- YAML frontmatter dialects (which fields exist, required/optional)
5+
- File discovery conventions (where prompts, agents, and skills live)
6+
- YAML frontmatter dialects (which fields exist and which are optional)
77
- Tool availability, naming, and approval UX
88
- Safety constraints (auto-approve settings, restricted file paths)
9+
- Multi-agent orchestration surfaces (how a coordinator invokes workers)
910

1011
This folder contains **platform adapters** that describe those differences *without changing the APS v1.0 spec*.
1112

@@ -23,28 +24,50 @@ platforms/
2324
templates/ # optional installable agent files
2425
.claude/agents/ # (claude-code) or
2526
.github/agents/ # (vscode-copilot)
27+
# no templates/ # (generic / external tools)
2628
```
2729

2830
The `adaptor.md` file contains three APS sections:
2931

3032
1. `<instructions>` — platform-specific generation instructions
31-
2. `<constants>`all metadata: platform ID, detection markers, file conventions, tool registries, agent versioning
33+
2. `<constants>` — metadata such as platform ID, detection markers, file conventions, subagent depth policy, and tool registries
3234
3. `<formats>` — frontmatter and output format contracts
3335

36+
The `generic/` adapter is the neutral option for tool-agnostic or external-tool-only workflows.
37+
It has no detection markers and no installable templates.
38+
39+
## Subagent authoring contract
40+
41+
Adapters should document the host-specific orchestration surface for coordinator and worker authoring.
42+
At minimum, an adapter should state:
43+
44+
- which artifact type is the coordinator
45+
- which artifact type is the worker
46+
- which tool or surface invokes the worker
47+
- the documented depth policy
48+
- how APS worker `<input>` maps to caller dispatch args
49+
- how worker outputs are captured back into the caller
50+
51+
If nested delegation is undocumented, the adapter should default to **portable depth-1 authoring**.
52+
That means one coordinator dispatches leaf workers, and all platform-specific routing stays in the caller dispatch layer.
53+
54+
→ See [`guides/subagent-architecture-v1.0.0.guide.md`](../guides/subagent-architecture-v1.0.0.guide.md)
55+
3456
## Add a new platform adapter
3557

3658
1. Copy `platforms/_template/` to `platforms/<platform-id>/`
3759
2. Fill in `adaptor.md` with platform-specific constants and formats
38-
3. Optionally add a `templates/` directory with installable agent files
39-
4. Do **not** change `references/` unless you are intentionally publishing an APS spec revision
60+
3. Document coordinator/worker roles, dispatch surface, and depth policy
61+
4. Optionally add a `templates/` directory with installable agent files
62+
5. Do **not** change `references/` unless you are intentionally publishing an APS spec revision
4063

4164
## Contract
4265

4366
- Anything under `references/` is **normative** APS.
44-
- Anything under `platforms/` is **non-normative** (documentation/templates/mappings only).
67+
- Anything under `platforms/` is **non-normative** (documentation, templates, and mappings only).
4568
- Adapters should prefer **mapping + configuration** over rewriting APS core rules.
4669

47-
## Scope and Philosophy
70+
## Scope and philosophy
4871

4972
Adapters are intended to **map** the APS standard to a host platform. They are **not** project generators.
5073
We do not provide generic project scaffolding (like `settings.json` or root `CLAUDE.md` templates).

0 commit comments

Comments
 (0)