You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 089c7bb
Browse filesBrowse the repository at this point in the historyBrowse files
docs(openspec): correct the remaining recipe .txt references to .md
NOT A NORMATIVE CHANGE. Every file under `packages/cli/src/agent/` has
been `.md` since the Vale-coverage change, and the build globs
`../agent/*.md`; verified there are 22 recipe files and zero `.txt`
among them. The specs still described the mechanism in terms of `.txt`,
so the obligations are unchanged and only the filenames they name are
now the real ones.
25 occurrences across five standing specs: cli-agent (recipe lookup,
embedding, template and anonymous-variant requirements), cli (the Vite
embedding scenario), cli-knowledge-prompts (purpose, export, anonymous
variants, topic membership), cli-rules (the improve-rule recipe) and
skills (where recipes live).
NONE of them sit in a requirement this branch's change wrote a delta
for. Checked per line rather than assumed: the deltas touch 'CLI info
subcommand outputs version as JSON', 'Recipe substitution uses
sprintf-js named arguments', the three cli-onboard requirements, and an
added cli-knowledge-prompts requirement, and no corrected line falls in
any of them. So there is no archived copy to keep in step here.
DELIBERATELY LEFT: `requirements.txt` in cli-detect. That is a Python
dependency manifest, which really is a `.txt` file, and rewriting it
would introduce an error rather than remove one.
`openspec/changes/archive/` is untouched, as before: it records what
each change said when it landed.
Copy file name to clipboardExpand all lines: openspec/specs/cli-agent/spec.md
+13-13Lines changed: 13 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,8 +10,8 @@ Defines the `agent` subcommand for the `@taskless/cli` package, including recipe
10
10
11
11
The CLI SHALL support an `agent` subcommand that accepts at most one positional argument identifying a topic AND an optional `--anonymous` boolean flag. Topics SHALL be addressed by a single token; the subcommand SHALL NOT join multiple positionals into a topic key. When a topic is provided, the subcommand SHALL look up a matching recipe file embedded at build time using the following resolution order:
12
12
13
-
1. If `--anonymous` is set AND `<topic>.anonymous.txt` exists in the embedded map, return that file.
14
-
2. Otherwise, return `<topic>.txt`.
13
+
1. If `--anonymous` is set AND `<topic>.anonymous.md` exists in the embedded map, return that file.
14
+
2. Otherwise, return `<topic>.md`.
15
15
3. If neither exists, exit with code 1 and an error message suggesting `taskless agent` for the topic index.
16
16
17
17
When no positional argument is provided, the subcommand SHALL print a topic index containing a one-paragraph human slug followed by a topic disambiguation table mapping topic names to their summaries.
@@ -21,18 +21,18 @@ The subcommand is named for its reader. It serves agents fetching a procedure, n
21
21
#### Scenario: Agent subcommand for a topic returns the recipe
22
22
23
23
-**WHEN** a user runs `taskless agent check`
24
-
-**THEN** the CLI SHALL print the contents of `check.txt` to stdout
24
+
-**THEN** the CLI SHALL print the contents of `check.md` to stdout
25
25
26
26
#### Scenario: Multi-word topic paths are not resolved
27
27
28
28
-**WHEN** a user runs `taskless agent rule create`
29
-
-**THEN** the CLI SHALL NOT look up `rule-create.txt` by joining the positionals
29
+
-**THEN** the CLI SHALL NOT look up `rule-create.md` by joining the positionals
30
30
-**AND** it SHALL exit non-zero rather than guessing a topic
31
31
32
32
#### Scenario: Formerly nested topics are addressed by one token
33
33
34
34
-**WHEN** a user runs `taskless agent improve-rule`
35
-
-**THEN** the CLI SHALL look up `improve-rule.txt` and print its contents
35
+
-**THEN** the CLI SHALL look up `improve-rule.md` and print its contents
36
36
37
37
#### Scenario: The former command name is gone
38
38
@@ -41,7 +41,7 @@ The subcommand is named for its reader. It serves agents fetching a procedure, n
41
41
42
42
### Requirement: Recipe files are embedded at build time
43
43
44
-
Recipe files SHALL be located at `packages/cli/src/agent/` as plain `.txt` files. The Vite build SHALL embed these files into the CLI bundle via `import.meta.glob` with raw imports. A recipe file SHALL exist for every registered command and subcommand.
44
+
Recipe files SHALL be located at `packages/cli/src/agent/` as `.md` files. The Vite build SHALL embed these files into the CLI bundle via `import.meta.glob` with raw imports. A recipe file SHALL exist for every registered command and subcommand.
45
45
46
46
#### Scenario: Recipe files are available without filesystem access
47
47
@@ -51,15 +51,15 @@ Recipe files SHALL be located at `packages/cli/src/agent/` as plain `.txt` files
51
51
#### Scenario: Recipe file naming convention
52
52
53
53
-**WHEN** a recipe file is created for the `rule create` subcommand
54
-
-**THEN** the file SHALL be named `rule-create.txt` in `packages/cli/src/agent/`
54
+
-**THEN** the file SHALL be named `rule-create.md` in `packages/cli/src/agent/`
55
55
56
56
### Requirement: Recipe files follow a consistent format
57
57
58
-
Every recipe file at `packages/cli/src/agent/<topic>.txt` SHALL follow the canonical recipe template: a single-line header `# Topic: <name> (CLI v%(CLI_VERSION)s / topic v<n>)`, followed by `## Goal`, `## Preconditions`, `## Steps`, optional `## Input schema` (for recipes that take `--from`), `## Errors`, and `## See Also` sections in that order. Recipe templates SHALL use sprintf-js `%(KEY)s` named-argument placeholders for all substitution. The header SHALL embed `%(CLI_VERSION)s` for the CLI version. Topics that document a `--from` input SHALL embed `%(INPUT_SCHEMA)s` inside the `## Input schema` fenced code block. The topic version integer in the header SHALL be a literal value maintained by the recipe author and bumped when the recipe changes meaningfully.
58
+
Every recipe file at `packages/cli/src/agent/<topic>.md` SHALL follow the canonical recipe template: a single-line header `# Topic: <name> (CLI v%(CLI_VERSION)s / topic v<n>)`, followed by `## Goal`, `## Preconditions`, `## Steps`, optional `## Input schema` (for recipes that take `--from`), `## Errors`, and `## See Also` sections in that order. Recipe templates SHALL use sprintf-js `%(KEY)s` named-argument placeholders for all substitution. The header SHALL embed `%(CLI_VERSION)s` for the CLI version. Topics that document a `--from` input SHALL embed `%(INPUT_SCHEMA)s` inside the `## Input schema` fenced code block. The topic version integer in the header SHALL be a literal value maintained by the recipe author and bumped when the recipe changes meaningfully.
59
59
60
60
#### Scenario: Recipe contains all template sections
61
61
62
-
-**WHEN** any `<topic>.txt` file is read
62
+
-**WHEN** any `<topic>.md` file is read
63
63
-**THEN** it SHALL begin with a `# Topic:` header containing `%(CLI_VERSION)s` and the topic version integer
64
64
-**AND** SHALL contain `## Goal`, `## Preconditions`, `## Steps`, `## Errors`, and `## See Also` sections in that order
65
65
@@ -206,20 +206,20 @@ Fetching a routing recipe SHALL emit the command's single intent event, `cli_age
206
206
207
207
### Requirement: Anonymous variant lookup uses a compile-time map
208
208
209
-
The `agent` command SHALL construct, at build time, a Set of topic names that have a corresponding `<topic>.anonymous.txt` file. Lookup at runtime SHALL be O(1). The Set SHALL be derived from `import.meta.glob` matching `*.anonymous.txt` in the recipe directory.
209
+
The `agent` command SHALL construct, at build time, a Set of topic names that have a corresponding `<topic>.anonymous.md` file. Lookup at runtime SHALL be O(1). The Set SHALL be derived from `import.meta.glob` matching `*.anonymous.md` in the recipe directory.
210
210
211
211
#### Scenario: Topics with variants are detected at build time
212
212
213
213
-**WHEN** the CLI bundle is built
214
-
-**AND** a file `improve-rule.anonymous.txt` exists
214
+
-**AND** a file `improve-rule.anonymous.md` exists
215
215
-**THEN** the embedded variants set SHALL contain `improve-rule`
216
216
217
217
#### Scenario: Topics without variants are absent from the map
218
218
219
219
-**WHEN** the CLI bundle is built
220
-
-**AND** no `check.anonymous.txt` file exists
220
+
-**AND** no `check.anonymous.md` file exists
221
221
-**THEN** the embedded variants set SHALL NOT contain `check`
222
-
-**AND**`taskless agent check --anonymous` SHALL fall back to `check.txt`
222
+
-**AND**`taskless agent check --anonymous` SHALL fall back to `check.md`
223
223
224
224
### Requirement: Embedded JSON schemas are generated via zod-to-json-schema
Copy file name to clipboardExpand all lines: openspec/specs/cli-knowledge-prompts/spec.md
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
## Purpose
4
4
5
-
The CLI's `agent/*.txt` recipes are the authoritative guidance Taskless gives an
5
+
The CLI's `agent/*.md` recipes are the authoritative guidance Taskless gives an
6
6
agent about authoring and operating rules. Until now the only way to read them
7
7
was to run `taskless agent`, which puts them out of reach of anything that cannot
8
8
spawn the CLI — notably the service-side generator, which needs the same text to
@@ -20,7 +20,7 @@ silently become public API.
20
20
21
21
### Requirement: The package exposes knowledge prompts via a dedicated import
22
22
23
-
The package SHALL expose its knowledge prompts (the `agent/*.txt` recipes) through a subpath export `@taskless/cli/prompts`, built into `dist` and listed in `files`, so consumers can import them without invoking the CLI.
23
+
The package SHALL expose its knowledge prompts (the `agent/*.md` recipes) through a subpath export `@taskless/cli/prompts`, built into `dist` and listed in `files`, so consumers can import them without invoking the CLI.
24
24
25
25
#### Scenario: Importing a prompt by topic
26
26
@@ -112,7 +112,7 @@ The `@taskless/cli/prompts` module SHALL contain only embedded prompt data, type
112
112
113
113
### Requirement: Anonymous variants are accessible distinctly from canonical
114
114
115
-
Where a `<topic>.anonymous.txt` variant exists, the export SHALL make it retrievable distinctly via `PromptOptions.anonymous`, falling back to the canonical recipe when no variant exists.
115
+
Where a `<topic>.anonymous.md` variant exists, the export SHALL make it retrievable distinctly via `PromptOptions.anonymous`, falling back to the canonical recipe when no variant exists.
116
116
117
117
#### Scenario: Anonymous variant retrieval and fallback
118
118
@@ -141,18 +141,18 @@ What the requirement actually protects is not the version number but the notice.
141
141
142
142
### Requirement: Topic membership is explicit and verified against the recipe files
143
143
144
-
`PromptTopic` SHALL be derived from an explicit, hand-maintained list of exported topics rather than inferred from whatever recipe files are present, so that adding or removing an `agent/*.txt` file cannot silently change the public API. Recipe files deliberately withheld from the export SHALL be recorded in an explicit internal-topics list.
144
+
`PromptTopic` SHALL be derived from an explicit, hand-maintained list of exported topics rather than inferred from whatever recipe files are present, so that adding or removing an `agent/*.md` file cannot silently change the public API. Recipe files deliberately withheld from the export SHALL be recorded in an explicit internal-topics list.
145
145
146
-
An automated check SHALL assert that the set of canonical `agent/*.txt` topics on disk is exactly the union of the exported topics and the internal-topics list, failing when the two diverge in either direction.
146
+
An automated check SHALL assert that the set of canonical `agent/*.md` topics on disk is exactly the union of the exported topics and the internal-topics list, failing when the two diverge in either direction.
147
147
148
148
#### Scenario: A new recipe file is added without being classified
149
149
150
-
-**WHEN** a new canonical `agent/<topic>.txt` is added and appears in neither the exported topics nor the internal-topics list
150
+
-**WHEN** a new canonical `agent/<topic>.md` is added and appears in neither the exported topics nor the internal-topics list
151
151
-**THEN** the completeness check SHALL fail, requiring the author to either export the topic or record it as internal
152
152
153
153
#### Scenario: An exported topic loses its recipe file
154
154
155
-
-**WHEN** a topic remains in `PromptTopic` but its canonical `agent/<topic>.txt` no longer exists
155
+
-**WHEN** a topic remains in `PromptTopic` but its canonical `agent/<topic>.md` no longer exists
156
156
-**THEN** the completeness check SHALL fail, rather than the topic rendering empty or undefined at runtime
157
157
158
158
#### Scenario: A deliberately internal recipe stays unexported
Copy file name to clipboardExpand all lines: openspec/specs/cli-rules/spec.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -195,12 +195,12 @@ The API calls for rule generation (`POST /cli/api/request` and `GET /cli/api/req
195
195
196
196
### Requirement: Rules improve has an agent recipe
197
197
198
-
`taskless agent improve-rule` SHALL return the recipe per `cli-agent` requirements. The recipe file is `improve-rule.txt`, with an `improve-rule.anonymous.txt` variant for the local-only flow.
198
+
`taskless agent improve-rule` SHALL return the recipe per `cli-agent` requirements. The recipe file is `improve-rule.md`, with an `improve-rule.anonymous.md` variant for the local-only flow.
199
199
200
200
#### Scenario: The recipe resolves by its single-token name
201
201
202
202
-**WHEN** a user runs `taskless agent improve-rule`
203
-
-**THEN** the CLI SHALL print the contents of `improve-rule.txt`
203
+
-**THEN** the CLI SHALL print the contents of `improve-rule.md`
204
204
205
205
### Requirement: Rules delete removes rule and test files
Copy file name to clipboardExpand all lines: openspec/specs/skills/spec.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ Defines the structure, conventions, and distribution model for Taskless skills,
10
10
11
11
The single skill SHALL be defined at `skills/taskless/SKILL.md` with YAML frontmatter (`name`, `description`, `metadata`) followed by markdown instructions. The `name` field SHALL be exactly `taskless` (no per-task prefix). The `metadata` field SHALL include `author`, `version`, and `commandName: tskl` keys. The `version` SHALL be used for staleness detection when the skill is installed into target repositories.
12
12
13
-
The skill body SHALL begin by instructing the agent that it does NOT have step-by-step instructions for any Taskless action and that recipes must be fetched via `npx @taskless/cli agent <topic>` before proceeding. The body SHALL NOT contain inline step-by-step recipes for any individual task — those live in `packages/cli/src/agent/<topic>.txt` files served by the `agent` subcommand.
13
+
The skill body SHALL begin by instructing the agent that it does NOT have step-by-step instructions for any Taskless action and that recipes must be fetched via `npx @taskless/cli agent <topic>` before proceeding. The body SHALL NOT contain inline step-by-step recipes for any individual task — those live in `packages/cli/src/agent/<topic>.md` files served by the `agent` subcommand.
0 commit comments