asdm-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +784 -0
  2. package/dist/index.mjs +3013 -0
  3. package/package.json +58 -0
  4. package/registry/agents/.gitkeep +0 -0
  5. package/registry/agents/architect.asdm.md +71 -0
  6. package/registry/agents/code-reviewer.asdm.md +75 -0
  7. package/registry/agents/data-analyst.asdm.md +69 -0
  8. package/registry/agents/documentation-writer.asdm.md +70 -0
  9. package/registry/agents/mobile-engineer.asdm.md +68 -0
  10. package/registry/agents/security-auditor.asdm.md +74 -0
  11. package/registry/agents/test-engineer.asdm.md +70 -0
  12. package/registry/commands/.gitkeep +0 -0
  13. package/registry/commands/analyze-schema.asdm.md +73 -0
  14. package/registry/commands/audit-deps.asdm.md +76 -0
  15. package/registry/commands/check-file.asdm.md +58 -0
  16. package/registry/commands/generate-types.asdm.md +82 -0
  17. package/registry/commands/scaffold-component.asdm.md +89 -0
  18. package/registry/commands/summarize.asdm.md +61 -0
  19. package/registry/latest.json +253 -0
  20. package/registry/policy.yaml +14 -0
  21. package/registry/profiles/base/.gitkeep +0 -0
  22. package/registry/profiles/base/profile.yaml +19 -0
  23. package/registry/profiles/data-analytics/.gitkeep +0 -0
  24. package/registry/profiles/data-analytics/profile.yaml +24 -0
  25. package/registry/profiles/fullstack-engineer/.gitkeep +0 -0
  26. package/registry/profiles/fullstack-engineer/profile.yaml +38 -0
  27. package/registry/profiles/mobile/ios/.gitkeep +0 -0
  28. package/registry/profiles/mobile/profile.yaml +24 -0
  29. package/registry/profiles/security/profile.yaml +24 -0
  30. package/registry/skills/api-design/.gitkeep +0 -0
  31. package/registry/skills/api-design/SKILL.asdm.md +101 -0
  32. package/registry/skills/code-review/SKILL.asdm.md +83 -0
  33. package/registry/skills/data-pipeline/SKILL.asdm.md +95 -0
  34. package/registry/skills/frontend-design/SKILL.asdm.md +73 -0
  35. package/registry/skills/mobile-patterns/SKILL.asdm.md +102 -0
  36. package/registry/skills/pandas/.gitkeep +0 -0
  37. package/registry/skills/plan-protocol/SKILL.asdm.md +66 -0
  38. package/registry/skills/react-best-practices/.gitkeep +0 -0
  39. package/registry/skills/react-native/.gitkeep +0 -0
  40. package/registry/skills/sql/.gitkeep +0 -0
  41. package/registry/skills/swift-ui/.gitkeep +0 -0
  42. package/registry/skills/threat-modeling/SKILL.asdm.md +87 -0
  43. package/registry/v0.1.0.json +253 -0
  44. package/registry/v1.0.0.json +153 -0
  45. package/schemas/.gitkeep +0 -0
  46. package/schemas/agent.schema.json +82 -0
  47. package/schemas/command.schema.json +58 -0
  48. package/schemas/config.schema.json +29 -0
  49. package/schemas/lock.schema.json +65 -0
  50. package/schemas/manifest.schema.json +98 -0
  51. package/schemas/overlay.schema.json +72 -0
  52. package/schemas/profile.schema.json +64 -0
  53. package/schemas/skill.schema.json +64 -0
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: threat-modeling
3
+ type: skill
4
+ description: "Security threat modeling using the STRIDE framework for application and infrastructure"
5
+ version: 1.0.0
6
+ tags: [security, threat-modeling, stride, risk, architecture]
7
+ trigger: "When designing new features, reviewing security architecture, or assessing risk of system changes"
8
+
9
+ providers:
10
+ opencode:
11
+ location: skills/threat-modeling/
12
+ claude-code:
13
+ location: skills/threat-modeling/
14
+ copilot:
15
+ applyTo: "**/*"
16
+ ---
17
+
18
+ # Threat Modeling Skill
19
+
20
+ ## Purpose
21
+
22
+ Threat modeling is the practice of systematically identifying, classifying, and mitigating security risks before they are built into a system. It is most effective when applied at design time — retrofitting security is exponentially more expensive than designing it in.
23
+
24
+ ## STRIDE Framework
25
+
26
+ STRIDE categorizes threats by the property of a secure system they violate:
27
+
28
+ | Threat | Violated Property | Example |
29
+ |--------|-----------------|---------|
30
+ | **S**poofing | Authentication | Attacker impersonates a legitimate user |
31
+ | **T**ampering | Integrity | Attacker modifies data in transit or at rest |
32
+ | **R**epudiation | Non-repudiation | User denies performing an action; no audit trail |
33
+ | **I**nformation Disclosure | Confidentiality | Sensitive data exposed in error messages or logs |
34
+ | **D**enial of Service | Availability | Attacker exhausts resources, making the service unavailable |
35
+ | **E**levation of Privilege | Authorization | User gains access beyond their permission level |
36
+
37
+ ## Threat Modeling Process
38
+
39
+ ### Step 1: Define Scope
40
+ Identify the components, data flows, and trust boundaries in scope. Draw a Data Flow Diagram (DFD):
41
+ - **External entities**: Actors outside the system boundary (users, third-party services)
42
+ - **Processes**: Code that transforms data
43
+ - **Data stores**: Databases, caches, files, queues
44
+ - **Data flows**: How data moves between entities, processes, and stores
45
+ - **Trust boundaries**: Lines a threat actor must cross to reach sensitive components
46
+
47
+ ### Step 2: Identify Threats (STRIDE per Element)
48
+ For each element in the DFD, apply STRIDE systematically. Not every category applies to every element:
49
+ - External entities: primarily Spoofing, Repudiation
50
+ - Processes: all STRIDE categories
51
+ - Data stores: primarily Tampering, Information Disclosure, Denial of Service
52
+ - Data flows: primarily Tampering, Information Disclosure, Denial of Service
53
+
54
+ ### Step 3: Assess Risk
55
+ For each identified threat, score using DREAD or CVSS v3.1:
56
+ - **Damage potential**: How severe is the impact?
57
+ - **Reproducibility**: How reliably can the attack be repeated?
58
+ - **Exploitability**: What skill level is required?
59
+ - **Affected users**: How many users are impacted?
60
+ - **Discoverability**: How easy is the attack to discover?
61
+
62
+ ### Step 4: Define Mitigations
63
+ For each threat above the accepted risk threshold, define a specific technical control:
64
+
65
+ | Threat Category | Common Mitigations |
66
+ |----------------|-------------------|
67
+ | Spoofing | Strong authentication (MFA, passkeys), certificate pinning |
68
+ | Tampering | HMAC signatures, TLS mutual auth, database row-level security |
69
+ | Repudiation | Immutable audit logs, digital signatures, structured event logging |
70
+ | Information Disclosure | Encryption at rest and in transit, field-level masking, minimal logging |
71
+ | Denial of Service | Rate limiting, circuit breakers, autoscaling, WAF rules |
72
+ | Elevation of Privilege | Principle of least privilege, RBAC/ABAC, input validation |
73
+
74
+ ### Step 5: Document and Track
75
+ Produce a threat model document with:
76
+ 1. DFD diagram with trust boundaries annotated
77
+ 2. Threat inventory: ID, STRIDE category, affected element, risk score
78
+ 3. Mitigation plan: control, owner, target resolution date
79
+ 4. Accepted risks: threats below threshold with explicit justification
80
+
81
+ ## Rules
82
+
83
+ - Threat model BEFORE implementation — design-time fixes cost 30× less than production fixes
84
+ - NEVER accept a risk without explicit sign-off from a security lead
85
+ - Update the threat model when the architecture changes — stale models create false confidence
86
+ - Prioritize by exploitability × impact; theoretical low-exploitability threats are low priority
87
+ - Document the trust boundaries explicitly — most security failures occur at boundary crossings
@@ -0,0 +1,253 @@
1
+ {
2
+ "$schema": "https://asdm.dev/schemas/manifest.schema.json",
3
+ "version": "0.1.0",
4
+ "policy": {
5
+ "locked_fields": [
6
+ "telemetry",
7
+ "install_hooks",
8
+ "auto_verify"
9
+ ],
10
+ "telemetry": true,
11
+ "auto_verify": true,
12
+ "install_hooks": true,
13
+ "allowed_profiles": [
14
+ "base",
15
+ "fullstack-engineer",
16
+ "data-analytics",
17
+ "mobile",
18
+ "security"
19
+ ],
20
+ "allowed_providers": [
21
+ "opencode",
22
+ "claude-code",
23
+ "copilot"
24
+ ],
25
+ "min_cli_version": "0.1.0"
26
+ },
27
+ "profiles": {
28
+ "base": {
29
+ "agents": [
30
+ "code-reviewer",
31
+ "documentation-writer"
32
+ ],
33
+ "skills": [
34
+ "plan-protocol",
35
+ "code-review"
36
+ ],
37
+ "commands": [
38
+ "check-file",
39
+ "summarize"
40
+ ],
41
+ "providers": [
42
+ "opencode",
43
+ "claude-code",
44
+ "copilot"
45
+ ]
46
+ },
47
+ "data-analytics": {
48
+ "extends": [
49
+ "base"
50
+ ],
51
+ "agents": [
52
+ "code-reviewer",
53
+ "data-analyst",
54
+ "documentation-writer"
55
+ ],
56
+ "skills": [
57
+ "plan-protocol",
58
+ "code-review",
59
+ "data-pipeline"
60
+ ],
61
+ "commands": [
62
+ "check-file",
63
+ "summarize",
64
+ "analyze-schema"
65
+ ],
66
+ "providers": [
67
+ "opencode",
68
+ "claude-code",
69
+ "copilot"
70
+ ]
71
+ },
72
+ "fullstack-engineer": {
73
+ "extends": [
74
+ "base"
75
+ ],
76
+ "agents": [
77
+ "code-reviewer",
78
+ "documentation-writer",
79
+ "architect",
80
+ "test-engineer"
81
+ ],
82
+ "skills": [
83
+ "plan-protocol",
84
+ "code-review",
85
+ "frontend-design",
86
+ "api-design"
87
+ ],
88
+ "commands": [
89
+ "check-file",
90
+ "summarize",
91
+ "generate-types",
92
+ "scaffold-component"
93
+ ],
94
+ "providers": [
95
+ "opencode",
96
+ "claude-code",
97
+ "copilot"
98
+ ]
99
+ },
100
+ "mobile": {
101
+ "extends": [
102
+ "base"
103
+ ],
104
+ "agents": [
105
+ "code-reviewer",
106
+ "documentation-writer",
107
+ "mobile-engineer"
108
+ ],
109
+ "skills": [
110
+ "plan-protocol",
111
+ "code-review",
112
+ "mobile-patterns"
113
+ ],
114
+ "commands": [
115
+ "check-file",
116
+ "summarize",
117
+ "scaffold-component"
118
+ ],
119
+ "providers": [
120
+ "opencode",
121
+ "claude-code",
122
+ "copilot"
123
+ ]
124
+ },
125
+ "security": {
126
+ "extends": [
127
+ "base"
128
+ ],
129
+ "agents": [
130
+ "code-reviewer",
131
+ "security-auditor",
132
+ "documentation-writer"
133
+ ],
134
+ "skills": [
135
+ "plan-protocol",
136
+ "code-review",
137
+ "threat-modeling"
138
+ ],
139
+ "commands": [
140
+ "check-file",
141
+ "summarize",
142
+ "audit-deps"
143
+ ],
144
+ "providers": [
145
+ "opencode",
146
+ "claude-code",
147
+ "copilot"
148
+ ]
149
+ }
150
+ },
151
+ "assets": {
152
+ "agents/architect.asdm.md": {
153
+ "sha256": "cac0b010fd350f9d23bfbb090327dc2e8e971be9daafa764269619224c5ca742",
154
+ "size": 3011,
155
+ "version": "1.0.0"
156
+ },
157
+ "agents/code-reviewer.asdm.md": {
158
+ "sha256": "682c73710a84ad8c40e3d8548f82811390ce3db32c6f136116afcde7f87fc75d",
159
+ "size": 2911,
160
+ "version": "1.0.0"
161
+ },
162
+ "agents/data-analyst.asdm.md": {
163
+ "sha256": "bb0ce105b9dd19eaef3be5d6b76f5ad273b4b95057d3bb2c998acbaf3dfc7589",
164
+ "size": 2865,
165
+ "version": "1.0.0"
166
+ },
167
+ "agents/documentation-writer.asdm.md": {
168
+ "sha256": "05f22780898bdc7dc9e842caab967241b99e02ca7d43d30b09ca8d19fc85d63a",
169
+ "size": 2788,
170
+ "version": "1.0.0"
171
+ },
172
+ "agents/mobile-engineer.asdm.md": {
173
+ "sha256": "ab51f952dcc8ce72cf3f48359e11c30fc7a3f5b32b534e56b04ee47cd382c3bd",
174
+ "size": 2903,
175
+ "version": "1.0.0"
176
+ },
177
+ "agents/security-auditor.asdm.md": {
178
+ "sha256": "8285378a7b30009a02f537d9fc882344c50444c1c1fe1b0ff35b8e49e475b2eb",
179
+ "size": 3167,
180
+ "version": "1.0.0"
181
+ },
182
+ "agents/test-engineer.asdm.md": {
183
+ "sha256": "e23266b82c0e3ccb96d613167c3c27d88651ff159fcb8e9b8eaf34b125681278",
184
+ "size": 2811,
185
+ "version": "1.0.0"
186
+ },
187
+ "skills/api-design/SKILL.asdm.md": {
188
+ "sha256": "637fc8014c22ddd8fa9122a44eb68cef70ffecfed724e8535b8d7d54091c579c",
189
+ "size": 3506,
190
+ "version": "1.0.0"
191
+ },
192
+ "skills/code-review/SKILL.asdm.md": {
193
+ "sha256": "de2011667b7f9e5c07cef878d43e85bb2d9fa2109c4ba64e161b6038012fab20",
194
+ "size": 3112,
195
+ "version": "1.0.0"
196
+ },
197
+ "skills/data-pipeline/SKILL.asdm.md": {
198
+ "sha256": "35e45153c4eafc4f1654b46865a226509634b3659365b03e19de482d10233699",
199
+ "size": 3686,
200
+ "version": "1.0.0"
201
+ },
202
+ "skills/frontend-design/SKILL.asdm.md": {
203
+ "sha256": "9cdddedd6f2b6caa8bafb8f8fa9864b6473c89170c4feedd05aaa9f1a30a8d3f",
204
+ "size": 3267,
205
+ "version": "1.0.0"
206
+ },
207
+ "skills/mobile-patterns/SKILL.asdm.md": {
208
+ "sha256": "9f336da4b1979cbdadad95012a4347f0e9830597f60e98e9084d6a0d07459acd",
209
+ "size": 3561,
210
+ "version": "1.0.0"
211
+ },
212
+ "skills/plan-protocol/SKILL.asdm.md": {
213
+ "sha256": "c0226a04e91caedc6dd9b51946508b9c05c29b51aa3402217c176161c0e7a16c",
214
+ "size": 2781,
215
+ "version": "1.0.0"
216
+ },
217
+ "skills/threat-modeling/SKILL.asdm.md": {
218
+ "sha256": "255ec1cc1773315b994bff8f09e647750210bc34f233c5ff83053fb6568f67e5",
219
+ "size": 4256,
220
+ "version": "1.0.0"
221
+ },
222
+ "commands/analyze-schema.asdm.md": {
223
+ "sha256": "2c855b9b02257cecc71c5a03faa05da52e215df148aa141c9258db8e0d2b6174",
224
+ "size": 2538,
225
+ "version": "1.0.0"
226
+ },
227
+ "commands/audit-deps.asdm.md": {
228
+ "sha256": "b5d54e07d9596b996090aae8e83476fb2d53b62301dd3feef82facd3d08f7150",
229
+ "size": 2781,
230
+ "version": "1.0.0"
231
+ },
232
+ "commands/check-file.asdm.md": {
233
+ "sha256": "3090793fb1eb3484626f7a4c9569df87ff486586e2e3f4046c15749003a4af73",
234
+ "size": 1700,
235
+ "version": "1.0.0"
236
+ },
237
+ "commands/generate-types.asdm.md": {
238
+ "sha256": "d1b1401c495410ee68aedc055700cfb11794228d8f363bdf6463b75e58bdff20",
239
+ "size": 2259,
240
+ "version": "1.0.0"
241
+ },
242
+ "commands/scaffold-component.asdm.md": {
243
+ "sha256": "312cf07c16a44fe334037281213aed99d8410070acbfe35e6ae0968ec8a5263f",
244
+ "size": 2327,
245
+ "version": "1.0.0"
246
+ },
247
+ "commands/summarize.asdm.md": {
248
+ "sha256": "0f52ab9a25f6f802aa2a9025d8a4e9a5825aa04ba94173884bb189566ad07ad0",
249
+ "size": 1919,
250
+ "version": "1.0.0"
251
+ }
252
+ }
253
+ }
@@ -0,0 +1,153 @@
1
+ {
2
+ "$schema": "https://asdm.dev/schemas/manifest.schema.json",
3
+ "version": "1.0.0",
4
+ "built_at": "2026-04-01T00:00:00Z",
5
+ "commit_sha": "0000000000000000000000000000000000000000",
6
+ "policy": {
7
+ "locked_fields": ["telemetry", "install_hooks", "auto_verify"],
8
+ "telemetry": true,
9
+ "auto_verify": true,
10
+ "install_hooks": true,
11
+ "allowed_profiles": ["base", "fullstack-engineer", "data-analytics", "mobile", "security"],
12
+ "allowed_providers": ["opencode", "claude-code", "copilot"],
13
+ "min_cli_version": "1.0.0"
14
+ },
15
+ "profiles": {
16
+ "base": {
17
+ "extends": [],
18
+ "agents": ["code-reviewer", "documentation-writer"],
19
+ "skills": ["plan-protocol", "code-review"],
20
+ "commands": ["check-file", "summarize"]
21
+ },
22
+ "fullstack-engineer": {
23
+ "extends": ["base"],
24
+ "agents": ["code-reviewer", "documentation-writer", "architect", "test-engineer"],
25
+ "skills": ["plan-protocol", "code-review", "frontend-design", "api-design"],
26
+ "commands": ["check-file", "summarize", "generate-types", "scaffold-component"],
27
+ "providers": ["opencode", "claude-code", "copilot"]
28
+ },
29
+ "data-analytics": {
30
+ "extends": ["base"],
31
+ "agents": ["code-reviewer", "data-analyst", "documentation-writer"],
32
+ "skills": ["plan-protocol", "code-review", "data-pipeline"],
33
+ "commands": ["check-file", "summarize", "analyze-schema"],
34
+ "providers": ["opencode", "claude-code", "copilot"]
35
+ },
36
+ "mobile": {
37
+ "extends": ["base"],
38
+ "agents": ["code-reviewer", "documentation-writer", "mobile-engineer"],
39
+ "skills": ["plan-protocol", "code-review", "mobile-patterns"],
40
+ "commands": ["check-file", "summarize", "scaffold-component"],
41
+ "providers": ["opencode", "claude-code", "copilot"]
42
+ },
43
+ "security": {
44
+ "extends": ["base"],
45
+ "agents": ["code-reviewer", "security-auditor", "documentation-writer"],
46
+ "skills": ["plan-protocol", "code-review", "threat-modeling"],
47
+ "commands": ["check-file", "summarize", "audit-deps"],
48
+ "providers": ["opencode", "claude-code", "copilot"]
49
+ }
50
+ },
51
+ "assets": {
52
+ "agents/code-reviewer.asdm.md": {
53
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
54
+ "size": 0,
55
+ "version": "1.0.0"
56
+ },
57
+ "agents/documentation-writer.asdm.md": {
58
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
59
+ "size": 0,
60
+ "version": "1.0.0"
61
+ },
62
+ "agents/architect.asdm.md": {
63
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
64
+ "size": 0,
65
+ "version": "1.0.0"
66
+ },
67
+ "agents/test-engineer.asdm.md": {
68
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
69
+ "size": 0,
70
+ "version": "1.0.0"
71
+ },
72
+ "agents/data-analyst.asdm.md": {
73
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
74
+ "size": 0,
75
+ "version": "1.0.0"
76
+ },
77
+ "agents/mobile-engineer.asdm.md": {
78
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
79
+ "size": 0,
80
+ "version": "1.0.0"
81
+ },
82
+ "agents/security-auditor.asdm.md": {
83
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
84
+ "size": 0,
85
+ "version": "1.0.0"
86
+ },
87
+ "skills/plan-protocol/SKILL.asdm.md": {
88
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
89
+ "size": 0,
90
+ "version": "1.0.0"
91
+ },
92
+ "skills/code-review/SKILL.asdm.md": {
93
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
94
+ "size": 0,
95
+ "version": "1.0.0"
96
+ },
97
+ "skills/frontend-design/SKILL.asdm.md": {
98
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
99
+ "size": 0,
100
+ "version": "1.0.0"
101
+ },
102
+ "skills/api-design/SKILL.asdm.md": {
103
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
104
+ "size": 0,
105
+ "version": "1.0.0"
106
+ },
107
+ "skills/data-pipeline/SKILL.asdm.md": {
108
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
109
+ "size": 0,
110
+ "version": "1.0.0"
111
+ },
112
+ "skills/mobile-patterns/SKILL.asdm.md": {
113
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
114
+ "size": 0,
115
+ "version": "1.0.0"
116
+ },
117
+ "skills/threat-modeling/SKILL.asdm.md": {
118
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
119
+ "size": 0,
120
+ "version": "1.0.0"
121
+ },
122
+ "commands/check-file.asdm.md": {
123
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
124
+ "size": 0,
125
+ "version": "1.0.0"
126
+ },
127
+ "commands/summarize.asdm.md": {
128
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
129
+ "size": 0,
130
+ "version": "1.0.0"
131
+ },
132
+ "commands/generate-types.asdm.md": {
133
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
134
+ "size": 0,
135
+ "version": "1.0.0"
136
+ },
137
+ "commands/scaffold-component.asdm.md": {
138
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
139
+ "size": 0,
140
+ "version": "1.0.0"
141
+ },
142
+ "commands/analyze-schema.asdm.md": {
143
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
144
+ "size": 0,
145
+ "version": "1.0.0"
146
+ },
147
+ "commands/audit-deps.asdm.md": {
148
+ "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
149
+ "size": 0,
150
+ "version": "1.0.0"
151
+ }
152
+ }
153
+ }
File without changes
@@ -0,0 +1,82 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://asdm.dev/schemas/agent.schema.json",
4
+ "title": "ASDM Agent",
5
+ "description": "Schema for ASDM agent .asdm.md frontmatter",
6
+ "type": "object",
7
+ "required": ["name", "type", "description", "version"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "name": {
11
+ "type": "string",
12
+ "pattern": "^[a-z][a-z0-9-]*$",
13
+ "description": "Kebab-case agent identifier"
14
+ },
15
+ "type": {
16
+ "type": "string",
17
+ "const": "agent"
18
+ },
19
+ "description": {
20
+ "type": "string",
21
+ "minLength": 10,
22
+ "maxLength": 200
23
+ },
24
+ "version": {
25
+ "type": "string",
26
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
27
+ "description": "Semantic version"
28
+ },
29
+ "tags": {
30
+ "type": "array",
31
+ "items": { "type": "string" },
32
+ "uniqueItems": true
33
+ },
34
+ "providers": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "properties": {
38
+ "opencode": {
39
+ "type": "object",
40
+ "additionalProperties": true,
41
+ "properties": {
42
+ "model": { "type": "string" },
43
+ "permissions": {
44
+ "type": "array",
45
+ "items": { "type": "string" }
46
+ },
47
+ "tools": {
48
+ "type": "array",
49
+ "items": { "type": "string" }
50
+ }
51
+ }
52
+ },
53
+ "claude-code": {
54
+ "type": "object",
55
+ "additionalProperties": true,
56
+ "properties": {
57
+ "model": { "type": "string" },
58
+ "allowedTools": {
59
+ "type": "array",
60
+ "items": { "type": "string" }
61
+ }
62
+ }
63
+ },
64
+ "copilot": {
65
+ "type": "object",
66
+ "additionalProperties": true,
67
+ "properties": {
68
+ "on": { "type": "string" },
69
+ "safe-outputs": {
70
+ "type": "array",
71
+ "items": { "type": "string" }
72
+ },
73
+ "permissions": {
74
+ "type": "object",
75
+ "additionalProperties": { "type": "string" }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://asdm.dev/schemas/command.schema.json",
4
+ "title": "ASDM Command",
5
+ "description": "Schema for ASDM command .asdm.md frontmatter",
6
+ "type": "object",
7
+ "required": ["name", "type", "description", "version"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "name": {
11
+ "type": "string",
12
+ "pattern": "^[a-z][a-z0-9-]*$"
13
+ },
14
+ "type": {
15
+ "type": "string",
16
+ "const": "command"
17
+ },
18
+ "description": {
19
+ "type": "string",
20
+ "minLength": 10,
21
+ "maxLength": 200
22
+ },
23
+ "version": {
24
+ "type": "string",
25
+ "pattern": "^\\d+\\.\\d+\\.\\d+$"
26
+ },
27
+ "providers": {
28
+ "type": "object",
29
+ "additionalProperties": false,
30
+ "properties": {
31
+ "opencode": {
32
+ "type": "object",
33
+ "additionalProperties": true,
34
+ "properties": {
35
+ "slash_command": { "type": "string" },
36
+ "agent": { "type": "string" }
37
+ }
38
+ },
39
+ "claude-code": {
40
+ "type": "object",
41
+ "additionalProperties": true,
42
+ "properties": {
43
+ "slash_command": { "type": "string" },
44
+ "agent": { "type": "string" }
45
+ }
46
+ },
47
+ "copilot": {
48
+ "type": "object",
49
+ "additionalProperties": true,
50
+ "properties": {
51
+ "slash_command": { "type": "string" },
52
+ "agent": { "type": "string" }
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://asdm.dev/schemas/config.schema.json",
4
+ "title": "ASDM Project Config",
5
+ "description": "Schema for .asdm.json (committed project config)",
6
+ "type": "object",
7
+ "required": ["registry", "profile"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "$schema": { "type": "string" },
11
+ "registry": {
12
+ "type": "string",
13
+ "pattern": "^github://[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+$",
14
+ "description": "Registry URL in github://{org}/{repo} format"
15
+ },
16
+ "profile": {
17
+ "type": "string",
18
+ "pattern": "^[a-z][a-z0-9-]*$"
19
+ },
20
+ "providers": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "string",
24
+ "enum": ["opencode", "claude-code", "copilot"]
25
+ },
26
+ "uniqueItems": true
27
+ }
28
+ }
29
+ }