pi-omlx-picker 0.2.8 → 0.3.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.
- package/index.ts +19 -6
- package/package.json +8 -2
- package/src/catalog.ts +52 -21
- package/src/config.ts +12 -0
- package/src/overflow.ts +1 -0
- package/src/provider.ts +12 -7
- package/src/repeat-stop.ts +2 -5
- package/src/stream-events.ts +1 -1
- package/src/stream-writer.ts +7 -0
- package/src/stream.ts +8 -1
- package/src/thinking-format.ts +1 -1
- package/.atl/.skill-registry.cache.json +0 -3
- package/.atl/skill-registry.md +0 -75
- package/.omt/.draft.json +0 -63
- package/.omt/files/Taskfile.yaml +0 -10
- package/.omt/files/tasks.toml +0 -10
- package/.omt/plan.resolved +0 -154
- package/.omt/plans/.backups/plan/20260623-060959.yaml +0 -46
- package/.omt/plans/.backups/plan/20260623-061109.yaml +0 -46
- package/.omt/plans/.backups/plan/20260623-061243.yaml +0 -45
- package/.omt/plans/.backups/plan/20260624-152904.yaml +0 -45
- package/.omt/plans/.backups/plan/20260624-152924.yaml +0 -46
- package/.omt/tasks/repo-overview.sh +0 -9
- package/.omt/tasks/verify.sh +0 -4
package/index.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
} from "./src/catalog.ts";
|
|
21
21
|
import {
|
|
22
22
|
DEFAULT_OMLX_BASE_URL,
|
|
23
|
+
hasOmlxTarget,
|
|
23
24
|
loadConfig,
|
|
24
25
|
type OmlxConfig,
|
|
25
26
|
resolveConfiguredApiKey,
|
|
@@ -115,9 +116,18 @@ function registerModels(
|
|
|
115
116
|
models: OmlxModel[],
|
|
116
117
|
modelSettingsPath?: string,
|
|
117
118
|
): void {
|
|
119
|
+
const keyless = !resolveConfiguredApiKey();
|
|
118
120
|
pi.registerProvider(PROVIDER, {
|
|
119
121
|
name: "OMLX",
|
|
120
|
-
...toProviderConfig(
|
|
122
|
+
...toProviderConfig(
|
|
123
|
+
config.apiRoot,
|
|
124
|
+
config.apiKeyEnvVar,
|
|
125
|
+
models,
|
|
126
|
+
undefined,
|
|
127
|
+
{
|
|
128
|
+
keyless,
|
|
129
|
+
},
|
|
130
|
+
),
|
|
121
131
|
});
|
|
122
132
|
state.config = config;
|
|
123
133
|
state.catalog = models;
|
|
@@ -152,8 +162,9 @@ function registerCachedOrSetupModels(pi: ExtensionAPI, state: State): void {
|
|
|
152
162
|
apiRoot: DEFAULT_OMLX_BASE_URL,
|
|
153
163
|
apiKeyEnvVar: "OMLX_API_KEY",
|
|
154
164
|
};
|
|
165
|
+
const configured = resolveConfiguredApiKey() || hasOmlxTarget();
|
|
155
166
|
const cached = registrableCachedModels(readCatalogCache(config.apiRoot));
|
|
156
|
-
const fallbackCached =
|
|
167
|
+
const fallbackCached = configured
|
|
157
168
|
? undefined
|
|
158
169
|
: registrableCachedModels(readLastCatalogCache());
|
|
159
170
|
const models = cached ?? fallbackCached;
|
|
@@ -161,7 +172,7 @@ function registerCachedOrSetupModels(pi: ExtensionAPI, state: State): void {
|
|
|
161
172
|
state.config = config;
|
|
162
173
|
state.catalog = [];
|
|
163
174
|
state.registered = false;
|
|
164
|
-
state.lastError =
|
|
175
|
+
state.lastError = configured
|
|
165
176
|
? "No cached OMLX models with real max_context_window/max_tokens; waiting for live catalog refresh."
|
|
166
177
|
: "OMLX credentials are not set. Run /login and choose OMLX.";
|
|
167
178
|
state.lastRefreshAt = new Date().toISOString();
|
|
@@ -169,7 +180,9 @@ function registerCachedOrSetupModels(pi: ExtensionAPI, state: State): void {
|
|
|
169
180
|
return;
|
|
170
181
|
}
|
|
171
182
|
|
|
172
|
-
|
|
183
|
+
// A key OR a configured base URL (keyless server) is enough to register the
|
|
184
|
+
// real provider. Pi omits the auth header when the resolved key is empty.
|
|
185
|
+
if (configured) {
|
|
173
186
|
registerModels(pi, state, config, models);
|
|
174
187
|
return;
|
|
175
188
|
}
|
|
@@ -226,7 +239,7 @@ async function refreshProvider(
|
|
|
226
239
|
): Promise<RefreshResult> {
|
|
227
240
|
const config = loadConfig();
|
|
228
241
|
const apiKey = resolveConfiguredApiKey();
|
|
229
|
-
if (!apiKey) {
|
|
242
|
+
if (!apiKey && !hasOmlxTarget()) {
|
|
230
243
|
state.lastError = "OMLX credentials are not set";
|
|
231
244
|
return "not_configured";
|
|
232
245
|
}
|
|
@@ -237,7 +250,7 @@ async function refreshProvider(
|
|
|
237
250
|
|
|
238
251
|
let models: OmlxModel[];
|
|
239
252
|
try {
|
|
240
|
-
models = await fetchModels(config.apiRoot, apiKey, {
|
|
253
|
+
models = await fetchModels(config.apiRoot, apiKey ?? "", {
|
|
241
254
|
modelSettingsPath,
|
|
242
255
|
timeoutMs: opts.timeoutMs,
|
|
243
256
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-omlx-picker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Pi extension that discovers models from a local OMLX server and registers them as a native Pi provider.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -20,8 +20,14 @@
|
|
|
20
20
|
"typecheck": "tsc --noEmit",
|
|
21
21
|
"test": "vitest run",
|
|
22
22
|
"test:watch": "vitest",
|
|
23
|
-
"
|
|
23
|
+
"release": "npm publish --access public"
|
|
24
24
|
},
|
|
25
|
+
"files": [
|
|
26
|
+
"index.ts",
|
|
27
|
+
"src",
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE"
|
|
30
|
+
],
|
|
25
31
|
"pi": {
|
|
26
32
|
"extensions": [
|
|
27
33
|
"./index.ts"
|
package/src/catalog.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface OmlxModel {
|
|
|
10
10
|
modelAlias?: string;
|
|
11
11
|
contextWindow?: number;
|
|
12
12
|
maxTokens?: number;
|
|
13
|
+
/** Model architectural ceiling (`max_model_len`). Prio-3 fallback and clamp limit. */
|
|
14
|
+
archContextWindow?: number;
|
|
13
15
|
thinkingDefault?: boolean | null;
|
|
14
16
|
taskBudgetTokens?: number;
|
|
15
17
|
maxToolResultTokens?: number;
|
|
@@ -36,7 +38,7 @@ export interface CatalogDebugEvent {
|
|
|
36
38
|
|
|
37
39
|
interface OpenAIModelsResponse {
|
|
38
40
|
object: string;
|
|
39
|
-
data: Array<{ id: string; object?: string }>;
|
|
41
|
+
data: Array<{ id: string; object?: string; max_model_len?: number | null }>;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
interface OmlxModelsStatusResponse {
|
|
@@ -92,7 +94,10 @@ export function parseModelsResponse(json: unknown): OmlxModel[] {
|
|
|
92
94
|
if (!entry || typeof entry.id !== "string" || !entry.id) continue;
|
|
93
95
|
if (seen.has(entry.id)) continue;
|
|
94
96
|
seen.add(entry.id);
|
|
95
|
-
|
|
97
|
+
const m: OmlxModel = { id: entry.id };
|
|
98
|
+
if (typeof entry.max_model_len === "number" && entry.max_model_len > 0)
|
|
99
|
+
m.archContextWindow = entry.max_model_len;
|
|
100
|
+
out.push(m);
|
|
96
101
|
}
|
|
97
102
|
return out;
|
|
98
103
|
}
|
|
@@ -208,13 +213,15 @@ export async function fetchModels(
|
|
|
208
213
|
opts.modelSettingsPath,
|
|
209
214
|
opts.onDebug,
|
|
210
215
|
);
|
|
211
|
-
return
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
216
|
+
return resolveArchContextLimits(
|
|
217
|
+
await applyApiGlobalDefaultsIfNeeded(
|
|
218
|
+
models,
|
|
219
|
+
apiRoot,
|
|
220
|
+
apiKey,
|
|
221
|
+
opts.signal,
|
|
222
|
+
timeoutMs,
|
|
223
|
+
opts.onDebug,
|
|
224
|
+
),
|
|
218
225
|
);
|
|
219
226
|
} catch (err) {
|
|
220
227
|
if (err instanceof Error && err.name === "AbortError") throw err;
|
|
@@ -245,16 +252,35 @@ export async function fetchModels(
|
|
|
245
252
|
opts.modelSettingsPath,
|
|
246
253
|
opts.onDebug,
|
|
247
254
|
);
|
|
248
|
-
return
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
+
return resolveArchContextLimits(
|
|
256
|
+
await applyApiGlobalDefaultsIfNeeded(
|
|
257
|
+
models,
|
|
258
|
+
apiRoot,
|
|
259
|
+
apiKey,
|
|
260
|
+
opts.signal,
|
|
261
|
+
timeoutMs,
|
|
262
|
+
opts.onDebug,
|
|
263
|
+
),
|
|
255
264
|
);
|
|
256
265
|
}
|
|
257
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Final context-window resolution, applied after model-specific (prio 1) and
|
|
269
|
+
* global (prio 2) settings. The model's architectural ceiling
|
|
270
|
+
* (`archContextWindow`, from `max_model_len`) is the prio-3 fallback when no
|
|
271
|
+
* user setting exists, and the hard clamp when a user setting exceeds it.
|
|
272
|
+
*/
|
|
273
|
+
export function resolveArchContextLimits(models: OmlxModel[]): OmlxModel[] {
|
|
274
|
+
return models.map((model) => {
|
|
275
|
+
const arch = model.archContextWindow;
|
|
276
|
+
if (arch == null) return model;
|
|
277
|
+
const next: OmlxModel = { ...model };
|
|
278
|
+
if (next.contextWindow == null) next.contextWindow = arch;
|
|
279
|
+
else if (next.contextWindow > arch) next.contextWindow = arch;
|
|
280
|
+
return next;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
|
|
258
284
|
async function applyApiGlobalDefaultsIfNeeded(
|
|
259
285
|
models: OmlxModel[],
|
|
260
286
|
apiRoot: string,
|
|
@@ -263,7 +289,8 @@ async function applyApiGlobalDefaultsIfNeeded(
|
|
|
263
289
|
timeoutMs: number,
|
|
264
290
|
onDebug?: (event: CatalogDebugEvent) => void,
|
|
265
291
|
): Promise<OmlxModel[]> {
|
|
266
|
-
if (!models.some((m) =>
|
|
292
|
+
if (!models.some((m) => m.contextWindow == null || m.maxTokens == null))
|
|
293
|
+
return models;
|
|
267
294
|
let defaults: OmlxGlobalDefaults | undefined;
|
|
268
295
|
try {
|
|
269
296
|
defaults = await fetchGlobalDefaults(apiRoot, apiKey, signal, timeoutMs);
|
|
@@ -272,6 +299,7 @@ async function applyApiGlobalDefaultsIfNeeded(
|
|
|
272
299
|
details: { apiRoot, defaults },
|
|
273
300
|
});
|
|
274
301
|
} catch (err) {
|
|
302
|
+
if (signal?.aborted) throw err;
|
|
275
303
|
onDebug?.({
|
|
276
304
|
kind: "catalog_global_settings_failed",
|
|
277
305
|
details: {
|
|
@@ -281,12 +309,13 @@ async function applyApiGlobalDefaultsIfNeeded(
|
|
|
281
309
|
});
|
|
282
310
|
return models;
|
|
283
311
|
}
|
|
284
|
-
if (
|
|
312
|
+
if (defaults.contextWindow == null && defaults.maxTokens == null)
|
|
313
|
+
return models;
|
|
285
314
|
return models.map((model) => {
|
|
286
315
|
const next: OmlxModel = { ...model };
|
|
287
|
-
if (
|
|
316
|
+
if (next.contextWindow == null && defaults.contextWindow != null)
|
|
288
317
|
next.contextWindow = defaults.contextWindow;
|
|
289
|
-
if (
|
|
318
|
+
if (next.maxTokens == null && defaults.maxTokens != null)
|
|
290
319
|
next.maxTokens = defaults.maxTokens;
|
|
291
320
|
return next;
|
|
292
321
|
});
|
|
@@ -325,8 +354,10 @@ async function getJson(
|
|
|
325
354
|
timeoutMs: number,
|
|
326
355
|
): Promise<unknown> {
|
|
327
356
|
const signal = withTimeout(parent, timeoutMs);
|
|
357
|
+
// Empty key => keyless server (skip_api_key_verification): omit the header.
|
|
358
|
+
const headers = apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined;
|
|
328
359
|
const res = await fetch(url, {
|
|
329
|
-
headers
|
|
360
|
+
headers,
|
|
330
361
|
signal,
|
|
331
362
|
}).catch((err) => {
|
|
332
363
|
if (err instanceof Error && err.name === "AbortError") {
|
package/src/config.ts
CHANGED
|
@@ -34,6 +34,18 @@ export function resolveConfiguredApiKey(
|
|
|
34
34
|
return loadOmlxCredential()?.apiKey;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* True when the user has pointed us at a server even without an API key.
|
|
39
|
+
* OMLX servers run with `skip_api_key_verification: true` need no key; an
|
|
40
|
+
* explicit base URL (env or stored) is the signal that a keyless server is
|
|
41
|
+
* intended. With neither key nor base URL there is nothing to talk to.
|
|
42
|
+
*/
|
|
43
|
+
export function hasOmlxTarget(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
44
|
+
if (env.OMLX_API_KEY || env.OMLX_BASE_URL) return true;
|
|
45
|
+
const stored = loadOmlxCredential();
|
|
46
|
+
return Boolean(stored?.apiKey || stored?.baseUrl);
|
|
47
|
+
}
|
|
48
|
+
|
|
37
49
|
// Legacy helper for older stored api_key credentials. Never fills only one side
|
|
38
50
|
// of the env pair; partial shell overrides remain explicit shell state.
|
|
39
51
|
export function applyStoredCredentialToEnv(
|
package/src/overflow.ts
CHANGED
|
@@ -4,6 +4,7 @@ const OMLX_OVERFLOW_RE =
|
|
|
4
4
|
/prompt too long[:.]?\s*(\d[\d,]*)\s*tokens?\s*exceeds\s*max(?:imum)?\s*context window of\s*(\d[\d,]*)\s*tokens?/i;
|
|
5
5
|
|
|
6
6
|
export function normalizeOverflowMessage(errorMessage: string): string {
|
|
7
|
+
if (errorMessage.startsWith("prompt is too long:")) return errorMessage;
|
|
7
8
|
const match = OMLX_OVERFLOW_RE.exec(errorMessage);
|
|
8
9
|
if (!match) return errorMessage;
|
|
9
10
|
const used = match[1];
|
package/src/provider.ts
CHANGED
|
@@ -23,22 +23,27 @@ export function toProviderConfig(
|
|
|
23
23
|
apiKeyEnvVar: string,
|
|
24
24
|
models: OmlxModel[],
|
|
25
25
|
onStreamTimeout?: (event: StreamTimeoutEvent) => void,
|
|
26
|
+
options: { keyless?: boolean } = {},
|
|
26
27
|
): ProviderConfig {
|
|
27
|
-
|
|
28
|
+
const config: ProviderConfig = {
|
|
28
29
|
baseUrl: apiRoot,
|
|
29
|
-
apiKey: `$${apiKeyEnvVar}`,
|
|
30
30
|
api: "openai-completions",
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
// Keyless server (skip_api_key_verification): no auth header. Pi rejects
|
|
32
|
+
// authHeader:true with no key, and resolveConfigValueOrThrow would throw
|
|
33
|
+
// on an unset $OMLX_API_KEY — so both apiKey and authHeader stay off.
|
|
34
|
+
authHeader: !options.keyless,
|
|
35
|
+
streamSimple: (model, context, streamOptions) =>
|
|
33
36
|
streamOmlxOpenAICompletions(
|
|
34
37
|
model,
|
|
35
38
|
context,
|
|
36
|
-
|
|
39
|
+
streamOptions,
|
|
37
40
|
resolveFirstDeltaTimeoutMs(),
|
|
38
41
|
onStreamTimeout,
|
|
39
42
|
),
|
|
40
43
|
models: models.map(toProviderModel),
|
|
41
44
|
};
|
|
45
|
+
if (!options.keyless) config.apiKey = `$${apiKeyEnvVar}`;
|
|
46
|
+
return config;
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
function requirePositive(
|
|
@@ -59,11 +64,11 @@ function toProviderModel(m: OmlxModel): ProviderModelConfig {
|
|
|
59
64
|
name: m.displayName ?? m.id,
|
|
60
65
|
reasoning,
|
|
61
66
|
input: m.modelType === "vlm" ? ["text", "image"] : ["text"],
|
|
62
|
-
cost: FREE_COST,
|
|
67
|
+
cost: { ...FREE_COST },
|
|
63
68
|
contextWindow: requirePositive(m.contextWindow, m.id, "max_context_window"),
|
|
64
69
|
maxTokens: requirePositive(m.maxTokens, m.id, "max_tokens"),
|
|
65
70
|
compat: reasoning
|
|
66
71
|
? { ...BASE_COMPAT, thinkingFormat: thinkingFormatFor(m.reasoningParser) }
|
|
67
|
-
: BASE_COMPAT,
|
|
72
|
+
: { ...BASE_COMPAT },
|
|
68
73
|
};
|
|
69
74
|
}
|
package/src/repeat-stop.ts
CHANGED
|
@@ -29,11 +29,8 @@ function extractAssistantParts(message: AssistantMessage): AssistantParts {
|
|
|
29
29
|
function lastAssistantMessage(
|
|
30
30
|
messages: Message[],
|
|
31
31
|
): AssistantMessage | undefined {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (m.role === "assistant") return m;
|
|
35
|
-
}
|
|
36
|
-
return undefined;
|
|
32
|
+
const last = messages.at(-1);
|
|
33
|
+
return last?.role === "assistant" ? last : undefined;
|
|
37
34
|
}
|
|
38
35
|
|
|
39
36
|
function bigramCounts(s: string): Map<string, number> {
|
package/src/stream-events.ts
CHANGED
package/src/stream-writer.ts
CHANGED
|
@@ -21,6 +21,13 @@ export class StreamWriter {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
push(event: AssistantMessageEvent): void {
|
|
24
|
+
if (event.type === "start") {
|
|
25
|
+
if (!this.startPushed) {
|
|
26
|
+
this.stream.push(this.startEvent ?? event);
|
|
27
|
+
this.startPushed = true;
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
24
31
|
if (!this.startPushed) {
|
|
25
32
|
this.stream.push(
|
|
26
33
|
this.startEvent ?? {
|
package/src/stream.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
type Model,
|
|
8
8
|
type SimpleStreamOptions,
|
|
9
9
|
} from "@earendil-works/pi-ai";
|
|
10
|
-
import { streamSimple as streamSimpleOpenAICompletions } from "@earendil-works/pi-ai/
|
|
10
|
+
import { streamSimple as streamSimpleOpenAICompletions } from "@earendil-works/pi-ai/compat";
|
|
11
11
|
import { normalizeErrorEvent } from "./overflow.ts";
|
|
12
12
|
import { isRepeatStop } from "./repeat-stop.ts";
|
|
13
13
|
import {
|
|
@@ -104,10 +104,17 @@ async function runAttempt(
|
|
|
104
104
|
writer.push(normalizeErrorEvent(event));
|
|
105
105
|
if (event.type === "done" || event.type === "error") break;
|
|
106
106
|
}
|
|
107
|
+
} catch (err) {
|
|
108
|
+
if (timedOut) return "timed-out";
|
|
109
|
+
throw err;
|
|
107
110
|
} finally {
|
|
108
111
|
clearTimeout(timer);
|
|
109
112
|
}
|
|
110
113
|
|
|
114
|
+
if (!timedOut) {
|
|
115
|
+
for (const held of bufferedThinking) writer.push(held);
|
|
116
|
+
}
|
|
117
|
+
|
|
111
118
|
return timedOut ? "timed-out" : "completed";
|
|
112
119
|
}
|
|
113
120
|
|
package/src/thinking-format.ts
CHANGED
package/.atl/skill-registry.md
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Skill Registry — pi-omlx-picker
|
|
2
|
-
|
|
3
|
-
<!-- Auto-generated by gentle-pi extensions/skill-registry.ts. Run /skill-registry:refresh to regenerate. -->
|
|
4
|
-
|
|
5
|
-
Last updated: 2026-06-28
|
|
6
|
-
|
|
7
|
-
## Sources scanned
|
|
8
|
-
|
|
9
|
-
- .claude/skills
|
|
10
|
-
- .codex/skills
|
|
11
|
-
- .pi/skills
|
|
12
|
-
- .agents/skills
|
|
13
|
-
- /Users/davidaberg/.pi/agent/skills
|
|
14
|
-
- /Users/davidaberg/.config/agents/skills
|
|
15
|
-
- /Users/davidaberg/.agents/skills
|
|
16
|
-
- /Users/davidaberg/.config/opencode/skills
|
|
17
|
-
- /Users/davidaberg/.claude/skills
|
|
18
|
-
- /Users/davidaberg/.copilot/skills
|
|
19
|
-
- /Users/davidaberg/.codex/skills
|
|
20
|
-
|
|
21
|
-
## Contract
|
|
22
|
-
|
|
23
|
-
**Delegator use only.** This registry is an index, not a summary. Any agent that launches subagents reads it to select relevant skills, then passes exact `SKILL.md` paths for the subagent to read before work.
|
|
24
|
-
|
|
25
|
-
`SKILL.md` remains the source of truth. Do not inject generated summaries or compact rules by default; pass paths so subagents load the full runtime contract and preserve author intent.
|
|
26
|
-
|
|
27
|
-
## Skills
|
|
28
|
-
|
|
29
|
-
| Skill | Trigger / description | Scope | Path |
|
|
30
|
-
| --- | --- | --- | --- |
|
|
31
|
-
| `building-workflows` | Use when authoring a Claude Code dynamic Workflow script (the JS passed to the Workflow tool) — fanning out subagents, choosing pipeline vs parallel, forcing structured output with schemas, isolating parallel file edits, or writing a saved/named workflow like deliver/deep-research. Covers the agent()/pipeline()/parallel()/phase()/log() API, the meta literal, sessionKey, worktree isolation, and concurrency limits. | user | `/Users/davidaberg/.claude/skills/building-workflows/SKILL.md` |
|
|
32
|
-
| `caveman` | Ultra-compressed communication mode. Cuts token usage ~75% by dropping filler, articles, and pleasantries while keeping full technical accuracy. Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens", "be brief", or invokes /caveman. | user | `/Users/davidaberg/.claude/skills/caveman/SKILL.md` |
|
|
33
|
-
| `design-an-interface` | Generate multiple radically different interface designs for a module using parallel sub-agents. Use when user wants to design an API, explore interface options, compare module shapes, or mentions "design it twice". | user | `/Users/davidaberg/.claude/skills/design-an-interface/SKILL.md` |
|
|
34
|
-
| `diagnose` | Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression. | user | `/Users/davidaberg/.claude/skills/diagnose/SKILL.md` |
|
|
35
|
-
| `edit-article` | Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft. | user | `/Users/davidaberg/.claude/skills/edit-article/SKILL.md` |
|
|
36
|
-
| `git-guardrails-claude-code` | Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute. Use when user wants to prevent destructive git operations, add git safety hooks, or block git push/reset in Claude Code. | user | `/Users/davidaberg/.claude/skills/git-guardrails-claude-code/SKILL.md` |
|
|
37
|
-
| `grill-me` | Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me". | user | `/Users/davidaberg/.claude/skills/grill-me/SKILL.md` |
|
|
38
|
-
| `grill-with-docs` | Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions. | user | `/Users/davidaberg/.claude/skills/grill-with-docs/SKILL.md` |
|
|
39
|
-
| `handoff` | Compact the current conversation into a handoff document for another agent to pick up. | user | `/Users/davidaberg/.claude/skills/handoff/SKILL.md` |
|
|
40
|
-
| `imagegen` | Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG/vector/code-native assets, extending an established icon or logo system, or building the visual directly in HTML/CSS/canvas. | user | `/Users/davidaberg/.codex/skills/.system/imagegen/SKILL.md` |
|
|
41
|
-
| `improve-codebase-architecture` | Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. | user | `/Users/davidaberg/.claude/skills/improve-codebase-architecture/SKILL.md` |
|
|
42
|
-
| `lean-ctx` | Context Runtime for AI Agents — 69 MCP tools, 10 read modes, 60+ shell patterns, tree-sitter AST for 18 languages. Compresses LLM context by up to 99%. Use when reading files, running shell commands, searching code, or exploring directories. Auto-installs if not present. | user | `/Users/davidaberg/.claude/skills/lean-ctx/SKILL.md` |
|
|
43
|
-
| `migrate-to-shoehorn` | Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data. | user | `/Users/davidaberg/.claude/skills/migrate-to-shoehorn/SKILL.md` |
|
|
44
|
-
| `obsidian-vault` | Search, create, and manage notes in the Obsidian vault with wikilinks and index notes. Use when user wants to find, create, or organize notes in Obsidian. | user | `/Users/davidaberg/.claude/skills/obsidian-vault/SKILL.md` |
|
|
45
|
-
| `openai-docs` | Use when the user asks how to build with OpenAI products or APIs, asks about Codex itself or choosing Codex surfaces, needs up-to-date official documentation with citations, help choosing the latest model for a use case, or model upgrade and prompt-upgrade guidance; use OpenAI docs MCP tools for non-Codex docs questions, use the Codex manual helper first for broad Codex self-knowledge, and restrict fallback browsing to official OpenAI domains. | user | `/Users/davidaberg/.codex/skills/.system/openai-docs/SKILL.md` |
|
|
46
|
-
| `plugin-creator` | Create and scaffold plugin directories for Codex with a required `.codex-plugin/plugin.json`, optional plugin folders/files, valid manifest defaults, and personal-marketplace entries by default. Use when Codex needs to create a new personal plugin, add optional plugin structure, generate or update marketplace entries for plugin ordering and availability metadata, or update an existing local plugin during development with the CLI-driven cachebuster and reinstall flow. | user | `/Users/davidaberg/.codex/skills/.system/plugin-creator/SKILL.md` |
|
|
47
|
-
| `prototype` | Build a throwaway prototype to flesh out a design before committing to it. Routes between two branches — a runnable terminal app for state/business-logic questions, or several radically different UI variations toggleable from one route. Use when the user wants to prototype, sanity-check a data model or state machine, mock up a UI, explore design options, or says "prototype this", "let me play with it", "try a few designs". | user | `/Users/davidaberg/.claude/skills/prototype/SKILL.md` |
|
|
48
|
-
| `qa` | Interactive QA session where user reports bugs or issues conversationally, and the agent files GitHub issues. Explores the codebase in the background for context and domain language. Use when user wants to report bugs, do QA, file issues conversationally, or mentions "QA session". | user | `/Users/davidaberg/.claude/skills/qa/SKILL.md` |
|
|
49
|
-
| `request-refactor-plan` | Create a detailed refactor plan with tiny commits via user interview, then file it as a GitHub issue. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps. | user | `/Users/davidaberg/.claude/skills/request-refactor-plan/SKILL.md` |
|
|
50
|
-
| `review` | Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/PRD asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to "review since X". | user | `/Users/davidaberg/.claude/skills/review/SKILL.md` |
|
|
51
|
-
| `scaffold-exercises` | Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section. | user | `/Users/davidaberg/.claude/skills/scaffold-exercises/SKILL.md` |
|
|
52
|
-
| `setup-matt-pocock-skills` | Sets up an `## Agent skills` block in AGENTS.md/CLAUDE.md and `docs/agents/` so the engineering skills know this repo's issue tracker (GitHub or local markdown), triage label vocabulary, and domain doc layout. Run before first use of `to-issues`, `to-prd`, `triage`, `diagnose`, `tdd`, `improve-codebase-architecture`, or `zoom-out` — or if those skills appear to be missing context about the issue tracker, triage labels, or domain docs. | user | `/Users/davidaberg/.claude/skills/setup-matt-pocock-skills/SKILL.md` |
|
|
53
|
-
| `setup-pre-commit` | Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing. | user | `/Users/davidaberg/.claude/skills/setup-pre-commit/SKILL.md` |
|
|
54
|
-
| `skill-creator` | Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Codex's capabilities with specialized knowledge, workflows, or tool integrations. | user | `/Users/davidaberg/.codex/skills/.system/skill-creator/SKILL.md` |
|
|
55
|
-
| `skill-installer` | Install Codex skills into $CODEX_HOME/skills from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos). | user | `/Users/davidaberg/.codex/skills/.system/skill-installer/SKILL.md` |
|
|
56
|
-
| `supacode-cli` | Control Supacode from the terminal. Use when running Supacode CLI commands, managing worktrees, tabs, and surfaces programmatically, or when inside a Supacode terminal session. | user | `/Users/davidaberg/.pi/agent/skills/supacode-cli/SKILL.md` |
|
|
57
|
-
| `tdd` | Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD, mentions "red-green-refactor", wants integration tests, or asks for test-first development. | user | `/Users/davidaberg/.claude/skills/tdd/SKILL.md` |
|
|
58
|
-
| `teach` | Teach the user a new skill or concept, within this workspace. | user | `/Users/davidaberg/.claude/skills/teach/SKILL.md` |
|
|
59
|
-
| `to-issues` | Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices. Use when user wants to convert a plan into issues, create implementation tickets, or break down work into issues. | user | `/Users/davidaberg/.claude/skills/to-issues/SKILL.md` |
|
|
60
|
-
| `to-prd` | Turn the current conversation context into a PRD and publish it to the project issue tracker. Use when user wants to create a PRD from the current context. | user | `/Users/davidaberg/.claude/skills/to-prd/SKILL.md` |
|
|
61
|
-
| `triage` | Triage issues through a state machine driven by triage roles. Use when user wants to create an issue, triage issues, review incoming bugs or feature requests, prepare issues for an AFK agent, or manage issue workflow. | user | `/Users/davidaberg/.claude/skills/triage/SKILL.md` |
|
|
62
|
-
| `ubiquitous-language` | Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD". | user | `/Users/davidaberg/.claude/skills/ubiquitous-language/SKILL.md` |
|
|
63
|
-
| `workflow-creator` | Author runnable workflow scripts for Claude Code's Workflow tool — deterministic multi-agent orchestration files that fan out fresh-context subagents under plain JavaScript control flow. Use this skill whenever the user wants to create, write, build, scaffold, design, or fix a workflow: "make a workflow", "create a workflow for X", "write a workflow", "turn this into a workflow", "scaffold a multi-agent pipeline", "orchestrate this with subagents deterministically", or any request to author or edit a .js file under .claude/workflows/. Also use it when the user is confused about the workflow script format — the meta block, agent()/parallel()/ pipeline()/phase(), schemas, the determinism rules — or when a workflow errors and needs debugging. Trigger this even when the user only describes a repeatable multi-step or parallel job and seems to want it packaged as a workflow, even if they never say the word "workflow". Do NOT use it to merely run an existing workflow, or for a one-off single-subagent task. | user | `/Users/davidaberg/.claude/skills/workflows/SKILL.md` |
|
|
64
|
-
| `write-a-skill` | Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill. | user | `/Users/davidaberg/.claude/skills/write-a-skill/SKILL.md` |
|
|
65
|
-
| `writing-beats` | Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument. | user | `/Users/davidaberg/.claude/skills/writing-beats/SKILL.md` |
|
|
66
|
-
| `writing-fragments` | Grilling session that mines the user for fragments — heterogeneous nuggets of writing (claims, vignettes, sharp sentences, half-thoughts) — and appends them to a single document as raw material for a future article. Use when the user wants to develop ideas before imposing structure, or mentions "fragments", "ideate", or "raw material" for writing. | user | `/Users/davidaberg/.claude/skills/writing-fragments/SKILL.md` |
|
|
67
|
-
| `writing-shape` | Take a markdown file of raw material and shape it into an article through a conversational session — drafting candidate openings, growing the piece paragraph by paragraph, arguing about format (lists, tables, callouts, quotes) at each step. Use when the user has a pile of notes, fragments, or a rough draft and wants help turning it into something publishable. | user | `/Users/davidaberg/.claude/skills/writing-shape/SKILL.md` |
|
|
68
|
-
| `zoom-out` | Tell the agent to zoom out and give broader context or a higher-level perspective. Use when you're unfamiliar with a section of code or need to understand how it fits into the bigger picture. | user | `/Users/davidaberg/.claude/skills/zoom-out/SKILL.md` |
|
|
69
|
-
|
|
70
|
-
## Loading protocol
|
|
71
|
-
|
|
72
|
-
1. Match task context and target files against the `Trigger / description` column.
|
|
73
|
-
2. Pass only the matching `Path` values to the subagent under `## Skills to load before work`.
|
|
74
|
-
3. Instruct the subagent to read those exact `SKILL.md` files before reading, writing, reviewing, testing, or creating artifacts.
|
|
75
|
-
4. If no matching skill exists, proceed without project skill injection and report `skill_resolution: none`.
|
package/.omt/.draft.json
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skills": {
|
|
3
|
-
"15-pi/building-workflows": true,
|
|
4
|
-
"15-pi/pi-build-extension": true,
|
|
5
|
-
"15-pi/pi-customization": true,
|
|
6
|
-
"16-code-organization/api-and-interface-design": true,
|
|
7
|
-
"16-code-organization/arch-blueprint": true,
|
|
8
|
-
"16-code-organization/arch-improve": true,
|
|
9
|
-
"16-code-organization/clean-ddd-hexagonal": true,
|
|
10
|
-
"16-code-organization/cli-creator": true,
|
|
11
|
-
"16-code-organization/cli-design": true,
|
|
12
|
-
"16-code-organization/code-simplification": true,
|
|
13
|
-
"16-code-organization/dry-principle": true,
|
|
14
|
-
"16-code-organization/dry-refactoring": true,
|
|
15
|
-
"16-code-organization/file-organizer": true,
|
|
16
|
-
"16-code-organization/golang-modular-structure": true,
|
|
17
|
-
"16-code-organization/pragmatic-programmer": true,
|
|
18
|
-
"16-code-organization/python-modular-structure": true,
|
|
19
|
-
"16-code-organization/source-driven-development": true,
|
|
20
|
-
"16-code-organization/techdebt-finder": true
|
|
21
|
-
},
|
|
22
|
-
"tools": {},
|
|
23
|
-
"files": {
|
|
24
|
-
"dot-agent": true,
|
|
25
|
-
"dot-claude": true,
|
|
26
|
-
"dot-codex": true,
|
|
27
|
-
"dot-pi": true
|
|
28
|
-
},
|
|
29
|
-
"references": {},
|
|
30
|
-
"wiki": {},
|
|
31
|
-
"pi": {
|
|
32
|
-
"../../Developer/pi-omlx-picker": true,
|
|
33
|
-
"../../Developer/pi-retry": true,
|
|
34
|
-
"git:github.com/jo-inc/pi-reflect": true,
|
|
35
|
-
"git:github.com/xRyul/pi-nvidia-nim": true,
|
|
36
|
-
"npm:@gotgenes/pi-autoformat": true,
|
|
37
|
-
"npm:@gotgenes/pi-colgrep": true,
|
|
38
|
-
"npm:@juanibiapina/pi-extension-settings": true,
|
|
39
|
-
"npm:@juicesharp/rpiv-ask-user-question": true,
|
|
40
|
-
"npm:@juicesharp/rpiv-btw": true,
|
|
41
|
-
"npm:@juicesharp/rpiv-todo": true,
|
|
42
|
-
"npm:@zosmaai/pi-llm-wiki": true,
|
|
43
|
-
"npm:pi-blackhole": true,
|
|
44
|
-
"npm:pi-boomerang": true,
|
|
45
|
-
"npm:pi-extension-toolkit": true,
|
|
46
|
-
"npm:pi-lean-ctx": true,
|
|
47
|
-
"npm:pi-lens": true,
|
|
48
|
-
"npm:pi-mcp-adapter": true,
|
|
49
|
-
"npm:pi-web-access": true
|
|
50
|
-
},
|
|
51
|
-
"workflows": {},
|
|
52
|
-
"tasks": {
|
|
53
|
-
"repo-overview": true,
|
|
54
|
-
"verify": true
|
|
55
|
-
},
|
|
56
|
-
"mcp": {},
|
|
57
|
-
"fileSegments": {
|
|
58
|
-
"claude-md": {
|
|
59
|
-
"CLAUDE.md/code-best-practices": true,
|
|
60
|
-
"CLAUDE.md/golden-rule": true
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
package/.omt/files/Taskfile.yaml
DELETED
package/.omt/files/tasks.toml
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# omt task manifest — source of truth for generated runners.
|
|
2
|
-
# Edit selections via omt; regenerate mise.toml and Taskfile.yaml from here.
|
|
3
|
-
|
|
4
|
-
[[task]]
|
|
5
|
-
name = "repo:overview"
|
|
6
|
-
run = ".ai/tasks/repo-overview.sh"
|
|
7
|
-
|
|
8
|
-
[[task]]
|
|
9
|
-
name = "verify"
|
|
10
|
-
run = ".ai/tasks/verify.sh"
|
package/.omt/plan.resolved
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"activePlan": "minimal",
|
|
3
|
-
"pi": {
|
|
4
|
-
"baseCmd": "",
|
|
5
|
-
"extensions": [
|
|
6
|
-
{
|
|
7
|
-
"id": "../../Developer/pi-omlx-picker",
|
|
8
|
-
"path": "/Users/davidaberg/Developer/pi-omlx-picker"
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": "../../Developer/pi-retry",
|
|
12
|
-
"path": "/Users/davidaberg/Developer/pi-retry"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"id": "git:github.com/jo-inc/pi-reflect",
|
|
16
|
-
"path": "/Users/davidaberg/.pi/agent/git/github.com/jo-inc/pi-reflect"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": "git:github.com/xRyul/pi-nvidia-nim",
|
|
20
|
-
"path": "/Users/davidaberg/.pi/agent/git/github.com/xRyul/pi-nvidia-nim"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": "npm:@gotgenes/pi-autoformat",
|
|
24
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/@gotgenes/pi-autoformat"
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"id": "npm:@gotgenes/pi-colgrep",
|
|
28
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/@gotgenes/pi-colgrep"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"id": "npm:@juanibiapina/pi-extension-settings",
|
|
32
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/@juanibiapina/pi-extension-settings"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"id": "npm:@juicesharp/rpiv-ask-user-question",
|
|
36
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/@juicesharp/rpiv-ask-user-question"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"id": "npm:@juicesharp/rpiv-btw",
|
|
40
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/@juicesharp/rpiv-btw"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"id": "npm:@juicesharp/rpiv-todo",
|
|
44
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/@juicesharp/rpiv-todo"
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"id": "npm:@zosmaai/pi-llm-wiki",
|
|
48
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/@zosmaai/pi-llm-wiki"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"id": "npm:pi-blackhole",
|
|
52
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/pi-blackhole"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": "npm:pi-boomerang",
|
|
56
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/pi-boomerang"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"id": "npm:pi-extension-toolkit",
|
|
60
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/pi-extension-toolkit"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"id": "npm:pi-lean-ctx",
|
|
64
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/pi-lean-ctx"
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"id": "npm:pi-lens",
|
|
68
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/pi-lens"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": "npm:pi-mcp-adapter",
|
|
72
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/pi-mcp-adapter"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"id": "npm:pi-web-access",
|
|
76
|
-
"path": "/Users/davidaberg/.pi/agent/npm/node_modules/pi-web-access"
|
|
77
|
-
}
|
|
78
|
-
],
|
|
79
|
-
"skills": [
|
|
80
|
-
{
|
|
81
|
-
"id": "15-pi/building-workflows",
|
|
82
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/15-pi/building-workflows"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"id": "15-pi/pi-build-extension",
|
|
86
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/15-pi/pi-build-extension"
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
"id": "15-pi/pi-customization",
|
|
90
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/15-pi/pi-customization"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"id": "16-code-organization/api-and-interface-design",
|
|
94
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/api-and-interface-design"
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"id": "16-code-organization/arch-blueprint",
|
|
98
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/arch-blueprint"
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"id": "16-code-organization/arch-improve",
|
|
102
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/arch-improve"
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"id": "16-code-organization/clean-ddd-hexagonal",
|
|
106
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/clean-ddd-hexagonal"
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"id": "16-code-organization/cli-creator",
|
|
110
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/cli-creator"
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
"id": "16-code-organization/cli-design",
|
|
114
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/cli-design"
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"id": "16-code-organization/code-simplification",
|
|
118
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/code-simplification"
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
"id": "16-code-organization/dry-principle",
|
|
122
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/dry-principle"
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"id": "16-code-organization/dry-refactoring",
|
|
126
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/dry-refactoring"
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"id": "16-code-organization/file-organizer",
|
|
130
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/file-organizer"
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
"id": "16-code-organization/golang-modular-structure",
|
|
134
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/golang-modular-structure"
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
"id": "16-code-organization/pragmatic-programmer",
|
|
138
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/pragmatic-programmer"
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"id": "16-code-organization/python-modular-structure",
|
|
142
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/python-modular-structure"
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
"id": "16-code-organization/source-driven-development",
|
|
146
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/source-driven-development"
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
"id": "16-code-organization/techdebt-finder",
|
|
150
|
-
"path": "/Users/davidaberg/Developer/skills/.agents/skills/16-code-organization/techdebt-finder"
|
|
151
|
-
}
|
|
152
|
-
]
|
|
153
|
-
}
|
|
154
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
version: 1
|
|
2
|
-
sections:
|
|
3
|
-
skills:
|
|
4
|
-
selected:
|
|
5
|
-
- 15-pi/building-workflows
|
|
6
|
-
- 15-pi/pi-build-extension
|
|
7
|
-
- 15-pi/pi-customization
|
|
8
|
-
- 16-code-organization/api-and-interface-design
|
|
9
|
-
- 16-code-organization/arch-blueprint
|
|
10
|
-
- 16-code-organization/arch-improve
|
|
11
|
-
- 16-code-organization/clean-ddd-hexagonal
|
|
12
|
-
- 16-code-organization/cli-creator
|
|
13
|
-
- 16-code-organization/cli-design
|
|
14
|
-
- 16-code-organization/code-simplification
|
|
15
|
-
- 16-code-organization/dry-principle
|
|
16
|
-
- 16-code-organization/dry-refactoring
|
|
17
|
-
- 16-code-organization/file-organizer
|
|
18
|
-
- 16-code-organization/golang-modular-structure
|
|
19
|
-
- 16-code-organization/pragmatic-programmer
|
|
20
|
-
- 16-code-organization/python-modular-structure
|
|
21
|
-
- 16-code-organization/source-driven-development
|
|
22
|
-
- 16-code-organization/techdebt-finder
|
|
23
|
-
pi:
|
|
24
|
-
selected:
|
|
25
|
-
- autoformat
|
|
26
|
-
- blackhole
|
|
27
|
-
- boomerang
|
|
28
|
-
- colgrep
|
|
29
|
-
- extension-settings
|
|
30
|
-
- extension-toolkit
|
|
31
|
-
- lean-ctx
|
|
32
|
-
- lens
|
|
33
|
-
- llm-wiki
|
|
34
|
-
- mcp-adapter
|
|
35
|
-
- nvidia-nim
|
|
36
|
-
- omlx-picker
|
|
37
|
-
- reflect
|
|
38
|
-
- retry
|
|
39
|
-
- rpiv-ask-user-question
|
|
40
|
-
- rpiv-btw
|
|
41
|
-
- rpiv-todo
|
|
42
|
-
- web-access
|
|
43
|
-
tasks:
|
|
44
|
-
selected:
|
|
45
|
-
- repo:overview
|
|
46
|
-
- verify
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
version: 1
|
|
2
|
-
sections:
|
|
3
|
-
skills:
|
|
4
|
-
selected:
|
|
5
|
-
- 15-pi/building-workflows
|
|
6
|
-
- 15-pi/pi-build-extension
|
|
7
|
-
- 15-pi/pi-customization
|
|
8
|
-
- 16-code-organization/api-and-interface-design
|
|
9
|
-
- 16-code-organization/arch-blueprint
|
|
10
|
-
- 16-code-organization/arch-improve
|
|
11
|
-
- 16-code-organization/clean-ddd-hexagonal
|
|
12
|
-
- 16-code-organization/cli-creator
|
|
13
|
-
- 16-code-organization/cli-design
|
|
14
|
-
- 16-code-organization/code-simplification
|
|
15
|
-
- 16-code-organization/dry-principle
|
|
16
|
-
- 16-code-organization/dry-refactoring
|
|
17
|
-
- 16-code-organization/file-organizer
|
|
18
|
-
- 16-code-organization/golang-modular-structure
|
|
19
|
-
- 16-code-organization/pragmatic-programmer
|
|
20
|
-
- 16-code-organization/python-modular-structure
|
|
21
|
-
- 16-code-organization/source-driven-development
|
|
22
|
-
- 16-code-organization/techdebt-finder
|
|
23
|
-
pi:
|
|
24
|
-
selected:
|
|
25
|
-
- autoformat
|
|
26
|
-
- blackhole
|
|
27
|
-
- boomerang
|
|
28
|
-
- colgrep
|
|
29
|
-
- extension-settings
|
|
30
|
-
- extension-toolkit
|
|
31
|
-
- lean-ctx
|
|
32
|
-
- lens
|
|
33
|
-
- llm-wiki
|
|
34
|
-
- mcp-adapter
|
|
35
|
-
- nvidia-nim
|
|
36
|
-
- omlx-picker
|
|
37
|
-
- reflect
|
|
38
|
-
- retry
|
|
39
|
-
- rpiv-ask-user-question
|
|
40
|
-
- rpiv-btw
|
|
41
|
-
- rpiv-todo
|
|
42
|
-
- web-access
|
|
43
|
-
tasks:
|
|
44
|
-
selected:
|
|
45
|
-
- repo:overview
|
|
46
|
-
- verify
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
version: 1
|
|
2
|
-
sections:
|
|
3
|
-
skills:
|
|
4
|
-
selected:
|
|
5
|
-
- 15-pi/building-workflows
|
|
6
|
-
- 15-pi/pi-build-extension
|
|
7
|
-
- 15-pi/pi-customization
|
|
8
|
-
- 16-code-organization/api-and-interface-design
|
|
9
|
-
- 16-code-organization/arch-blueprint
|
|
10
|
-
- 16-code-organization/arch-improve
|
|
11
|
-
- 16-code-organization/clean-ddd-hexagonal
|
|
12
|
-
- 16-code-organization/cli-creator
|
|
13
|
-
- 16-code-organization/cli-design
|
|
14
|
-
- 16-code-organization/code-simplification
|
|
15
|
-
- 16-code-organization/dry-principle
|
|
16
|
-
- 16-code-organization/dry-refactoring
|
|
17
|
-
- 16-code-organization/file-organizer
|
|
18
|
-
- 16-code-organization/golang-modular-structure
|
|
19
|
-
- 16-code-organization/pragmatic-programmer
|
|
20
|
-
- 16-code-organization/python-modular-structure
|
|
21
|
-
- 16-code-organization/source-driven-development
|
|
22
|
-
- 16-code-organization/techdebt-finder
|
|
23
|
-
pi:
|
|
24
|
-
selected:
|
|
25
|
-
- autoformat
|
|
26
|
-
- blackhole
|
|
27
|
-
- boomerang
|
|
28
|
-
- colgrep
|
|
29
|
-
- extension-settings
|
|
30
|
-
- extension-toolkit
|
|
31
|
-
- lean-ctx
|
|
32
|
-
- lens
|
|
33
|
-
- llm-wiki
|
|
34
|
-
- mcp-adapter
|
|
35
|
-
- nvidia-nim
|
|
36
|
-
- reflect
|
|
37
|
-
- retry
|
|
38
|
-
- rpiv-ask-user-question
|
|
39
|
-
- rpiv-btw
|
|
40
|
-
- rpiv-todo
|
|
41
|
-
- web-access
|
|
42
|
-
tasks:
|
|
43
|
-
selected:
|
|
44
|
-
- repo:overview
|
|
45
|
-
- verify
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
version: 1
|
|
2
|
-
sections:
|
|
3
|
-
skills:
|
|
4
|
-
selected:
|
|
5
|
-
- 15-pi/building-workflows
|
|
6
|
-
- 15-pi/pi-build-extension
|
|
7
|
-
- 15-pi/pi-customization
|
|
8
|
-
- 16-code-organization/api-and-interface-design
|
|
9
|
-
- 16-code-organization/arch-blueprint
|
|
10
|
-
- 16-code-organization/arch-improve
|
|
11
|
-
- 16-code-organization/clean-ddd-hexagonal
|
|
12
|
-
- 16-code-organization/cli-creator
|
|
13
|
-
- 16-code-organization/cli-design
|
|
14
|
-
- 16-code-organization/code-simplification
|
|
15
|
-
- 16-code-organization/dry-principle
|
|
16
|
-
- 16-code-organization/dry-refactoring
|
|
17
|
-
- 16-code-organization/file-organizer
|
|
18
|
-
- 16-code-organization/golang-modular-structure
|
|
19
|
-
- 16-code-organization/pragmatic-programmer
|
|
20
|
-
- 16-code-organization/python-modular-structure
|
|
21
|
-
- 16-code-organization/source-driven-development
|
|
22
|
-
- 16-code-organization/techdebt-finder
|
|
23
|
-
pi:
|
|
24
|
-
selected:
|
|
25
|
-
- autoformat
|
|
26
|
-
- blackhole
|
|
27
|
-
- boomerang
|
|
28
|
-
- colgrep
|
|
29
|
-
- extension-settings
|
|
30
|
-
- extension-toolkit
|
|
31
|
-
- lean-ctx
|
|
32
|
-
- lens
|
|
33
|
-
- llm-wiki
|
|
34
|
-
- mcp-adapter
|
|
35
|
-
- nvidia-nim
|
|
36
|
-
- reflect
|
|
37
|
-
- retry
|
|
38
|
-
- rpiv-ask-user-question
|
|
39
|
-
- rpiv-btw
|
|
40
|
-
- rpiv-todo
|
|
41
|
-
- web-access
|
|
42
|
-
tasks:
|
|
43
|
-
selected:
|
|
44
|
-
- repo-overview
|
|
45
|
-
- verify
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
version: 1
|
|
2
|
-
sections:
|
|
3
|
-
skills:
|
|
4
|
-
selected:
|
|
5
|
-
- 15-pi/building-workflows
|
|
6
|
-
- 15-pi/pi-build-extension
|
|
7
|
-
- 15-pi/pi-customization
|
|
8
|
-
- 16-code-organization/api-and-interface-design
|
|
9
|
-
- 16-code-organization/arch-blueprint
|
|
10
|
-
- 16-code-organization/arch-improve
|
|
11
|
-
- 16-code-organization/clean-ddd-hexagonal
|
|
12
|
-
- 16-code-organization/cli-creator
|
|
13
|
-
- 16-code-organization/cli-design
|
|
14
|
-
- 16-code-organization/code-simplification
|
|
15
|
-
- 16-code-organization/dry-principle
|
|
16
|
-
- 16-code-organization/dry-refactoring
|
|
17
|
-
- 16-code-organization/file-organizer
|
|
18
|
-
- 16-code-organization/golang-modular-structure
|
|
19
|
-
- 16-code-organization/pragmatic-programmer
|
|
20
|
-
- 16-code-organization/python-modular-structure
|
|
21
|
-
- 16-code-organization/source-driven-development
|
|
22
|
-
- 16-code-organization/techdebt-finder
|
|
23
|
-
pi:
|
|
24
|
-
selected:
|
|
25
|
-
- autoformat
|
|
26
|
-
- blackhole
|
|
27
|
-
- boomerang
|
|
28
|
-
- colgrep
|
|
29
|
-
- extension-settings
|
|
30
|
-
- extension-toolkit
|
|
31
|
-
- lean-ctx
|
|
32
|
-
- lens
|
|
33
|
-
- llm-wiki
|
|
34
|
-
- mcp-adapter
|
|
35
|
-
- nvidia-nim
|
|
36
|
-
- omlx-picker
|
|
37
|
-
- reflect
|
|
38
|
-
- retry
|
|
39
|
-
- rpiv-ask-user-question
|
|
40
|
-
- rpiv-btw
|
|
41
|
-
- rpiv-todo
|
|
42
|
-
- web-access
|
|
43
|
-
tasks:
|
|
44
|
-
selected:
|
|
45
|
-
- repo-overview
|
|
46
|
-
- verify
|
package/.omt/tasks/verify.sh
DELETED