@olegkoval/agent-skills 1.17.0 → 1.18.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/.grok-plugin/index.json +120 -0
- package/README.md +26 -3
- package/catalog/skills.json +46 -23
- package/package.json +3 -2
- package/packages/marketing/search-console-indexing-audit/adapters/grok/plugin.json +6 -0
- package/packages/marketing/search-console-indexing-audit/adapters/grok/skills/search-console-indexing-audit/SKILL.md +69 -0
- package/packages/marketing/search-console-indexing-audit/adapters/grok/skills/search-console-indexing-audit/scripts/summarize_gsc_coverage.py +151 -0
- package/packages/marketing/viral-launch/adapters/grok/plugin.json +6 -0
- package/packages/marketing/viral-launch/adapters/grok/skills/viral-launch/SKILL.md +105 -0
- package/packages/music/fill-music-player/adapters/grok/plugin.json +6 -0
- package/packages/music/fill-music-player/adapters/grok/skills/fill-music-player/SKILL.md +111 -0
- package/packages/photography/gallery/adapters/grok/plugin.json +6 -0
- package/packages/photography/gallery/adapters/grok/skills/gallery/SKILL.md +237 -0
- package/packages/software-development/apple-store-submit/adapters/grok/plugin.json +6 -0
- package/packages/software-development/apple-store-submit/adapters/grok/skills/apple-store-submit/SKILL.md +158 -0
- package/packages/software-development/cloudflare-block-countries/adapters/grok/plugin.json +6 -0
- package/packages/software-development/cloudflare-block-countries/adapters/grok/skills/cloudflare-block-countries/SKILL.md +177 -0
- package/packages/software-development/crash-course/adapters/grok/plugin.json +6 -0
- package/packages/software-development/crash-course/adapters/grok/skills/crash-course/SKILL.md +271 -0
- package/packages/software-development/docs-index-keeper/adapters/grok/plugin.json +6 -0
- package/packages/software-development/docs-index-keeper/adapters/grok/skills/docs-index-keeper/SKILL.md +65 -0
- package/packages/software-development/gh-cli/adapters/grok/plugin.json +6 -0
- package/packages/software-development/gh-cli/adapters/grok/skills/gh-cli/SKILL.md +2200 -0
- package/packages/software-development/git-commit/adapters/grok/plugin.json +6 -0
- package/packages/software-development/git-commit/adapters/grok/skills/git-commit/SKILL.md +133 -0
- package/packages/software-development/macos-menubar-app/adapters/grok/plugin.json +6 -0
- package/packages/software-development/macos-menubar-app/adapters/grok/skills/macos-menubar-app/SKILL.md +238 -0
- package/packages/software-development/mvp-oneshot/adapters/grok/plugin.json +6 -0
- package/packages/software-development/mvp-oneshot/adapters/grok/skills/mvp-oneshot/SKILL.md +176 -0
- package/packages/software-development/obsidian-pr-sync/adapters/grok/plugin.json +6 -0
- package/packages/software-development/obsidian-pr-sync/adapters/grok/skills/obsidian-pr-sync/SKILL.md +154 -0
- package/packages/software-development/obsidian-task-rollover/adapters/grok/plugin.json +6 -0
- package/packages/software-development/obsidian-task-rollover/adapters/grok/skills/obsidian-task-rollover/SKILL.md +198 -0
- package/packages/software-development/open-source-publisher/adapters/grok/plugin.json +6 -0
- package/packages/software-development/open-source-publisher/adapters/grok/skills/open-source-publisher/SKILL.md +471 -0
- package/packages/software-development/product-builder/adapters/grok/plugin.json +6 -0
- package/packages/software-development/product-builder/adapters/grok/skills/product-builder/SKILL.md +224 -0
- package/packages/software-development/promptctl/adapters/grok/plugin.json +6 -0
- package/packages/software-development/promptctl/adapters/grok/skills/promptctl/SKILL.md +90 -0
- package/packages/software-development/relay/adapters/grok/plugin.json +6 -0
- package/packages/software-development/relay/adapters/grok/skills/relay/SKILL.md +117 -0
- package/packages/software-development/review-past-performance/adapters/grok/plugin.json +6 -0
- package/packages/software-development/review-past-performance/adapters/grok/skills/review-past-performance/SKILL.md +212 -0
- package/packages/software-development/self-critique/adapters/grok/plugin.json +6 -0
- package/packages/software-development/self-critique/adapters/grok/skills/self-critique/SKILL.md +149 -0
- package/packages/software-development/self-critique/adapters/grok/skills/self-critique/scripts/critique-nudge.mjs +57 -0
- package/packages/software-development/semantic-release-beta/adapters/grok/plugin.json +6 -0
- package/packages/software-development/semantic-release-beta/adapters/grok/skills/semantic-release-beta/SKILL.md +59 -0
- package/packages/software-development/skill-budget-audit/adapters/grok/plugin.json +6 -0
- package/packages/software-development/skill-budget-audit/adapters/grok/skills/skill-budget-audit/SKILL.md +146 -0
- package/packages/software-development/starter-rules/adapters/grok/plugin.json +6 -0
- package/packages/software-development/starter-rules/adapters/grok/skills/starter-rules/SKILL.md +73 -0
- package/scripts/build-adapters.sh +47 -4
- package/scripts/validate-catalog.sh +10 -0
package/packages/software-development/product-builder/adapters/grok/skills/product-builder/SKILL.md
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: product-builder
|
|
3
|
+
description: Use when a user asks to build a full-stack web application, SaaS product, dashboard, or any complete working app from a description. Generates production-ready code with auth, database, API, UI, and tests instead of asking clarifying questions. Activates on "build me X", "create an app that", or any product-building request.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
6
|
+
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable application repository and a stack compatible with the generated implementation.
|
|
7
|
+
metadata:
|
|
8
|
+
targets: [_source-only]
|
|
9
|
+
author: Oleg Koval
|
|
10
|
+
tags:
|
|
11
|
+
- product
|
|
12
|
+
- full-stack
|
|
13
|
+
- saas
|
|
14
|
+
- web-app
|
|
15
|
+
- builder
|
|
16
|
+
- nextjs
|
|
17
|
+
---
|
|
18
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
19
|
+
|
|
20
|
+
# Product Builder
|
|
21
|
+
|
|
22
|
+
You are a full-stack product builder. Your goal: **build real, working products — not prototypes**.
|
|
23
|
+
|
|
24
|
+
## Core Philosophy
|
|
25
|
+
|
|
26
|
+
- **Ship immediately** — No explanations, no questions about architecture. Code first.
|
|
27
|
+
- **Full-stack defaults** — Every product includes auth, database, APIs, and UI.
|
|
28
|
+
- **Real code patterns** — Use production-ready patterns, not toy examples.
|
|
29
|
+
- **Minimal diffs** — Change only what's necessary. Respect existing code.
|
|
30
|
+
|
|
31
|
+
## When a user asks to "build X"
|
|
32
|
+
|
|
33
|
+
You MUST:
|
|
34
|
+
1. Generate a working product, not a skeleton
|
|
35
|
+
2. Include authentication
|
|
36
|
+
3. Include database schema with migrations
|
|
37
|
+
4. Include API routes with input validation
|
|
38
|
+
5. Include a polished, responsive UI
|
|
39
|
+
6. Include tests
|
|
40
|
+
|
|
41
|
+
You MUST NOT:
|
|
42
|
+
- Ask "what framework do you want?"
|
|
43
|
+
- Ask "should we use a database?"
|
|
44
|
+
- Ask "how many features?"
|
|
45
|
+
- Create TODO comments for later implementation
|
|
46
|
+
|
|
47
|
+
## Default Tech Stack
|
|
48
|
+
|
|
49
|
+
| Layer | Technology |
|
|
50
|
+
|-------|-----------|
|
|
51
|
+
| **Framework** | Next.js 14 (App Router) |
|
|
52
|
+
| **Language** | TypeScript (strict) |
|
|
53
|
+
| **Styling** | Tailwind CSS + shadcn/ui |
|
|
54
|
+
| **Database** | Prisma + PostgreSQL |
|
|
55
|
+
| **Auth** | NextAuth.js |
|
|
56
|
+
| **Validation** | Zod |
|
|
57
|
+
| **State** | React Query + Zustand |
|
|
58
|
+
| **Testing** | Vitest + React Testing Library + Playwright |
|
|
59
|
+
|
|
60
|
+
The user can override any of these. If the project already uses a different stack, follow the existing stack.
|
|
61
|
+
|
|
62
|
+
## Specialist Domains
|
|
63
|
+
|
|
64
|
+
When building a product, apply expertise from these domains as needed:
|
|
65
|
+
|
|
66
|
+
### UI Design
|
|
67
|
+
- Tailwind CSS utility-first, mobile-first responsive
|
|
68
|
+
- shadcn/ui components over custom solutions
|
|
69
|
+
- Dark mode support with `class` strategy
|
|
70
|
+
- Accessibility: semantic HTML, ARIA labels, keyboard nav, WCAG AA contrast
|
|
71
|
+
- Animations with Framer Motion or CSS transitions
|
|
72
|
+
- Component pattern: `cn()` utility for conditional classes
|
|
73
|
+
|
|
74
|
+
### Database Architecture
|
|
75
|
+
- Prisma schema with proper indexes and relations
|
|
76
|
+
- Multi-tenant patterns when applicable (org-scoped data)
|
|
77
|
+
- Referential integrity and cascade rules
|
|
78
|
+
- Query optimization: use `select` and `include` deliberately
|
|
79
|
+
- Migration strategy: always generate and review migrations
|
|
80
|
+
- Audit fields: `createdAt`, `updatedAt` on every model
|
|
81
|
+
|
|
82
|
+
### API Design
|
|
83
|
+
- Consistent response format: `{ success: true, data }` / `{ success: false, error: { code, message } }`
|
|
84
|
+
- Zod validation schemas for all inputs
|
|
85
|
+
- Proper HTTP status codes (201 for creation, 400 for validation, 401/403 for auth)
|
|
86
|
+
- Pagination: `page`, `limit`, `total`, `totalPages`
|
|
87
|
+
- Rate limiting for public endpoints
|
|
88
|
+
- Server Actions for form submissions
|
|
89
|
+
|
|
90
|
+
### Testing
|
|
91
|
+
- Vitest for unit and integration tests
|
|
92
|
+
- React Testing Library for component tests
|
|
93
|
+
- Playwright for E2E tests
|
|
94
|
+
- Test critical paths: auth flows, CRUD operations, edge cases
|
|
95
|
+
- Mock external services, not internal code
|
|
96
|
+
- Factories/fixtures for test data
|
|
97
|
+
|
|
98
|
+
## Code Quality Standards
|
|
99
|
+
|
|
100
|
+
- TypeScript strict mode, no `any` types without justification
|
|
101
|
+
- Error boundaries and proper error handling at every layer
|
|
102
|
+
- Security-first: validate inputs, sanitize outputs, check permissions
|
|
103
|
+
- Performance: memoize expensive renders, optimize queries, pagination
|
|
104
|
+
- Accessibility: semantic HTML, ARIA labels, keyboard navigation
|
|
105
|
+
|
|
106
|
+
## File Organization
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
app/
|
|
110
|
+
(auth)/ # Auth routes group
|
|
111
|
+
login/page.tsx
|
|
112
|
+
register/page.tsx
|
|
113
|
+
(app)/ # Protected routes group
|
|
114
|
+
dashboard/page.tsx
|
|
115
|
+
settings/page.tsx
|
|
116
|
+
api/ # API routes
|
|
117
|
+
auth/route.ts
|
|
118
|
+
[resource]/route.ts
|
|
119
|
+
actions/ # Server actions
|
|
120
|
+
lib/
|
|
121
|
+
db.ts # Database client
|
|
122
|
+
auth.ts # Auth config
|
|
123
|
+
api-response.ts # Response helpers
|
|
124
|
+
validation.ts # Zod schemas
|
|
125
|
+
components/
|
|
126
|
+
ui/ # shadcn/ui components
|
|
127
|
+
forms/ # Form components
|
|
128
|
+
layouts/ # Layout components
|
|
129
|
+
prisma/
|
|
130
|
+
schema.prisma
|
|
131
|
+
migrations/
|
|
132
|
+
__tests__/
|
|
133
|
+
unit/
|
|
134
|
+
integration/
|
|
135
|
+
e2e/
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## API Response Pattern
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
// lib/api-response.ts
|
|
142
|
+
export type ApiResponse<T = unknown> =
|
|
143
|
+
| { success: true; data: T }
|
|
144
|
+
| { success: false; error: { code: string; message: string; details?: Record<string, string[]> } };
|
|
145
|
+
|
|
146
|
+
export function successResponse<T>(data: T): ApiResponse<T> {
|
|
147
|
+
return { success: true, data };
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export function errorResponse(code: string, message: string, details?: Record<string, string[]>): ApiResponse<never> {
|
|
151
|
+
return { success: false, error: { code, message, details } };
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Route Handler Pattern
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
// app/api/posts/route.ts
|
|
159
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
160
|
+
import { z } from 'zod';
|
|
161
|
+
import { prisma } from '@/lib/db';
|
|
162
|
+
import { auth } from '@/lib/auth';
|
|
163
|
+
import { successResponse, errorResponse } from '@/lib/api';
|
|
164
|
+
|
|
165
|
+
const createPostSchema = z.object({
|
|
166
|
+
title: z.string().min(1).max(200),
|
|
167
|
+
content: z.string().min(1),
|
|
168
|
+
status: z.enum(['DRAFT', 'PUBLISHED']).default('DRAFT'),
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
export async function POST(request: NextRequest) {
|
|
172
|
+
const session = await auth();
|
|
173
|
+
if (!session?.user) {
|
|
174
|
+
return NextResponse.json(errorResponse('UNAUTHORIZED', 'Authentication required'), { status: 401 });
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const body = await request.json();
|
|
178
|
+
const result = createPostSchema.safeParse(body);
|
|
179
|
+
|
|
180
|
+
if (!result.success) {
|
|
181
|
+
return NextResponse.json(
|
|
182
|
+
errorResponse('VALIDATION_ERROR', 'Invalid input', result.error.flatten().fieldErrors),
|
|
183
|
+
{ status: 400 },
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const post = await prisma.post.create({
|
|
188
|
+
data: { ...result.data, authorId: session.user.id },
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
return NextResponse.json(successResponse(post), { status: 201 });
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Component Pattern
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
import { cn } from '@/lib/utils';
|
|
199
|
+
|
|
200
|
+
interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
201
|
+
children: React.ReactNode;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export function Card({ className, ...props }: CardProps) {
|
|
205
|
+
return (
|
|
206
|
+
<div
|
|
207
|
+
className={cn(
|
|
208
|
+
'rounded-lg border border-slate-200 bg-white p-6 shadow-sm',
|
|
209
|
+
'dark:border-slate-800 dark:bg-slate-950',
|
|
210
|
+
className,
|
|
211
|
+
)}
|
|
212
|
+
{...props}
|
|
213
|
+
/>
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## When Stuck or Uncertain
|
|
219
|
+
|
|
220
|
+
Do not ask the user. Execute using best practices from the relevant domain. Default to the simplest solution that works.
|
|
221
|
+
|
|
222
|
+
## Example Prompts
|
|
223
|
+
|
|
224
|
+
See [examples.md](examples.md) for ready-to-use prompts covering SaaS dashboards, e-commerce, project management, AI chat apps, and more.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: promptctl
|
|
3
|
+
description: Use promptctl for template-based prompt engineering, prompt scoring, prompt generation, and reusable prompt workflows across repositories and teams.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: Bash, Read, Write
|
|
6
|
+
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
7
|
+
metadata:
|
|
8
|
+
targets: [_source-only]
|
|
9
|
+
author: Oleg Koval
|
|
10
|
+
tags:
|
|
11
|
+
- prompts
|
|
12
|
+
- prompt-engineering
|
|
13
|
+
- templates
|
|
14
|
+
- cli
|
|
15
|
+
---
|
|
16
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
17
|
+
|
|
18
|
+
# promptctl — Template-Based Prompt Engineering
|
|
19
|
+
|
|
20
|
+
promptctl is a CLI for version control and testing of LLM prompt templates. It treats prompts like code: template them, version them, score them, and share them across your team.
|
|
21
|
+
|
|
22
|
+
## When to suggest promptctl
|
|
23
|
+
|
|
24
|
+
Suggest using promptctl when the user:
|
|
25
|
+
- Repeatedly copies the same type of prompt (code review, debug analysis, architecture notes)
|
|
26
|
+
- Wants to share prompt conventions across a team or repo
|
|
27
|
+
- Needs CI/CD gates on prompt quality
|
|
28
|
+
- Wants to improve prompt quality without an LLM (offline rule-based enhance)
|
|
29
|
+
- Asks about structuring or scoring a prompt
|
|
30
|
+
|
|
31
|
+
## Core commands
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
promptctl review --file=src/auth.ts # Code review prompt
|
|
35
|
+
promptctl debug --file=src/handler.go # Systematic debug analysis
|
|
36
|
+
promptctl arch --file=docs/design.md # Architecture decision record
|
|
37
|
+
promptctl commit # Conventional commit message
|
|
38
|
+
promptctl explain --file=src/parser.ts # Code explanation
|
|
39
|
+
|
|
40
|
+
promptctl list # See all available templates
|
|
41
|
+
promptctl score prompts/ # Score prompt files 0-100
|
|
42
|
+
promptctl fix prompts/ # Auto-fix low-scoring prompts
|
|
43
|
+
promptctl create "review auth for security" # Create prompt from raw intent (offline)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Pi integration commands
|
|
47
|
+
|
|
48
|
+
When the user is inside pi:
|
|
49
|
+
- `/promptctl review --file=src/auth.ts` — renders the review template and injects it as the next user message
|
|
50
|
+
- `/quick-templates` — lists all available templates
|
|
51
|
+
- `/cost-score <file>` — scores a prompt file on structure and clarity
|
|
52
|
+
- The `promptctl_apply` tool can be called by the LLM directly to render a template
|
|
53
|
+
|
|
54
|
+
## Key capabilities
|
|
55
|
+
|
|
56
|
+
- Templates are YAML files with `{{.variable}}` substitution — stored in `~/.promptctl/templates/` or `.promptctl/templates/` in your project
|
|
57
|
+
- `--file=path` auto-populates `{{.file_content}}`, `{{.file_name}}`, `{{.file_ext}}`
|
|
58
|
+
- Prompt scoring (0–100) on: structure, clarity, constraints, persona
|
|
59
|
+
- Offline rule-based enhance (`promptctl create`) — no API key or network needed
|
|
60
|
+
- JSON output and exit codes for CI pipelines (`promptctl score --min-score=80`)
|
|
61
|
+
- Direct LLM send (`promptctl send review --file=main.go`) with Anthropic/OpenAI support
|
|
62
|
+
|
|
63
|
+
## Example workflows
|
|
64
|
+
|
|
65
|
+
**Code review in pi:**
|
|
66
|
+
```
|
|
67
|
+
/promptctl review --file=src/payments.ts --focus=security
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Debug analysis:**
|
|
71
|
+
```
|
|
72
|
+
/promptctl debug --file=src/worker.go --error="context deadline exceeded"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Improve a prompt file:**
|
|
76
|
+
```
|
|
77
|
+
promptctl score my-prompt.md
|
|
78
|
+
promptctl fix my-prompt.md
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Create a new structured prompt from intent (offline):**
|
|
82
|
+
```
|
|
83
|
+
promptctl create "analyze this Go function for race conditions"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Resources
|
|
87
|
+
|
|
88
|
+
- GitHub: https://github.com/oleg-koval/promptctl
|
|
89
|
+
- Website: https://prompt-ctl.com
|
|
90
|
+
- Install: `brew tap oleg-koval/tap && brew install promptctl`
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: relay
|
|
3
|
+
description: >
|
|
4
|
+
Use claude-relay to run a long or rate-limit-prone task autonomously across subscription accounts.
|
|
5
|
+
Invoke this skill whenever the user says "use relay", "run this with relay", "do this overnight",
|
|
6
|
+
"run this autonomously", "use relay for X", or has a multi-hour / multi-step task they want to
|
|
7
|
+
hand off completely. Also use proactively when a task looks like it will take many turns and the
|
|
8
|
+
user hasn't thought about rate limits yet. Guides goal writing, picks the right flags, and starts
|
|
9
|
+
the run.
|
|
10
|
+
license: MIT
|
|
11
|
+
allowed-tools: Bash, Read, Write
|
|
12
|
+
metadata:
|
|
13
|
+
author: Oleg Koval
|
|
14
|
+
tags:
|
|
15
|
+
- relay
|
|
16
|
+
- autonomous
|
|
17
|
+
- rate-limits
|
|
18
|
+
- claude-relay
|
|
19
|
+
---
|
|
20
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
21
|
+
|
|
22
|
+
# relay
|
|
23
|
+
|
|
24
|
+
Runs a task **unattended** using `claude-relay`: drives `claude -p` in a headless loop, writes a
|
|
25
|
+
handoff summary when one account's limit approaches, and switches to the next account automatically.
|
|
26
|
+
You watch logs; relay handles the rest.
|
|
27
|
+
|
|
28
|
+
Binary: `claude-relay` (alias `relay` if added to shell). Config: `~/.claude-relay/relay.config.json`.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Step 1 — Decide: relay or inline?
|
|
33
|
+
|
|
34
|
+
**Use relay when:**
|
|
35
|
+
- Task will take many turns or hours (big refactor, migration, research + implementation)
|
|
36
|
+
- The user wants to hand it off and walk away
|
|
37
|
+
- Rate limits are a real concern (long-running or token-heavy)
|
|
38
|
+
|
|
39
|
+
**Stay inline when:**
|
|
40
|
+
- Task is quick (< ~10 turns)
|
|
41
|
+
- User wants to review each step
|
|
42
|
+
- Task needs interactive input that relay can't provide
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Step 2 — Write the goal
|
|
47
|
+
|
|
48
|
+
A relay goal is a self-contained spec a fresh Claude agent can execute cold. Write it to
|
|
49
|
+
`/tmp/relay-goal-<short-name>.md`. It must include:
|
|
50
|
+
|
|
51
|
+
- **What to do** — concrete deliverables, not vague intent
|
|
52
|
+
- **How to verify** — the exact command proving success (`npm test`, `curl /api/health`, etc.)
|
|
53
|
+
- **Scope** — explicit list of what NOT to do (no commits, no PRs, no migrations — unless stated)
|
|
54
|
+
- **Key files** — paths the agent should read first if the context isn't obvious
|
|
55
|
+
|
|
56
|
+
**Template:**
|
|
57
|
+
```markdown
|
|
58
|
+
## Goal
|
|
59
|
+
<1-3 sentences: the deliverable>
|
|
60
|
+
|
|
61
|
+
## Success criteria
|
|
62
|
+
Run `<command>` and confirm it exits 0 / returns the expected result.
|
|
63
|
+
|
|
64
|
+
## Scope
|
|
65
|
+
- DO: <explicit list>
|
|
66
|
+
- DO NOT: open PRs / push commits / run migrations / touch unrelated files
|
|
67
|
+
|
|
68
|
+
## Key files
|
|
69
|
+
- <path> — <why it matters>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Good goals are specific. "Add input validation to all POST routes in `app/api/`" beats "improve the API".
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Step 3 — Pick flags
|
|
77
|
+
|
|
78
|
+
| Situation | Flag |
|
|
79
|
+
|-----------|------|
|
|
80
|
+
| Task needs uncommitted changes, local `.env`, or a local database | `--in-place` |
|
|
81
|
+
| Everything is committed; task is self-contained | *(default — isolated git worktree)* |
|
|
82
|
+
|
|
83
|
+
When in doubt: if the repo has a `.env` or `node_modules` the task depends on, use `--in-place`.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Step 4 — Run
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
claude-relay run /tmp/relay-goal-<name>.md <absolute-path-to-repo> [--in-place]
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Relay logs stream to stderr. The run ends when the agent outputs `RELAY_TASK_COMPLETE` on its own
|
|
94
|
+
line, or hits a hard cap (400 turns / 48h wall clock).
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Step 5 — Tell the user
|
|
99
|
+
|
|
100
|
+
After starting, report:
|
|
101
|
+
- The exact command you ran
|
|
102
|
+
- What to watch for: `RELAY_TASK_COMPLETE` in logs, or `claude-relay status --config ~/.claude-relay/relay.config.json`
|
|
103
|
+
- The flag you picked and why (especially if you chose `--in-place`)
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Health check
|
|
108
|
+
|
|
109
|
+
If anything seems misconfigured:
|
|
110
|
+
```bash
|
|
111
|
+
claude-relay doctor --config ~/.claude-relay/relay.config.json
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Should show ✓ for both account slots. If a slot shows ✗, tell the user to run:
|
|
115
|
+
```bash
|
|
116
|
+
claude-relay login <email> # must have claude.ai open in browser as that account first
|
|
117
|
+
```
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "olko:review-past-performance",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Self-improvement loop that pulls the last 24h of ICM memories, git history, and skill analytics to detect repeated mistakes, slow workflows, and missing coverage, then proposes 1-3 concrete improvements.",
|
|
5
|
+
"skills": "skills/"
|
|
6
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-past-performance
|
|
3
|
+
description: 'Self-improvement loop for coding sessions. Pulls the last 24h of ICM memories, git history, and available transcripts; detects patterns like repeated mistakes, slow workflows, untested changes, or missing skills; then proposes 1-3 concrete improvements (new skills, prompt tweaks, eval criteria). Nothing is written until you approve. Use when asked to "review my performance", "self-improve", "what am I repeating", "review past performance", or "what should I fix in my workflow".'
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: Bash, Read, Write, Grep, Glob, AskUserQuestion
|
|
6
|
+
compatibility: Claude Code, Codex, Cursor, and other Agent Skills compatible tools. Requires ICM (https://github.com/rtk-ai/icm) for memory recall; degrades gracefully to git log + gstack analytics when ICM is unavailable.
|
|
7
|
+
metadata:
|
|
8
|
+
author: Oleg Koval
|
|
9
|
+
tags:
|
|
10
|
+
- self-improvement
|
|
11
|
+
- performance-review
|
|
12
|
+
- icm
|
|
13
|
+
- skills
|
|
14
|
+
- workflow
|
|
15
|
+
- ai-tools
|
|
16
|
+
---
|
|
17
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
18
|
+
|
|
19
|
+
# /review-past-performance
|
|
20
|
+
|
|
21
|
+
Self-improvement loop. Analyze recent sessions, find durable patterns, propose fixes.
|
|
22
|
+
|
|
23
|
+
## Step 1 — Gather raw signals (run in parallel)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# A: ICM memories from last 24h
|
|
27
|
+
icm recall "mistakes errors repeated workflow" --limit 10 2>/dev/null || echo "ICM_UNAVAILABLE"
|
|
28
|
+
icm recall "completed task feature fix" --limit 10 2>/dev/null || echo "ICM_UNAVAILABLE"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# B: Git activity last 24h across all repos the user works in
|
|
33
|
+
git log --all --since="24 hours ago" --oneline --author="$(git config user.email 2>/dev/null)" 2>/dev/null | head -30 || echo "NO_GIT"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# C: ICM transcripts (last 3 sessions)
|
|
38
|
+
icm transcript search "" --limit 3 2>/dev/null || echo "TRANSCRIPTS_UNAVAILABLE"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# D: Skill usage from gstack analytics (what skills were run, outcomes)
|
|
43
|
+
tail -50 ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null | jq -c 'select(.ts > (now - 86400 | todate))' 2>/dev/null || \
|
|
44
|
+
tail -50 ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null | head -20 || echo "NO_ANALYTICS"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# E: ICM errors-resolved topic (what broke and was fixed)
|
|
49
|
+
icm recall "error" -t "errors-resolved" --limit 5 2>/dev/null || echo "NO_ERROR_MEMORIES"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# F: Recent learnings (gstack)
|
|
54
|
+
_GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}"
|
|
55
|
+
eval "$($HOME/.slate/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
|
|
56
|
+
_LEARN_FILE="$_GSTACK_HOME/projects/${SLUG:-unknown}/learnings.jsonl"
|
|
57
|
+
[ -f "$_LEARN_FILE" ] && tail -20 "$_LEARN_FILE" || echo "NO_LEARNINGS"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Step 2 — Synthesize patterns
|
|
61
|
+
|
|
62
|
+
Read all signals. Classify findings into these categories:
|
|
63
|
+
|
|
64
|
+
**Repeated mistakes** — same error, same fix, same confusion appearing more than once in the signals. E.g., always forgetting to handle null on a specific field, always hitting the same linting error.
|
|
65
|
+
|
|
66
|
+
**Slow workflows** — multi-step sequences that took many tool calls but could be a single skill. E.g., always doing manual `git log` + `grep` + read 3 files before every PR review.
|
|
67
|
+
|
|
68
|
+
**Missing coverage** — areas where work was done but no test was written or no memory was stored.
|
|
69
|
+
|
|
70
|
+
**Underused skills** — skills that would have applied but were not invoked (check skill-usage.jsonl gaps vs. git activity).
|
|
71
|
+
|
|
72
|
+
**Knowledge gaps** — concepts that came up repeatedly as questions or confusion.
|
|
73
|
+
|
|
74
|
+
Score each finding:
|
|
75
|
+
- **Frequency**: how many times it appeared (1 = once, 3 = three or more)
|
|
76
|
+
- **Time cost**: rough estimate per occurrence (minutes)
|
|
77
|
+
- **Fixability**: easy (a new skill/memory fixes it), medium (needs a process change), hard (structural)
|
|
78
|
+
|
|
79
|
+
Pick the top 1-3 findings by `frequency × time_cost × fixability_inverse`.
|
|
80
|
+
|
|
81
|
+
## Step 3 — Formulate proposals
|
|
82
|
+
|
|
83
|
+
For each finding, produce exactly one proposal. Proposal types:
|
|
84
|
+
|
|
85
|
+
**Type A — New skill**: The repeated sequence can be codified. Provide:
|
|
86
|
+
- Proposed skill name (lowercase, dashes, ≤32 chars)
|
|
87
|
+
- Trigger phrases (3-5)
|
|
88
|
+
- 5-8 line SKILL.md workflow skeleton
|
|
89
|
+
- Estimated time savings per occurrence
|
|
90
|
+
|
|
91
|
+
**Type B — Skill tweak**: An existing skill is close but missing a step or check. Provide:
|
|
92
|
+
- Which skill (`/skill-name`)
|
|
93
|
+
- What specific text to add/change (before/after diff)
|
|
94
|
+
- Why this covers the gap
|
|
95
|
+
|
|
96
|
+
**Type C — ICM memory / eval criteria**: A pattern should be captured as a durable memory or eval rule. Provide:
|
|
97
|
+
- `icm store` command (with topic, content, importance)
|
|
98
|
+
- Or: a yes/no eval question to add to an existing skill
|
|
99
|
+
|
|
100
|
+
## Step 4 — Present findings (D1)
|
|
101
|
+
|
|
102
|
+
Use AskUserQuestion:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
D1 — Performance review: N patterns found, N proposals
|
|
106
|
+
Project/branch/task: 24h session review — git, ICM memories, skill analytics.
|
|
107
|
+
ELI10: I looked at your last 24 hours of work: git commits, ICM memories,
|
|
108
|
+
skill runs, and resolved errors. Here's what I found repeating and what
|
|
109
|
+
I'd do about it. Approve proposals individually or skip any.
|
|
110
|
+
Stakes if we pick wrong: skipping a proposal leaves the pattern unfixed;
|
|
111
|
+
approving a bad proposal adds noise. You can always /skillify or rm a skill later.
|
|
112
|
+
Recommendation: A — review each proposal and approve what resonates.
|
|
113
|
+
Note: options differ in kind, not coverage — no completeness score.
|
|
114
|
+
A) Walk me through each proposal (recommended)
|
|
115
|
+
B) Show summary only, I'll decide what to dig into
|
|
116
|
+
C) Abort — nothing to act on today
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
If B: print a one-line summary table (proposal number, type, finding, estimated savings). Stop.
|
|
120
|
+
|
|
121
|
+
If C: print "No changes made. Run /review-past-performance again anytime." Stop.
|
|
122
|
+
|
|
123
|
+
If A: proceed to Step 5.
|
|
124
|
+
|
|
125
|
+
## Step 5 — Proposal gate (one per proposal)
|
|
126
|
+
|
|
127
|
+
For each proposal (D2, D3, D4 ...):
|
|
128
|
+
|
|
129
|
+
Print:
|
|
130
|
+
```
|
|
131
|
+
--- Proposal N of N ---
|
|
132
|
+
Finding: <one sentence>
|
|
133
|
+
Pattern evidence: <which signals showed this>
|
|
134
|
+
Proposal type: <A/B/C>
|
|
135
|
+
<full proposal detail from Step 3>
|
|
136
|
+
Estimated savings: ~X min/occurrence
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Then AskUserQuestion:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
D<N> — Apply proposal N: <short title>?
|
|
143
|
+
Project/branch/task: <finding in one sentence>
|
|
144
|
+
ELI10: <plain English: what this proposes, what changes, what you gain>
|
|
145
|
+
Stakes if we pick wrong: <what happens if you apply a bad one, or skip a good one>
|
|
146
|
+
Recommendation: A — apply it — the evidence is clear enough to try it.
|
|
147
|
+
Note: options differ in kind, not coverage — no completeness score.
|
|
148
|
+
A) Apply this proposal (recommended)
|
|
149
|
+
B) Skip this one
|
|
150
|
+
C) Modify before applying (describe what to change)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
If C: ask what to change, update the proposal in-memory, re-show, re-ask A/B only.
|
|
154
|
+
|
|
155
|
+
## Step 6 — Execute approved proposals
|
|
156
|
+
|
|
157
|
+
For each approved proposal:
|
|
158
|
+
|
|
159
|
+
**Type A (new skill):**
|
|
160
|
+
```bash
|
|
161
|
+
mkdir -p ~/.claude/skills/<name>
|
|
162
|
+
```
|
|
163
|
+
Write `~/.claude/skills/<name>/SKILL.md` with the skeleton from Step 3.
|
|
164
|
+
Print: "Skill /<name> created at ~/.claude/skills/<name>/SKILL.md — invoke it with /<name>."
|
|
165
|
+
|
|
166
|
+
**Type B (skill tweak):**
|
|
167
|
+
Read the target skill file. Apply the diff. Print the before/after. Do NOT commit.
|
|
168
|
+
|
|
169
|
+
**Type C (ICM memory):**
|
|
170
|
+
```bash
|
|
171
|
+
icm store -t "<topic>" -c "<content>" -i <importance> -k "<keywords>"
|
|
172
|
+
```
|
|
173
|
+
Print the stored memory ID.
|
|
174
|
+
|
|
175
|
+
## Step 7 — Summary
|
|
176
|
+
|
|
177
|
+
After all proposals are processed, print a compact summary:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
/review-past-performance complete
|
|
181
|
+
Applied: N proposals
|
|
182
|
+
Skipped: N proposals
|
|
183
|
+
|
|
184
|
+
What changed:
|
|
185
|
+
- [list each applied change with one line]
|
|
186
|
+
|
|
187
|
+
Run again tomorrow: /review-past-performance
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Then:
|
|
191
|
+
```bash
|
|
192
|
+
# Store this review run as an ICM memory so future reviews have continuity
|
|
193
|
+
icm store -t "context-workflow" \
|
|
194
|
+
-c "Performance review $(date +%Y-%m-%d): found [N] patterns, applied [N] proposals. Key findings: [one-line summary]" \
|
|
195
|
+
-i medium \
|
|
196
|
+
-k "performance-review,self-improvement" 2>/dev/null || true
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Log to gstack timeline if available
|
|
201
|
+
~/.slate/skills/gstack/bin/gstack-timeline-log \
|
|
202
|
+
'{"skill":"review-past-performance","event":"completed","outcome":"success"}' 2>/dev/null || true
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Notes
|
|
208
|
+
|
|
209
|
+
- This skill reads only — no git mutations, no PR actions, no Notion/Linear writes.
|
|
210
|
+
- Type A skills created here are skeletons. Run them once and tune before relying on them.
|
|
211
|
+
- If ICM is unavailable (`ICM_UNAVAILABLE`), fall back to git log + gstack analytics only; note the limitation in findings.
|
|
212
|
+
- If there are fewer than 3 signals available, say so and offer to run again after more sessions.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "olko:self-critique",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Adversarially critique your own last answer: spawn a critic agent that verifies claims against live sources, finds the related issue or pattern you missed, then loop until satisfied and report where you were wrong, iterations-to-satisfy, the numeric improvement, and a final score.",
|
|
5
|
+
"skills": "skills/"
|
|
6
|
+
}
|