chore rename stream-of-thought skill to fasoc

Commit
1d1b81bac51d84a9a0b6bd5c8379ef0f1599b54e
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
.kiro/skills/fasoc/SKILL.md
index 00000000..55aef4ab 000000..100644
@@ -0,0 +1,233 @@
1 Added: ---
2 Added: name: fasoc
3 Added: description: Capture each feature request in ENHANCEMENTS.org with Emacs MCP. FASOC means Feature as Stream of Consciousness. Never implement requests.
4 Added: ---
5 Added:
6 Added: # FASOC — Feature as Stream of Consciousness
7 Added:
8 Added: Use this skill when the user asks to capture a feature request or track a
9 Added: feature in `ENHANCEMENTS.org`.
10 Added:
11 Added: Keep the session open across prompts. Treat each prompt as a separate feature
12 Added: request. Capture each request under `* Dispatch`. Do not merge requests. Do not
13 Added: build, test, commit, or start an agent.
14 Added:
15 Added: The current prompt is the feature request:
16 Added:
17 Added: $ARGUMENTS
18 Added:
19 Added: If the prompt is empty, ask for one line that describes the feature
20 Added: request. Then stop. Capture the next prompt as the next request.
21 Added:
22 Added: ## Use the Emacs MCP server
23 Added:
24 Added: Use the Emacs Model Context Protocol (MCP) server for all Org mode
25 Added: operations. Do not edit `ENHANCEMENTS.org` as raw text. Do not use
26 Added: shell or file tools to capture, refile, change status, or verify an
27 Added: entry.
28 Added:
29 Added: Use these Emacs MCP tools:
30 Added:
31 Added: - Use `org-get-node` or `org-search` to inspect headings, keywords,
32 Added: and content.
33 Added: - Use `org-list-templates` and `org-capture` to inspect templates and
34 Added: create the `Dispatch` heading when needed.
35 Added: - Use the Emacs MCP `eval-elisp` tool to run the required code
36 Added: snippets below.
37 Added: - Use `org-get-node` after each change to verify the result.
38 Added:
39 Added: Use the file and outline path that the Emacs MCP server returns. If an
40 Added: Emacs MCP operation cannot perform the action, stop and report the
41 Added: problem. Do not replace the operation with a raw file edit.
42 Added:
43 Added: ## Required Emacs code
44 Added:
45 Added: Run each snippet in this section with the Emacs MCP `eval-elisp`
46 Added: tool. Replace `ID`, `TITLE`, `BODY`, and `TARGET` with values that you
47 Added: observed through the Emacs MCP server. Run the inspection snippet
48 Added: before you change the file. Run the capture, status, completion, and
49 Added: refile snippets when needed. Run the verification expression after
50 Added: each change.
51 Added:
52 Added: Inspect the file and its TODO sequence with this expression:
53 Added:
54 Added: ```elisp
55 Added: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory)))
56 Added: (with-current-buffer (find-file-noselect file)
57 Added: (org-mode)
58 Added: (org-with-wide-buffer
59 Added: (list :todo-keywords org-todo-keywords-1
60 Added: :dispatch (org-find-exact-headline-in-buffer "Dispatch")))))
61 Added: ```
62 Added:
63 Added: Run this expression to capture an entry under `Dispatch`. Create
64 Added: `Dispatch` with the Emacs MCP `org-capture` tool first if it does not
65 Added: exist.
66 Added:
67 Added: ```elisp
68 Added: (let* ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
69 Added: (title "TITLE")
70 Added: (body "BODY")
71 Added: (captured-at (format-time-string "[%Y-%m-%d %a %H:%M]"))
72 Added: (org-capture-templates
73 Added: `(("e" "Enhancement" entry
74 Added: (file+headline ,file "Dispatch")
75 Added: "%i")))
76 Added: (org-capture-string
77 Added: (format "** TODO %s\nSCHEDULED: %s\n%s\n" title captured-at body)
78 Added: "e")
79 Added: (org-capture-finalize))
80 Added: ```
81 Added:
82 Added: Run this expression to change an open entry's keyword. Replace `STATE`
83 Added: with one keyword from the observed `#+TODO:` sequence.
84 Added:
85 Added: ```elisp
86 Added: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
87 Added: (id "ID")
88 Added: (state "STATE"))
89 Added: (with-current-buffer (find-file-noselect file)
90 Added: (org-mode)
91 Added: (let ((marker (org-id-find id 'marker)))
92 Added: (unless marker
93 Added: (user-error "Org ID not found: %s" id))
94 Added: (goto-char marker))
95 Added: (org-todo state)
96 Added: (save-buffer)))
97 Added: ```
98 Added:
99 Added: Run this expression to set `DONE` and verify the completion
100 Added: timestamp. Do not insert a `CLOSED` line yourself. The normal Org TODO
101 Added: transition must insert it.
102 Added:
103 Added: ```elisp
104 Added: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
105 Added: (id "ID"))
106 Added: (with-current-buffer (find-file-noselect file)
107 Added: (org-mode)
108 Added: (hack-local-variables)
109 Added: (unless (eq org-log-done 'time)
110 Added: (user-error "org-log-done is not set to time"))
111 Added: (let ((marker (org-id-find id 'marker)))
112 Added: (unless marker
113 Added: (user-error "Org ID not found: %s" id))
114 Added: (goto-char marker))
115 Added: (org-todo "DONE")
116 Added: (save-buffer)
117 Added: (unless (org-entry-get nil "CLOSED")
118 Added: (user-error "Org did not record a CLOSED timestamp"))
119 Added: (org-entry-get nil "CLOSED")))
120 Added: ```
121 Added:
122 Added: Run this expression to refile the completed entry under a top-level
123 Added: section. Replace `TARGET` with the observed top-level heading name.
124 Added:
125 Added: ```elisp
126 Added: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
127 Added: (id "ID")
128 Added: (target "TARGET"))
129 Added: (with-current-buffer (find-file-noselect file)
130 Added: (org-mode)
131 Added: (let ((marker (org-id-find id 'marker)))
132 Added: (unless marker
133 Added: (user-error "Org ID not found: %s" id))
134 Added: (goto-char marker))
135 Added: (let ((source-position (point))
136 Added: (target-position
137 Added: (with-current-buffer (find-file-noselect file)
138 Added: (org-mode)
139 Added: (goto-char (point-min))
140 Added: (let ((target-marker
141 Added: (org-find-exact-headline-in-buffer target)))
142 Added: (unless target-marker
143 Added: (user-error "Org target not found: %s" target))
144 Added: (marker-position target-marker)))))
145 Added: (goto-char source-position)
146 Added: (org-refile nil nil (list target file nil target-position))
147 Added: (save-buffer))))
148 Added: ```
149 Added:
150 Added: Run this expression to verify the entry after a mutation:
151 Added:
152 Added: ```elisp
153 Added: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
154 Added: (id "ID"))
155 Added: (with-current-buffer (find-file-noselect file)
156 Added: (org-mode)
157 Added: (let ((marker (org-id-find id 'marker)))
158 Added: (unless marker
159 Added: (user-error "Org ID not found: %s" id))
160 Added: (goto-char marker))
161 Added: (list (org-get-heading t t t t)
162 Added: (org-get-todo-state)
163 Added: (org-entry-get nil "CLOSED")
164 Added: (org-get-outline-path))))
165 Added: ```
166 Added:
167 Added: ## Step 1 — Capture under Dispatch
168 Added:
169 Added: Inspect `ENHANCEMENTS.org` with `org-search` or `org-get-node` before
170 Added: writing. Find the top-level `* Dispatch` heading. If it does not
171 Added: exist, create it at the top of the file.
172 Added:
173 Added: Add the request as a level-2 heading under `* Dispatch`. Run
174 Added: `org-list-templates` first. Select a matching `org-capture`
175 Added: template. If no template matches, use `org-capture` direct mode with
176 Added: the file, title, outline path, and body. Then run the capture snippet.
177 Added:
178 Added: Create this entry:
179 Added:
180 Added: ```
181 Added: ** TODO <imperative title under 60 chars>
182 Added: SCHEDULED: [YYYY-MM-DD Day HH:MM]
183 Added: <the full idea text, formatted as a list if text contains separate ideas>
184 Added: ```
185 Added:
186 Added: The inactive timestamp records the capture time. Use a short imperative
187 Added: title. Keep the full request text unchanged. Do not rewrite it. Keep
188 Added: the file well-formed. Verify the new heading with `org-get-node`. Report
189 Added: its outline path.
190 Added:
191 Added: ## Step 2 — Refile on completion
192 Added:
193 Added: Keep the request under `* Dispatch` while its status is open,
194 Added: `BLOCKED`, or `CANCELLED`. When its status becomes `DONE`, move the
195 Added: entire heading out of `* Dispatch`.
196 Added:
197 Added: Inspect the top-level (`*`) headings with `org-search` or
198 Added: `org-get-node`. Select the section that best matches the request. If
199 Added: no section matches, create a short, consistent top-level section with
200 Added: `org-capture` through the Emacs MCP server.
201 Added:
202 Added: Run the refile snippet. The snippet calls `org-refile`. Verify the new
203 Added: location with `org-get-node`. Report the new outline path.
204 Added:
205 Added: ## Step 3 — Track the status
206 Added:
207 Added: Read the file's `#+TODO:` header and the current heading with
208 Added: `org-get-node` before changing a keyword. Use the keyword sequence in
209 Added: the header. Run the status snippet for every status change. The
210 Added: snippet calls `org-todo`. Do not make another status change after the
211 Added: snippet.
212 Added:
213 Added: - `TODO` — Capture the request. Do not start work.
214 Added: - `IN-PROGRESS` — Start work.
215 Added: - `TESTING` — Run tests. The tests do not pass.
216 Added: - `TESTED` — Tests pass. No commit exists.
217 Added: - `DONE` — The build passes. Tests pass. The files have the required
218 Added: format. A commit exists. Run the completion snippet. The snippet
219 Added: sets `DONE`, uses the configured `org-log-done` behavior, and
220 Added: verifies the completion timestamp. Do not add or edit the timestamp
221 Added: manually. Refile the heading under Step 2.
222 Added: - `BLOCKED` — Work cannot continue. Mention the cause of the block.
223 Added: - `CANCELLED` — Stop work intentionally.
224 Added:
225 Added: Change the keyword only after you observe the current status. Do not
226 Added: set `DONE` unless you observe a commit and passing tests. After each
227 Added: status snippet, use `org-get-node` to verify the keyword. When the
228 Added: keyword becomes `DONE`, verify the completion timestamp before you
229 Added: refile the heading. Let Org's configured completion logging add the
230 Added: timestamp. Add no other field.
231 Added:
232 Added: Record every prompt as its own request. If you cannot complete a
233 Added: request, record the request and the failure.
.kiro/skills/stream-of-thought/SKILL.md
index 1ef178b8..00000000 100644..000000
@@ -1,227 +0,0 @@
1 Removed: ---
2 Removed: name: stream-of-thought
3 Removed: description: Capture and track enhancement requests in ENHANCEMENTS.org through Emacs MCP. One session runs across many prompts. Capture each prompt as its own request. Never implement requests.
4 Removed: ---
5 Removed:
6 Removed: # Stream of thought
7 Removed:
8 Removed: Use this skill when the user requests a stream-of-thought enhancement session,
9 Removed: asks to capture an enhancement idea, or asks to track an improvement in
10 Removed: `ENHANCEMENTS.org`.
11 Removed:
12 Removed: A session stays open across many prompts. Treat each prompt as one separate
13 Removed: enhancement request. Capture each prompt as its own heading under `* Dispatch`.
14 Removed: Do not merge two prompts into one request. Do not build, test, commit, or start
15 Removed: an agent.
16 Removed:
17 Removed: The current prompt is the enhancement request:
18 Removed:
19 Removed: $ARGUMENTS
20 Removed:
21 Removed: If the prompt is empty, ask for one line that describes the enhancement. Then
22 Removed: stop. Wait for the next prompt, then capture it as the next request.
23 Removed:
24 Removed: ## Use the Emacs MCP server
25 Removed:
26 Removed: Use the Emacs Model Context Protocol (MCP) server for all Org mode operations.
27 Removed: Do not edit `ENHANCEMENTS.org` as raw text. Do not use shell or file tools to
28 Removed: capture, refile, change status, or verify an entry.
29 Removed:
30 Removed: Use these Emacs MCP tools:
31 Removed:
32 Removed: - Use `org-get-node` or `org-search` to inspect headings, keywords, and content.
33 Removed: - Use `org-list-templates` and `org-capture` to inspect templates and create
34 Removed: the `Dispatch` heading when needed.
35 Removed: - Use the Emacs MCP `eval-elisp` tool to run the required code snippets below.
36 Removed: - Use `org-get-node` after each change to verify the result.
37 Removed:
38 Removed: Use the Org identifier (ID) when the entry has one. If it has no ID, use the
39 Removed: file and outline path that the Emacs MCP server returns. If an Emacs MCP
40 Removed: operation cannot perform the action, stop and report the problem. Do not
41 Removed: replace the operation with a raw file edit.
42 Removed:
43 Removed: ## Required Emacs code
44 Removed:
45 Removed: Run each snippet in this section with the Emacs MCP `eval-elisp` tool. Replace
46 Removed: `ID`, `TITLE`, `BODY`, and `TARGET` with values that you observed through the
47 Removed: Emacs MCP server. Run the inspection snippet before you change the file. Run
48 Removed: the capture, status, completion, and refile snippets for the relevant steps.
49 Removed: Run the verification expression after each mutation.
50 Removed:
51 Removed: Inspect the file and its TODO sequence with this expression:
52 Removed:
53 Removed: ```elisp
54 Removed: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory)))
55 Removed: (with-current-buffer (find-file-noselect file)
56 Removed: (org-mode)
57 Removed: (org-with-wide-buffer
58 Removed: (list :todo-keywords org-todo-keywords-1
59 Removed: :dispatch (org-find-exact-headline-in-buffer "Dispatch")))))
60 Removed: ```
61 Removed:
62 Removed: Run this expression to capture an entry under `Dispatch`. Create `Dispatch`
63 Removed: with the Emacs MCP `org-capture` tool first if it does not exist.
64 Removed:
65 Removed: ```elisp
66 Removed: (let* ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
67 Removed: (title "TITLE")
68 Removed: (body "BODY")
69 Removed: (captured-at (format-time-string "[%Y-%m-%d %a %H:%M]"))
70 Removed: (org-capture-templates
71 Removed: `(("e" "Enhancement" entry
72 Removed: (file+headline ,file "Dispatch")
73 Removed: "%i"))))
74 Removed: (org-capture-string
75 Removed: (format "** TODO %s\nSCHEDULED: %s\n%s\n" title captured-at body)
76 Removed: "e")
77 Removed: (org-capture-finalize))
78 Removed: ```
79 Removed:
80 Removed: Run this expression to change an open entry's keyword. Replace `STATE` with
81 Removed: one keyword from the observed `#+TODO:` sequence.
82 Removed:
83 Removed: ```elisp
84 Removed: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
85 Removed: (id "ID")
86 Removed: (state "STATE"))
87 Removed: (with-current-buffer (find-file-noselect file)
88 Removed: (org-mode)
89 Removed: (let ((marker (org-id-find id 'marker)))
90 Removed: (unless marker
91 Removed: (user-error "Org ID not found: %s" id))
92 Removed: (goto-char marker))
93 Removed: (org-todo state)
94 Removed: (save-buffer)))
95 Removed: ```
96 Removed:
97 Removed: Run this expression to set `DONE` and verify the completion timestamp. Do not
98 Removed: insert a `CLOSED` line yourself. The normal Org TODO transition must insert it.
99 Removed:
100 Removed: ```elisp
101 Removed: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
102 Removed: (id "ID"))
103 Removed: (with-current-buffer (find-file-noselect file)
104 Removed: (org-mode)
105 Removed: (hack-local-variables)
106 Removed: (unless (eq org-log-done 'time)
107 Removed: (user-error "org-log-done is not set to time"))
108 Removed: (let ((marker (org-id-find id 'marker)))
109 Removed: (unless marker
110 Removed: (user-error "Org ID not found: %s" id))
111 Removed: (goto-char marker))
112 Removed: (org-todo "DONE")
113 Removed: (save-buffer)
114 Removed: (unless (org-entry-get nil "CLOSED")
115 Removed: (user-error "Org did not record a CLOSED timestamp"))
116 Removed: (org-entry-get nil "CLOSED")))
117 Removed: ```
118 Removed:
119 Removed: Run this expression to refile the completed entry under a top-level section.
120 Removed: Replace `TARGET` with the observed top-level heading name.
121 Removed:
122 Removed: ```elisp
123 Removed: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
124 Removed: (id "ID")
125 Removed: (target "TARGET"))
126 Removed: (with-current-buffer (find-file-noselect file)
127 Removed: (org-mode)
128 Removed: (let ((marker (org-id-find id 'marker)))
129 Removed: (unless marker
130 Removed: (user-error "Org ID not found: %s" id))
131 Removed: (goto-char marker))
132 Removed: (let ((source-position (point))
133 Removed: (target-position
134 Removed: (with-current-buffer (find-file-noselect file)
135 Removed: (org-mode)
136 Removed: (goto-char (point-min))
137 Removed: (let ((target-marker
138 Removed: (org-find-exact-headline-in-buffer target)))
139 Removed: (unless target-marker
140 Removed: (user-error "Org target not found: %s" target))
141 Removed: (marker-position target-marker)))))
142 Removed: (goto-char source-position)
143 Removed: (org-refile nil nil (list target file nil target-position))
144 Removed: (save-buffer))))
145 Removed: ```
146 Removed:
147 Removed: Run this expression to verify the entry after a mutation:
148 Removed:
149 Removed: ```elisp
150 Removed: (let ((file (expand-file-name "ENHANCEMENTS.org" default-directory))
151 Removed: (id "ID"))
152 Removed: (with-current-buffer (find-file-noselect file)
153 Removed: (org-mode)
154 Removed: (let ((marker (org-id-find id 'marker)))
155 Removed: (unless marker
156 Removed: (user-error "Org ID not found: %s" id))
157 Removed: (goto-char marker))
158 Removed: (list (org-get-heading t t t t)
159 Removed: (org-get-todo-state)
160 Removed: (org-entry-get nil "CLOSED")
161 Removed: (org-get-outline-path))))
162 Removed: ```
163 Removed:
164 Removed: ## Step 1 — Capture under Dispatch
165 Removed:
166 Removed: Inspect `ENHANCEMENTS.org` with `org-search` or `org-get-node` before writing.
167 Removed: Find the top-level `* Dispatch` heading. If it does not exist, create it at
168 Removed: the top of the file.
169 Removed:
170 Removed: Add the request as a level-2 heading under `* Dispatch`. Run
171 Removed: `org-list-templates` first. Select a matching `org-capture` template. If no
172 Removed: template matches, use `org-capture` direct mode with the file, title, outline
173 Removed: path, and body. Then run the capture snippet.
174 Removed:
175 Removed: Create this entry:
176 Removed:
177 Removed: ```
178 Removed: ** TODO <imperative title under 60 chars>
179 Removed: SCHEDULED: [YYYY-MM-DD Day HH:MM]
180 Removed: <the full idea text, formatted as a list if text contains separate ideas>
181 Removed: ```
182 Removed:
183 Removed: The inactive timestamp records when you captured the request. Use a short,
184 Removed: imperative title. Keep the full request text unchanged. Do not rewrite it.
185 Removed: Keep the file well-formed. Verify the new heading with `org-get-node`. Report
186 Removed: its outline path.
187 Removed:
188 Removed: ## Step 2 — Refile on completion
189 Removed:
190 Removed: Keep the request under `* Dispatch` while its status is open, `BLOCKED`, or
191 Removed: `CANCELLED`. When its status becomes `DONE`, move the entire heading out of
192 Removed: `* Dispatch`.
193 Removed:
194 Removed: Inspect the top-level (`*`) headings with `org-search` or `org-get-node`. Select
195 Removed: the section that best matches the request. If no section matches, create a
196 Removed: short, consistent top-level section with `org-capture` through the Emacs MCP
197 Removed: server.
198 Removed:
199 Removed: Run the refile snippet. The snippet calls `org-refile`. Verify the new location
200 Removed: with `org-get-node`. Report the new outline path.
201 Removed:
202 Removed: ## Step 3 — Track the status
203 Removed:
204 Removed: Read the file's `#+TODO:` header and the current heading with `org-get-node`
205 Removed: before changing a keyword. Use the keyword sequence in the header. Run the
206 Removed: status snippet for every status change. The snippet calls `org-todo`. Do not
207 Removed: make another status change after the snippet.
208 Removed:
209 Removed: - `TODO` — Capture the request. Do not start work.
210 Removed: - `IN-PROGRESS` — Start work.
211 Removed: - `TESTING` — Run tests. The tests do not pass.
212 Removed: - `TESTED` — Tests pass. No commit exists.
213 Removed: - `DONE` — The build passes. Tests pass. The files have the required format. A
214 Removed: commit exists. Run the completion snippet. The snippet sets `DONE`, uses the
215 Removed: configured `org-log-done` behavior, and verifies the completion timestamp. Do
216 Removed: not add or edit the timestamp manually. Refile the heading under Step 2.
217 Removed: - `BLOCKED` — Work cannot continue. Mention the cause of the block.
218 Removed: - `CANCELLED` — Stop work intentionally.
219 Removed:
220 Removed: Change the keyword only after you observe the current status. Do not set `DONE`
221 Removed: unless you observe a commit and passing tests. After each status snippet, use
222 Removed: `org-get-node` to verify the keyword. When the keyword becomes `DONE`, verify
223 Removed: the completion timestamp before you refile the heading. Let Org's configured
224 Removed: completion logging add the timestamp. Add no other field.
225 Removed:
226 Removed: Record every prompt as its own request. If you cannot complete a request,
227 Removed: record the request and the failure.