[OCaml] High Intensity Training Online
chore rename stream-of-thought skill to fasoc
.kiro/skills/fasoc/SKILL.md
@@ -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
@@ -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.