@aragon-agent/cli 0.6.29 → 0.6.32

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 (123) hide show
  1. package/CHANGELOG.md +2223 -2103
  2. package/README.md +2957 -2759
  3. package/dist/agent/controller.d.ts +46 -0
  4. package/dist/agent/controller.js +175 -7
  5. package/dist/agent/job-notices.d.ts +143 -0
  6. package/dist/agent/job-notices.js +182 -0
  7. package/dist/agent/project-guidance-prompt.js +20 -20
  8. package/dist/agent/reducer.d.ts +21 -1
  9. package/dist/agent/reducer.js +7 -0
  10. package/dist/agent/system-prompt.d.ts +12 -0
  11. package/dist/agent/system-prompt.js +2 -0
  12. package/dist/cli.js +399 -62
  13. package/dist/commands/builtins.js +27 -8
  14. package/dist/commands/perf.d.ts +79 -2
  15. package/dist/commands/perf.js +51 -3
  16. package/dist/commands/registry.d.ts +6 -0
  17. package/dist/config/cli-commands.d.ts +27 -0
  18. package/dist/config/cli-commands.js +54 -1
  19. package/dist/config/env.js +42 -0
  20. package/dist/config/load.d.ts +3 -1
  21. package/dist/config/load.js +61 -1
  22. package/dist/config/schema.d.ts +100 -0
  23. package/dist/config/schema.js +43 -0
  24. package/dist/config/store.js +14 -1
  25. package/dist/config/ui-state.d.ts +9 -0
  26. package/dist/config/ui-state.js +9 -0
  27. package/dist/exec/events.d.ts +29 -3
  28. package/dist/exec/events.js +3 -12
  29. package/dist/exec/runner.d.ts +24 -0
  30. package/dist/exec/runner.js +79 -0
  31. package/dist/input/cursor-report.d.ts +61 -0
  32. package/dist/input/cursor-report.js +97 -0
  33. package/dist/input/stdin-filter.d.ts +22 -0
  34. package/dist/input/stdin-filter.js +48 -3
  35. package/dist/proc/limits.d.ts +76 -2
  36. package/dist/proc/limits.js +83 -2
  37. package/dist/proc/log-mirror.d.ts +59 -0
  38. package/dist/proc/log-mirror.js +203 -0
  39. package/dist/proc/log-ring.d.ts +22 -0
  40. package/dist/proc/log-ring.js +20 -1
  41. package/dist/proc/notices.d.ts +57 -0
  42. package/dist/proc/notices.js +101 -0
  43. package/dist/proc/progress.d.ts +40 -0
  44. package/dist/proc/progress.js +135 -0
  45. package/dist/proc/prompt.d.ts +24 -2
  46. package/dist/proc/prompt.js +51 -2
  47. package/dist/proc/supervisor.d.ts +35 -2
  48. package/dist/proc/supervisor.js +142 -43
  49. package/dist/proc/types.d.ts +89 -1
  50. package/dist/proc/wait.d.ts +57 -0
  51. package/dist/proc/wait.js +133 -0
  52. package/dist/session/persist.js +3 -1
  53. package/dist/session/validate-session.js +17 -0
  54. package/dist/tools/bash-tool.d.ts +12 -1
  55. package/dist/tools/bash-tool.js +100 -13
  56. package/dist/tools/index.d.ts +26 -2
  57. package/dist/tools/index.js +43 -2
  58. package/dist/tools/job-tools.d.ts +54 -0
  59. package/dist/tools/job-tools.js +329 -0
  60. package/dist/tools/proc-tools.d.ts +1 -1
  61. package/dist/tools/proc-tools.js +49 -17
  62. package/dist/ui/ActivityLine.js +7 -0
  63. package/dist/ui/App.d.ts +11 -1
  64. package/dist/ui/App.js +181 -63
  65. package/dist/ui/ScrollbackShell.d.ts +54 -0
  66. package/dist/ui/ScrollbackShell.js +15 -0
  67. package/dist/ui/StatusBar.d.ts +5 -0
  68. package/dist/ui/StatusBar.js +1 -0
  69. package/dist/ui/Transcript.d.ts +14 -0
  70. package/dist/ui/Transcript.js +14 -2
  71. package/dist/ui/entries/ServiceCard.d.ts +17 -1
  72. package/dist/ui/entries/ServiceCard.js +39 -4
  73. package/dist/ui/frame-differ.d.ts +12 -0
  74. package/dist/ui/layout/status-layout.d.ts +13 -1
  75. package/dist/ui/layout/status-layout.js +10 -0
  76. package/dist/ui/layout/virtual-window.js +14 -1
  77. package/dist/ui/overlays/HelpOverlay.d.ts +1 -1
  78. package/dist/ui/overlays/HelpOverlay.js +21 -3
  79. package/dist/ui/run-status-row.d.ts +12 -0
  80. package/dist/ui/screen.d.ts +29 -0
  81. package/dist/ui/screen.js +40 -0
  82. package/dist/ui/scrollback/LiveTail.d.ts +64 -0
  83. package/dist/ui/scrollback/LiveTail.js +27 -0
  84. package/dist/ui/scrollback/band.d.ts +105 -0
  85. package/dist/ui/scrollback/band.js +109 -0
  86. package/dist/ui/scrollback/budget.d.ts +72 -0
  87. package/dist/ui/scrollback/budget.js +81 -0
  88. package/dist/ui/scrollback/canvas.d.ts +99 -0
  89. package/dist/ui/scrollback/canvas.js +113 -0
  90. package/dist/ui/scrollback/cursor-probe.d.ts +71 -0
  91. package/dist/ui/scrollback/cursor-probe.js +133 -0
  92. package/dist/ui/scrollback/drain.d.ts +32 -0
  93. package/dist/ui/scrollback/drain.js +64 -0
  94. package/dist/ui/scrollback/exit-summary.d.ts +23 -0
  95. package/dist/ui/scrollback/exit-summary.js +25 -0
  96. package/dist/ui/scrollback/limits.d.ts +74 -0
  97. package/dist/ui/scrollback/limits.js +74 -0
  98. package/dist/ui/scrollback/live-preview.d.ts +26 -0
  99. package/dist/ui/scrollback/live-preview.js +106 -0
  100. package/dist/ui/scrollback/renderer.d.ts +38 -0
  101. package/dist/ui/scrollback/renderer.js +158 -0
  102. package/dist/ui/scrollback/scrollback-writer.d.ts +162 -0
  103. package/dist/ui/scrollback/scrollback-writer.js +549 -0
  104. package/dist/ui/scrollback/settled-boundary.d.ts +42 -0
  105. package/dist/ui/scrollback/settled-boundary.js +106 -0
  106. package/dist/ui/scrollback/use-scrollback-view.d.ts +103 -0
  107. package/dist/ui/scrollback/use-scrollback-view.js +294 -0
  108. package/dist/ui/scrollback/writer-shapes.d.ts +127 -0
  109. package/dist/ui/scrollback/writer-shapes.js +159 -0
  110. package/dist/ui/stdout-frame-writer.js +12 -2
  111. package/dist/ui/terminal-plan.d.ts +52 -0
  112. package/dist/ui/terminal-plan.js +49 -0
  113. package/dist/ui/transcript-text.d.ts +11 -0
  114. package/dist/ui/transcript-text.js +21 -7
  115. package/dist/ui/use-startup-notices.d.ts +12 -1
  116. package/dist/ui/use-startup-notices.js +28 -2
  117. package/package.json +3 -3
  118. package/skills/project-indexer/SKILL.md +163 -163
  119. package/skills/project-indexer/templates/cleancode-overrides.md +46 -46
  120. package/skills/project-indexer/templates/cleancode-template.md +94 -94
  121. package/skills/project-indexer/templates/config-template.md +69 -69
  122. package/skills/project-indexer/templates/index-template.md +129 -129
  123. package/skills/skill-creator/SKILL.md +96 -96
@@ -1,69 +1,69 @@
1
- # Index Configuration
2
-
3
- > Configuration for project-indexer. Edit this file to customize index generation.
4
-
5
- ## Excluded Directories
6
-
7
- Directories to skip during indexing:
8
-
9
- - node_modules
10
- - .git
11
- - dist
12
- - build
13
- - __pycache__
14
- - .venv
15
- - venv
16
- - vendor
17
- - coverage
18
- - .next
19
- - .nuxt
20
- - .cache
21
- - target
22
- - bin
23
- - obj
24
- - .idea
25
- - .vscode
26
-
27
- ## Priority Directories
28
-
29
- Directories to index in detail (leave empty for auto-detection):
30
-
31
- - src/
32
- - lib/
33
- - app/
34
- - core/
35
-
36
- ## Tech Stack
37
-
38
- Detected or specified technology stack:
39
-
40
- - **Frontend:** {React | Vue | Angular | Svelte | Next.js | Nuxt | etc.}
41
- - **Backend:** {Express | FastAPI | Django | Rails | Spring | etc.}
42
- - **Language:** {TypeScript | JavaScript | Python | Go | etc.}
43
-
44
- ## Index Settings
45
-
46
- - **Generated:** {YYYY-MM-DD HH:MM:SS}
47
- - **Project Root:** {/path/to/project}
48
- - **Index Version:** 1.0
49
- - **Total Files Indexed:** {N}
50
- - **Total Symbols Extracted:** {N}
51
-
52
- ## Clean Code Settings
53
-
54
- - Enabled: {Yes | No}
55
- - Preset: {strict | relaxed | custom | disabled}
56
- - MAX_FILE_LINES: 1000
57
- - MAX_METHOD_LINES: 60
58
- - MAX_FUNCTION_PARAMS: 5
59
- - MAX_CYCLOMATIC: 10
60
- - MAX_LINE_LENGTH: 100
61
- - MAX_NESTING_DEPTH: 4
62
-
63
- ## Regeneration Notes
64
-
65
- Notes for future regeneration:
66
-
67
- - {Any special considerations}
68
- - {Files that need manual review}
69
- - {Known limitations}
1
+ # Index Configuration
2
+
3
+ > Configuration for project-indexer. Edit this file to customize index generation.
4
+
5
+ ## Excluded Directories
6
+
7
+ Directories to skip during indexing:
8
+
9
+ - node_modules
10
+ - .git
11
+ - dist
12
+ - build
13
+ - __pycache__
14
+ - .venv
15
+ - venv
16
+ - vendor
17
+ - coverage
18
+ - .next
19
+ - .nuxt
20
+ - .cache
21
+ - target
22
+ - bin
23
+ - obj
24
+ - .idea
25
+ - .vscode
26
+
27
+ ## Priority Directories
28
+
29
+ Directories to index in detail (leave empty for auto-detection):
30
+
31
+ - src/
32
+ - lib/
33
+ - app/
34
+ - core/
35
+
36
+ ## Tech Stack
37
+
38
+ Detected or specified technology stack:
39
+
40
+ - **Frontend:** {React | Vue | Angular | Svelte | Next.js | Nuxt | etc.}
41
+ - **Backend:** {Express | FastAPI | Django | Rails | Spring | etc.}
42
+ - **Language:** {TypeScript | JavaScript | Python | Go | etc.}
43
+
44
+ ## Index Settings
45
+
46
+ - **Generated:** {YYYY-MM-DD HH:MM:SS}
47
+ - **Project Root:** {/path/to/project}
48
+ - **Index Version:** 1.0
49
+ - **Total Files Indexed:** {N}
50
+ - **Total Symbols Extracted:** {N}
51
+
52
+ ## Clean Code Settings
53
+
54
+ - Enabled: {Yes | No}
55
+ - Preset: {strict | relaxed | custom | disabled}
56
+ - MAX_FILE_LINES: 1000
57
+ - MAX_METHOD_LINES: 60
58
+ - MAX_FUNCTION_PARAMS: 5
59
+ - MAX_CYCLOMATIC: 10
60
+ - MAX_LINE_LENGTH: 100
61
+ - MAX_NESTING_DEPTH: 4
62
+
63
+ ## Regeneration Notes
64
+
65
+ Notes for future regeneration:
66
+
67
+ - {Any special considerations}
68
+ - {Files that need manual review}
69
+ - {Known limitations}
@@ -1,129 +1,129 @@
1
- # Project Index: {project-name}
2
-
3
- > Auto-generated by project-indexer | Last updated: {YYYY-MM-DD}
4
-
5
- ## Project Overview
6
-
7
- - **Type:** {Frontend | Backend | Fullstack | Library | CLI | Monorepo}
8
- - **Languages:** {TypeScript (70%), Python (30%)}
9
- - **Frameworks:** {Next.js, FastAPI, etc.}
10
- - **Entry Points:** `{src/index.ts}`, `{api/main.py}`
11
-
12
- ---
13
-
14
- ## Feature Map
15
-
16
- ### {Feature Name} (`{path}/`)
17
-
18
- Entry: `{entry-file}`
19
-
20
- {One-line description of this feature area}
21
-
22
- **Key exports:**
23
- - `{functionName}({params}): {returnType}` - {description}
24
- - `{ClassName}` - {description}
25
- - `{CONSTANT_NAME}` - {description}
26
-
27
- ---
28
-
29
- ### Example: Authentication (`src/auth/`)
30
-
31
- Entry: `src/auth/index.ts`
32
-
33
- User authentication, session management, and authorization logic.
34
-
35
- **Key exports:**
36
- - `login(credentials: LoginInput): Promise<User>` - Authenticate user with email/password
37
- - `logout(): void` - Clear session and revoke tokens
38
- - `useAuth(): AuthContext` - React hook for accessing auth state
39
- - `withAuth(Component): Component` - HOC for protected routes
40
- - `AuthProvider` - Context provider for auth state
41
-
42
- ---
43
-
44
- ### Example: API Layer (`src/api/`)
45
-
46
- Entry: `src/api/client.ts`
47
-
48
- REST API client with error handling, request interceptors, and response caching.
49
-
50
- **Key exports:**
51
- - `apiClient` - Pre-configured axios instance
52
- - `useQuery<T>(endpoint: string): SWRResponse<T>` - Data fetching hook with caching
53
- - `useMutation<T>(endpoint: string): MutationResult<T>` - Data mutation hook
54
- - `ApiError` - Custom error class for API errors
55
-
56
- ---
57
-
58
- ## Module Dependencies
59
-
60
- ```
61
- {module-a} → {module-b} ({relationship description})
62
- ```
63
-
64
- Example:
65
- ```
66
- auth → api (uses apiClient for authentication requests)
67
- pages → auth, components (imports hooks and UI components)
68
- api → (standalone, no internal dependencies)
69
- components → utils (uses helper functions)
70
- hooks → api, auth (combines data fetching with auth state)
71
- ```
72
-
73
- ---
74
-
75
- ## File Index
76
-
77
- ### {directory}/
78
-
79
- | File | Description |
80
- |------|-------------|
81
- | {filename.ext} | {One-line description} |
82
-
83
- ---
84
-
85
- ### Example: src/auth/
86
-
87
- | File | Description |
88
- |------|-------------|
89
- | index.ts | Module entry point, re-exports public API |
90
- | login.ts | Login logic, credential validation, token handling |
91
- | logout.ts | Logout logic, session cleanup, token revocation |
92
- | session.ts | Session storage, refresh token management |
93
- | hooks.ts | React hooks: useAuth, useUser, usePermissions |
94
- | context.tsx | AuthContext and AuthProvider implementation |
95
- | types.ts | TypeScript types for auth entities |
96
- | constants.ts | Auth-related constants and configuration |
97
-
98
- ### Example: src/api/
99
-
100
- | File | Description |
101
- |------|-------------|
102
- | client.ts | Axios instance with interceptors and base config |
103
- | endpoints.ts | API endpoint path constants |
104
- | types.ts | Request/response type definitions |
105
- | errors.ts | Custom error classes and error handling utilities |
106
- | hooks.ts | Data fetching hooks: useQuery, useMutation |
107
- | cache.ts | Response caching configuration |
108
-
109
- ### Example: src/components/
110
-
111
- | File | Description |
112
- |------|-------------|
113
- | Button.tsx | Reusable button with variants (primary, secondary, ghost) |
114
- | Modal.tsx | Dialog component with portal and focus trap |
115
- | Toast.tsx | Notification toast with auto-dismiss |
116
- | Spinner.tsx | Loading spinner component |
117
- | Form/index.tsx | Form wrapper with validation context |
118
- | Form/Input.tsx | Text input with label and error display |
119
- | Form/Select.tsx | Dropdown select component |
120
- | Form/Checkbox.tsx | Checkbox with label |
121
- | Layout/Header.tsx | App header with navigation |
122
- | Layout/Sidebar.tsx | Collapsible sidebar navigation |
123
- | Layout/Footer.tsx | App footer |
124
-
125
- ---
126
-
127
- ## Notes
128
-
129
- {Any additional notes about the project structure, conventions, or important information}
1
+ # Project Index: {project-name}
2
+
3
+ > Auto-generated by project-indexer | Last updated: {YYYY-MM-DD}
4
+
5
+ ## Project Overview
6
+
7
+ - **Type:** {Frontend | Backend | Fullstack | Library | CLI | Monorepo}
8
+ - **Languages:** {TypeScript (70%), Python (30%)}
9
+ - **Frameworks:** {Next.js, FastAPI, etc.}
10
+ - **Entry Points:** `{src/index.ts}`, `{api/main.py}`
11
+
12
+ ---
13
+
14
+ ## Feature Map
15
+
16
+ ### {Feature Name} (`{path}/`)
17
+
18
+ Entry: `{entry-file}`
19
+
20
+ {One-line description of this feature area}
21
+
22
+ **Key exports:**
23
+ - `{functionName}({params}): {returnType}` - {description}
24
+ - `{ClassName}` - {description}
25
+ - `{CONSTANT_NAME}` - {description}
26
+
27
+ ---
28
+
29
+ ### Example: Authentication (`src/auth/`)
30
+
31
+ Entry: `src/auth/index.ts`
32
+
33
+ User authentication, session management, and authorization logic.
34
+
35
+ **Key exports:**
36
+ - `login(credentials: LoginInput): Promise<User>` - Authenticate user with email/password
37
+ - `logout(): void` - Clear session and revoke tokens
38
+ - `useAuth(): AuthContext` - React hook for accessing auth state
39
+ - `withAuth(Component): Component` - HOC for protected routes
40
+ - `AuthProvider` - Context provider for auth state
41
+
42
+ ---
43
+
44
+ ### Example: API Layer (`src/api/`)
45
+
46
+ Entry: `src/api/client.ts`
47
+
48
+ REST API client with error handling, request interceptors, and response caching.
49
+
50
+ **Key exports:**
51
+ - `apiClient` - Pre-configured axios instance
52
+ - `useQuery<T>(endpoint: string): SWRResponse<T>` - Data fetching hook with caching
53
+ - `useMutation<T>(endpoint: string): MutationResult<T>` - Data mutation hook
54
+ - `ApiError` - Custom error class for API errors
55
+
56
+ ---
57
+
58
+ ## Module Dependencies
59
+
60
+ ```
61
+ {module-a} → {module-b} ({relationship description})
62
+ ```
63
+
64
+ Example:
65
+ ```
66
+ auth → api (uses apiClient for authentication requests)
67
+ pages → auth, components (imports hooks and UI components)
68
+ api → (standalone, no internal dependencies)
69
+ components → utils (uses helper functions)
70
+ hooks → api, auth (combines data fetching with auth state)
71
+ ```
72
+
73
+ ---
74
+
75
+ ## File Index
76
+
77
+ ### {directory}/
78
+
79
+ | File | Description |
80
+ |------|-------------|
81
+ | {filename.ext} | {One-line description} |
82
+
83
+ ---
84
+
85
+ ### Example: src/auth/
86
+
87
+ | File | Description |
88
+ |------|-------------|
89
+ | index.ts | Module entry point, re-exports public API |
90
+ | login.ts | Login logic, credential validation, token handling |
91
+ | logout.ts | Logout logic, session cleanup, token revocation |
92
+ | session.ts | Session storage, refresh token management |
93
+ | hooks.ts | React hooks: useAuth, useUser, usePermissions |
94
+ | context.tsx | AuthContext and AuthProvider implementation |
95
+ | types.ts | TypeScript types for auth entities |
96
+ | constants.ts | Auth-related constants and configuration |
97
+
98
+ ### Example: src/api/
99
+
100
+ | File | Description |
101
+ |------|-------------|
102
+ | client.ts | Axios instance with interceptors and base config |
103
+ | endpoints.ts | API endpoint path constants |
104
+ | types.ts | Request/response type definitions |
105
+ | errors.ts | Custom error classes and error handling utilities |
106
+ | hooks.ts | Data fetching hooks: useQuery, useMutation |
107
+ | cache.ts | Response caching configuration |
108
+
109
+ ### Example: src/components/
110
+
111
+ | File | Description |
112
+ |------|-------------|
113
+ | Button.tsx | Reusable button with variants (primary, secondary, ghost) |
114
+ | Modal.tsx | Dialog component with portal and focus trap |
115
+ | Toast.tsx | Notification toast with auto-dismiss |
116
+ | Spinner.tsx | Loading spinner component |
117
+ | Form/index.tsx | Form wrapper with validation context |
118
+ | Form/Input.tsx | Text input with label and error display |
119
+ | Form/Select.tsx | Dropdown select component |
120
+ | Form/Checkbox.tsx | Checkbox with label |
121
+ | Layout/Header.tsx | App header with navigation |
122
+ | Layout/Sidebar.tsx | Collapsible sidebar navigation |
123
+ | Layout/Footer.tsx | App footer |
124
+
125
+ ---
126
+
127
+ ## Notes
128
+
129
+ {Any additional notes about the project structure, conventions, or important information}
@@ -1,96 +1,96 @@
1
- ---
2
- name: skill-creator
3
- description: Author a new AragonAgent skill. Use when the user asks to save a procedure as a skill, or when you notice you have re-derived the same multi-step process twice in a session.
4
- version: 1.1.0
5
- license: MIT
6
- activation: auto
7
- keywords: [meta, authoring, skills]
8
- # Enforced as a per-turn tool ceiling. `edit_file` is here because revising an
9
- # existing skill is the single most common thing this skill is asked to do —
10
- # without it, "fix the description on my deploy skill" fails on the first edit.
11
- allowed-tools:
12
- - read_file
13
- - write_file
14
- - edit_file
15
- - list_dir
16
- - skill_create
17
- ---
18
-
19
- # Skill Creator
20
-
21
- Write a skill that another model instance will actually reach for at the right
22
- moment. Most bad skills are not badly written; they are badly *described* and
23
- badly *scoped*.
24
-
25
- ## When to use
26
-
27
- - The user says "remember how to do this", "save this as a skill", or similar.
28
- - You have worked out a non-obvious, repeatable procedure and expect to need it
29
- again.
30
- - You notice you have rediscovered the same steps twice in one session.
31
-
32
- Do **not** create a skill for a one-off task, for something the tools already do
33
- directly, or for general knowledge the model already has.
34
-
35
- ## The one rule that matters most
36
-
37
- `description` is the only text a future model sees before deciding whether to
38
- load your skill. Everything else is invisible until then. So it must answer two
39
- questions in one or two sentences:
40
-
41
- 1. **What does this do?**
42
- 2. **When should it be used?** — in the words a user would actually type.
43
-
44
- Compare:
45
-
46
- - Weak: `Helps with PDFs.`
47
- - Strong: `Fill, flatten and validate AcroForm PDFs. Use when the task mentions
48
- PDF forms, field filling, or flattening a fillable PDF.`
49
-
50
- The second one will be picked up on a task that says "flatten this fillable
51
- invoice". The first one will not.
52
-
53
- ## Writing the body
54
-
55
- - Use imperative steps, not background prose. The reader is an agent about to
56
- act, not a student.
57
- - Keep the body under about 5 000 characters. It is loaded whole, every time the
58
- skill is used, so length is a recurring cost paid by every future run.
59
- - Push long reference material into `reference/*.md` and executable steps into
60
- `scripts/*`. Those are NOT preloaded — the model reads them on demand with
61
- `read_file` or runs them with `bash`. That is the whole point of the three
62
- levels, and it is what makes fifty installed skills cost a few thousand
63
- characters instead of hundreds of thousands.
64
- - Say what "done" looks like, and what to do when a step fails.
65
-
66
- ## Things that do not belong in a skill
67
-
68
- - Hostnames, IP addresses, repository URLs, absolute paths from your machine.
69
- - API keys, tokens, or anything else secret. Skills are plain files that get
70
- copied between machines and committed to repositories.
71
- - Anything that only made sense in the conversation you are in right now.
72
-
73
- ## Steps
74
-
75
- 1. Confirm the scope with the user in one sentence: what the skill does and when
76
- it fires.
77
- 2. Draft the `description` first and read it back critically. Would a model
78
- with only that line pick this skill for the task you have in mind?
79
- 3. Write the body as numbered imperative steps.
80
- 4. Split anything long or reusable into `reference/` and `scripts/` entries and
81
- pass them as `files`.
82
- 5. Call `skill_create` with `name`, `description`, `body`, and any `files`.
83
- 6. Immediately call `skill(name="<your-new-skill>")` to read back what you
84
- actually wrote. This catches truncated bodies and mangled frontmatter while
85
- you can still fix them.
86
-
87
- ## Naming
88
-
89
- Lowercase kebab-case, at most 64 characters: `pdf-forms`, `release-notes`,
90
- `db-migration-review`. The name becomes a slash command (`/pdf-forms`), so it
91
- should read as a thing, not as a sentence.
92
-
93
- If the name collides with a built-in command, the built-in wins and your skill
94
- is reachable as `/skill:<name>` instead — so avoid `help`, `model`, `settings`,
95
- `tools`, `clear`, `reset`, `cwd`, `save`, `resume`, `copy`, `theme`, `thinking`,
96
- `expand`, `skills`, `exit` and `quit`.
1
+ ---
2
+ name: skill-creator
3
+ description: Author a new AragonAgent skill. Use when the user asks to save a procedure as a skill, or when you notice you have re-derived the same multi-step process twice in a session.
4
+ version: 1.1.0
5
+ license: MIT
6
+ activation: auto
7
+ keywords: [meta, authoring, skills]
8
+ # Enforced as a per-turn tool ceiling. `edit_file` is here because revising an
9
+ # existing skill is the single most common thing this skill is asked to do —
10
+ # without it, "fix the description on my deploy skill" fails on the first edit.
11
+ allowed-tools:
12
+ - read_file
13
+ - write_file
14
+ - edit_file
15
+ - list_dir
16
+ - skill_create
17
+ ---
18
+
19
+ # Skill Creator
20
+
21
+ Write a skill that another model instance will actually reach for at the right
22
+ moment. Most bad skills are not badly written; they are badly *described* and
23
+ badly *scoped*.
24
+
25
+ ## When to use
26
+
27
+ - The user says "remember how to do this", "save this as a skill", or similar.
28
+ - You have worked out a non-obvious, repeatable procedure and expect to need it
29
+ again.
30
+ - You notice you have rediscovered the same steps twice in one session.
31
+
32
+ Do **not** create a skill for a one-off task, for something the tools already do
33
+ directly, or for general knowledge the model already has.
34
+
35
+ ## The one rule that matters most
36
+
37
+ `description` is the only text a future model sees before deciding whether to
38
+ load your skill. Everything else is invisible until then. So it must answer two
39
+ questions in one or two sentences:
40
+
41
+ 1. **What does this do?**
42
+ 2. **When should it be used?** — in the words a user would actually type.
43
+
44
+ Compare:
45
+
46
+ - Weak: `Helps with PDFs.`
47
+ - Strong: `Fill, flatten and validate AcroForm PDFs. Use when the task mentions
48
+ PDF forms, field filling, or flattening a fillable PDF.`
49
+
50
+ The second one will be picked up on a task that says "flatten this fillable
51
+ invoice". The first one will not.
52
+
53
+ ## Writing the body
54
+
55
+ - Use imperative steps, not background prose. The reader is an agent about to
56
+ act, not a student.
57
+ - Keep the body under about 5 000 characters. It is loaded whole, every time the
58
+ skill is used, so length is a recurring cost paid by every future run.
59
+ - Push long reference material into `reference/*.md` and executable steps into
60
+ `scripts/*`. Those are NOT preloaded — the model reads them on demand with
61
+ `read_file` or runs them with `bash`. That is the whole point of the three
62
+ levels, and it is what makes fifty installed skills cost a few thousand
63
+ characters instead of hundreds of thousands.
64
+ - Say what "done" looks like, and what to do when a step fails.
65
+
66
+ ## Things that do not belong in a skill
67
+
68
+ - Hostnames, IP addresses, repository URLs, absolute paths from your machine.
69
+ - API keys, tokens, or anything else secret. Skills are plain files that get
70
+ copied between machines and committed to repositories.
71
+ - Anything that only made sense in the conversation you are in right now.
72
+
73
+ ## Steps
74
+
75
+ 1. Confirm the scope with the user in one sentence: what the skill does and when
76
+ it fires.
77
+ 2. Draft the `description` first and read it back critically. Would a model
78
+ with only that line pick this skill for the task you have in mind?
79
+ 3. Write the body as numbered imperative steps.
80
+ 4. Split anything long or reusable into `reference/` and `scripts/` entries and
81
+ pass them as `files`.
82
+ 5. Call `skill_create` with `name`, `description`, `body`, and any `files`.
83
+ 6. Immediately call `skill(name="<your-new-skill>")` to read back what you
84
+ actually wrote. This catches truncated bodies and mangled frontmatter while
85
+ you can still fix them.
86
+
87
+ ## Naming
88
+
89
+ Lowercase kebab-case, at most 64 characters: `pdf-forms`, `release-notes`,
90
+ `db-migration-review`. The name becomes a slash command (`/pdf-forms`), so it
91
+ should read as a thing, not as a sentence.
92
+
93
+ If the name collides with a built-in command, the built-in wins and your skill
94
+ is reachable as `/skill:<name>` instead — so avoid `help`, `model`, `settings`,
95
+ `tools`, `clear`, `reset`, `cwd`, `save`, `resume`, `copy`, `theme`, `thinking`,
96
+ `expand`, `skills`, `exit` and `quit`.