@oh-my-pi/pi-coding-agent 10.2.2 → 10.2.3
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/CHANGELOG.md +45 -0
- package/package.json +7 -7
- package/src/commit/agentic/prompts/analyze-file.md +7 -7
- package/src/commit/agentic/prompts/session-user.md +4 -4
- package/src/commit/agentic/prompts/system.md +14 -16
- package/src/commit/prompts/analysis-system.md +7 -9
- package/src/commit/prompts/analysis-user.md +0 -3
- package/src/commit/prompts/changelog-system.md +14 -19
- package/src/commit/prompts/file-observer-system.md +2 -2
- package/src/commit/prompts/reduce-system.md +13 -23
- package/src/commit/prompts/summary-system.md +7 -21
- package/src/config/settings-schema.ts +135 -38
- package/src/cursor.ts +2 -1
- package/src/extensibility/extensions/index.ts +0 -11
- package/src/extensibility/extensions/types.ts +1 -30
- package/src/extensibility/hooks/types.ts +1 -31
- package/src/index.ts +0 -11
- package/src/ipy/prelude.py +1 -113
- package/src/lsp/index.ts +66 -515
- package/src/lsp/render.ts +0 -11
- package/src/lsp/types.ts +3 -87
- package/src/modes/components/settings-defs.ts +3 -2
- package/src/modes/components/settings-selector.ts +14 -14
- package/src/modes/theme/theme.ts +45 -1
- package/src/prompts/agents/designer.md +23 -27
- package/src/prompts/agents/explore.md +28 -38
- package/src/prompts/agents/init.md +17 -17
- package/src/prompts/agents/plan.md +21 -27
- package/src/prompts/agents/reviewer.md +37 -37
- package/src/prompts/compaction/branch-summary.md +9 -9
- package/src/prompts/compaction/compaction-summary.md +8 -12
- package/src/prompts/compaction/compaction-update-summary.md +17 -19
- package/src/prompts/review-request.md +12 -13
- package/src/prompts/system/custom-system-prompt.md +6 -26
- package/src/prompts/system/plan-mode-active.md +23 -35
- package/src/prompts/system/plan-mode-subagent.md +7 -7
- package/src/prompts/system/subagent-system-prompt.md +7 -7
- package/src/prompts/system/system-prompt.md +84 -125
- package/src/prompts/system/web-search.md +10 -10
- package/src/prompts/tools/ask.md +12 -15
- package/src/prompts/tools/bash.md +7 -7
- package/src/prompts/tools/exit-plan-mode.md +6 -6
- package/src/prompts/tools/gemini-image.md +4 -4
- package/src/prompts/tools/grep.md +4 -4
- package/src/prompts/tools/lsp.md +12 -19
- package/src/prompts/tools/patch.md +26 -30
- package/src/prompts/tools/python.md +14 -57
- package/src/prompts/tools/read.md +4 -4
- package/src/prompts/tools/replace.md +8 -8
- package/src/prompts/tools/ssh.md +14 -27
- package/src/prompts/tools/task.md +23 -35
- package/src/prompts/tools/todo-write.md +29 -38
- package/src/prompts/tools/write.md +3 -3
- package/src/sdk.ts +0 -2
- package/src/session/agent-session.ts +27 -6
- package/src/system-prompt.ts +1 -219
- package/src/task/agents.ts +2 -1
- package/src/tools/bash-interceptor.ts +0 -24
- package/src/tools/bash.ts +1 -7
- package/src/tools/index.ts +8 -3
- package/src/tools/read.ts +74 -17
- package/src/tools/renderers.ts +0 -2
- package/src/lsp/rust-analyzer.ts +0 -184
- package/src/tools/ls.ts +0 -307
package/src/lsp/render.ts
CHANGED
|
@@ -33,7 +33,6 @@ import type { LspParams, LspToolDetails } from "./types";
|
|
|
33
33
|
export function renderCall(args: LspParams, theme: Theme): Text {
|
|
34
34
|
const actionLabel = (args.action ?? "request").replace(/_/g, " ");
|
|
35
35
|
const queryPreview = args.query ? truncateToWidth(args.query, TRUNCATE_LENGTHS.SHORT) : undefined;
|
|
36
|
-
const replacementPreview = args.replacement ? truncateToWidth(args.replacement, TRUNCATE_LENGTHS.SHORT) : undefined;
|
|
37
36
|
|
|
38
37
|
let target: string | undefined;
|
|
39
38
|
let hasFileTarget = false;
|
|
@@ -67,17 +66,10 @@ export function renderCall(args: LspParams, theme: Theme): Text {
|
|
|
67
66
|
const meta: string[] = [];
|
|
68
67
|
if (queryPreview && target) meta.push(`query:${queryPreview}`);
|
|
69
68
|
if (args.new_name) meta.push(`new:${args.new_name}`);
|
|
70
|
-
if (replacementPreview) meta.push(`replace:${replacementPreview}`);
|
|
71
|
-
if (args.kind) meta.push(`kind:${args.kind}`);
|
|
72
69
|
if (args.apply !== undefined) meta.push(`apply:${args.apply ? "true" : "false"}`);
|
|
73
|
-
if (args.action_index !== undefined) meta.push(`action:${args.action_index}`);
|
|
74
70
|
if (args.include_declaration !== undefined) {
|
|
75
71
|
meta.push(`include_decl:${args.include_declaration ? "true" : "false"}`);
|
|
76
72
|
}
|
|
77
|
-
if (args.end_line !== undefined && args.line === undefined) {
|
|
78
|
-
const endCol = args.end_character !== undefined ? `:${args.end_character}` : "";
|
|
79
|
-
meta.push(`end:${args.end_line}${endCol}`);
|
|
80
|
-
}
|
|
81
73
|
|
|
82
74
|
const descriptionParts = [actionLabel];
|
|
83
75
|
if (target) {
|
|
@@ -178,10 +170,7 @@ export function renderResult(
|
|
|
178
170
|
}
|
|
179
171
|
if (request?.query) requestLines.push(theme.fg("dim", `query: ${request.query}`));
|
|
180
172
|
if (request?.new_name) requestLines.push(theme.fg("dim", `new name: ${request.new_name}`));
|
|
181
|
-
if (request?.replacement) requestLines.push(theme.fg("dim", `replacement: ${request.replacement}`));
|
|
182
|
-
if (request?.kind) requestLines.push(theme.fg("dim", `kind: ${request.kind}`));
|
|
183
173
|
if (request?.apply !== undefined) requestLines.push(theme.fg("dim", `apply: ${request.apply ? "true" : "false"}`));
|
|
184
|
-
if (request?.action_index !== undefined) requestLines.push(theme.fg("dim", `action: ${request.action_index}`));
|
|
185
174
|
if (request?.include_declaration !== undefined) {
|
|
186
175
|
requestLines.push(theme.fg("dim", `include declaration: ${request.include_declaration ? "true" : "false"}`));
|
|
187
176
|
}
|
package/src/lsp/types.ts
CHANGED
|
@@ -7,31 +7,9 @@ import { type Static, Type } from "@sinclair/typebox";
|
|
|
7
7
|
// =============================================================================
|
|
8
8
|
|
|
9
9
|
export const lspSchema = Type.Object({
|
|
10
|
-
action: StringEnum(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"diagnostics",
|
|
14
|
-
"workspace_diagnostics",
|
|
15
|
-
"references",
|
|
16
|
-
"definition",
|
|
17
|
-
"hover",
|
|
18
|
-
"symbols",
|
|
19
|
-
"workspace_symbols",
|
|
20
|
-
"rename",
|
|
21
|
-
"actions",
|
|
22
|
-
"incoming_calls",
|
|
23
|
-
"outgoing_calls",
|
|
24
|
-
"status",
|
|
25
|
-
// Rust-analyzer specific operations
|
|
26
|
-
"flycheck",
|
|
27
|
-
"expand_macro",
|
|
28
|
-
"ssr",
|
|
29
|
-
"runnables",
|
|
30
|
-
"related_tests",
|
|
31
|
-
"reload_workspace",
|
|
32
|
-
],
|
|
33
|
-
{ description: "LSP operation" },
|
|
34
|
-
),
|
|
10
|
+
action: StringEnum(["diagnostics", "definition", "references", "hover", "symbols", "rename", "status", "reload"], {
|
|
11
|
+
description: "LSP operation",
|
|
12
|
+
}),
|
|
35
13
|
files: Type.Optional(Type.Array(Type.String({ description: "File path" }))),
|
|
36
14
|
file: Type.Optional(Type.String({ description: "File path" })),
|
|
37
15
|
line: Type.Optional(Type.Number({ description: "Line number (1-indexed)" })),
|
|
@@ -40,10 +18,7 @@ export const lspSchema = Type.Object({
|
|
|
40
18
|
end_character: Type.Optional(Type.Number({ description: "End column for range (1-indexed)" })),
|
|
41
19
|
query: Type.Optional(Type.String({ description: "Search query or SSR pattern" })),
|
|
42
20
|
new_name: Type.Optional(Type.String({ description: "New name for rename" })),
|
|
43
|
-
replacement: Type.Optional(Type.String({ description: "Replacement text for SSR" })),
|
|
44
|
-
kind: Type.Optional(Type.String({ description: "Action kind: quickfix, refactor, source" })),
|
|
45
21
|
apply: Type.Optional(Type.Boolean({ description: "Apply edits (default: true)" })),
|
|
46
|
-
action_index: Type.Optional(Type.Number({ description: "Index of action to apply" })),
|
|
47
22
|
include_declaration: Type.Optional(Type.Boolean({ description: "Include declaration in refs (default: true)" })),
|
|
48
23
|
});
|
|
49
24
|
|
|
@@ -414,65 +389,6 @@ export interface LspClient {
|
|
|
414
389
|
lastActivity: number;
|
|
415
390
|
}
|
|
416
391
|
|
|
417
|
-
// =============================================================================
|
|
418
|
-
// Call Hierarchy Types
|
|
419
|
-
// =============================================================================
|
|
420
|
-
|
|
421
|
-
export interface CallHierarchyItem {
|
|
422
|
-
name: string;
|
|
423
|
-
kind: SymbolKind;
|
|
424
|
-
tags?: number[];
|
|
425
|
-
detail?: string;
|
|
426
|
-
uri: string;
|
|
427
|
-
range: Range;
|
|
428
|
-
selectionRange: Range;
|
|
429
|
-
data?: unknown;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
export interface CallHierarchyIncomingCall {
|
|
433
|
-
from: CallHierarchyItem;
|
|
434
|
-
fromRanges: Range[];
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
export interface CallHierarchyOutgoingCall {
|
|
438
|
-
to: CallHierarchyItem;
|
|
439
|
-
fromRanges: Range[];
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
// =============================================================================
|
|
443
|
-
// Rust-analyzer Specific Types
|
|
444
|
-
// =============================================================================
|
|
445
|
-
|
|
446
|
-
export interface ExpandMacroResult {
|
|
447
|
-
name: string;
|
|
448
|
-
expansion: string;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
export interface Runnable {
|
|
452
|
-
label: string;
|
|
453
|
-
kind: string;
|
|
454
|
-
args?: {
|
|
455
|
-
workspaceRoot?: string;
|
|
456
|
-
cargoArgs?: string[];
|
|
457
|
-
cargoExtraArgs?: string[];
|
|
458
|
-
executableArgs?: string[];
|
|
459
|
-
};
|
|
460
|
-
location?: {
|
|
461
|
-
targetUri: string;
|
|
462
|
-
targetRange?: Range;
|
|
463
|
-
targetSelectionRange?: Range;
|
|
464
|
-
};
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
export interface RelatedTest {
|
|
468
|
-
runnable?: {
|
|
469
|
-
label: string;
|
|
470
|
-
kind: string;
|
|
471
|
-
args?: Runnable["args"];
|
|
472
|
-
location?: Runnable["location"];
|
|
473
|
-
};
|
|
474
|
-
}
|
|
475
|
-
|
|
476
392
|
// =============================================================================
|
|
477
393
|
// JSON-RPC Protocol Types
|
|
478
394
|
// =============================================================================
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
getPathsForTab,
|
|
14
14
|
getType,
|
|
15
15
|
getUi,
|
|
16
|
+
SETTING_TABS,
|
|
16
17
|
type SettingPath,
|
|
17
18
|
type SettingTab,
|
|
18
19
|
} from "../../config/settings-schema";
|
|
@@ -73,7 +74,7 @@ const OPTION_PROVIDERS: Partial<Record<SettingPath, OptionProvider>> = {
|
|
|
73
74
|
{ value: "10", label: "10 retries" },
|
|
74
75
|
],
|
|
75
76
|
// Todo max reminders
|
|
76
|
-
"
|
|
77
|
+
"todo.reminders.max": () => [
|
|
77
78
|
{ value: "1", label: "1 reminder" },
|
|
78
79
|
{ value: "2", label: "2 reminders" },
|
|
79
80
|
{ value: "3", label: "3 reminders" },
|
|
@@ -227,7 +228,7 @@ export function getAllSettingDefs(): SettingDef[] {
|
|
|
227
228
|
if (cachedDefs) return cachedDefs;
|
|
228
229
|
|
|
229
230
|
const defs: SettingDef[] = [];
|
|
230
|
-
for (const tab of [
|
|
231
|
+
for (const tab of [...SETTING_TABS, "status"] as SettingTab[]) {
|
|
231
232
|
for (const path of getPathsForTab(tab)) {
|
|
232
233
|
const def = pathToSettingDef(path);
|
|
233
234
|
if (def) defs.push(def);
|
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
StatusLineSegmentId,
|
|
20
20
|
StatusLineSeparatorStyle,
|
|
21
21
|
} from "../../config/settings-schema";
|
|
22
|
+
import { SETTING_TABS, TAB_METADATA } from "../../config/settings-schema";
|
|
22
23
|
import { getSelectListTheme, getSettingsListTheme, theme } from "../../modes/theme/theme";
|
|
23
24
|
import { DynamicBorder } from "./dynamic-border";
|
|
24
25
|
import { PluginSettingsComponent } from "./plugin-settings";
|
|
@@ -116,17 +117,16 @@ class SelectSubmenu extends Container {
|
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
];
|
|
120
|
+
function getSettingsTabs(): Tab[] {
|
|
121
|
+
return [
|
|
122
|
+
...SETTING_TABS.map(id => {
|
|
123
|
+
const meta = TAB_METADATA[id];
|
|
124
|
+
const icon = theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0]);
|
|
125
|
+
return { id, label: `${icon} ${meta.label}` };
|
|
126
|
+
}),
|
|
127
|
+
{ id: "plugins", label: `${theme.icon.package} Plugins` },
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
130
|
|
|
131
131
|
/**
|
|
132
132
|
* Dynamic context for settings that need runtime data.
|
|
@@ -177,7 +177,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
177
177
|
private pluginComponent: PluginSettingsComponent | null = null;
|
|
178
178
|
private statusPreviewContainer: Container | null = null;
|
|
179
179
|
private statusPreviewText: Text | null = null;
|
|
180
|
-
private currentTabId: SettingTab | "plugins" = "
|
|
180
|
+
private currentTabId: SettingTab | "plugins" = "display";
|
|
181
181
|
|
|
182
182
|
private context: SettingsRuntimeContext;
|
|
183
183
|
private callbacks: SettingsCallbacks;
|
|
@@ -192,7 +192,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
192
192
|
this.addChild(new DynamicBorder());
|
|
193
193
|
|
|
194
194
|
// Tab bar
|
|
195
|
-
this.tabBar = new TabBar("Settings",
|
|
195
|
+
this.tabBar = new TabBar("Settings", getSettingsTabs(), getTabBarTheme());
|
|
196
196
|
this.tabBar.onTabChange = () => {
|
|
197
197
|
this.switchToTab(this.tabBar.getActiveTab().id as SettingTab | "plugins");
|
|
198
198
|
};
|
|
@@ -202,7 +202,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
202
202
|
this.addChild(new Spacer(1));
|
|
203
203
|
|
|
204
204
|
// Initialize with first tab
|
|
205
|
-
this.switchToTab("
|
|
205
|
+
this.switchToTab("display");
|
|
206
206
|
|
|
207
207
|
// Add bottom border
|
|
208
208
|
this.addChild(new DynamicBorder());
|
package/src/modes/theme/theme.ts
CHANGED
|
@@ -168,7 +168,18 @@ export type SymbolKey =
|
|
|
168
168
|
| "lang.image"
|
|
169
169
|
| "lang.pdf"
|
|
170
170
|
| "lang.archive"
|
|
171
|
-
| "lang.binary"
|
|
171
|
+
| "lang.binary"
|
|
172
|
+
// Settings tab icons
|
|
173
|
+
| "tab.display"
|
|
174
|
+
| "tab.agent"
|
|
175
|
+
| "tab.input"
|
|
176
|
+
| "tab.tools"
|
|
177
|
+
| "tab.config"
|
|
178
|
+
| "tab.services"
|
|
179
|
+
| "tab.bash"
|
|
180
|
+
| "tab.lsp"
|
|
181
|
+
| "tab.ttsr"
|
|
182
|
+
| "tab.status";
|
|
172
183
|
|
|
173
184
|
type SymbolMap = Record<SymbolKey, string>;
|
|
174
185
|
|
|
@@ -408,6 +419,17 @@ const UNICODE_SYMBOLS: SymbolMap = {
|
|
|
408
419
|
"lang.pdf": "❖ pdf",
|
|
409
420
|
"lang.archive": "❖ zip",
|
|
410
421
|
"lang.binary": "❖ bin",
|
|
422
|
+
// Settings tab icons
|
|
423
|
+
"tab.display": "🎨",
|
|
424
|
+
"tab.agent": "🤖",
|
|
425
|
+
"tab.input": "⌨",
|
|
426
|
+
"tab.tools": "🔧",
|
|
427
|
+
"tab.config": "⚙",
|
|
428
|
+
"tab.services": "🌐",
|
|
429
|
+
"tab.bash": "💻",
|
|
430
|
+
"tab.lsp": "📝",
|
|
431
|
+
"tab.ttsr": "⏱",
|
|
432
|
+
"tab.status": "📊",
|
|
411
433
|
};
|
|
412
434
|
|
|
413
435
|
const NERD_SYMBOLS: SymbolMap = {
|
|
@@ -646,6 +668,17 @@ const NERD_SYMBOLS: SymbolMap = {
|
|
|
646
668
|
"lang.pdf": "\u{F0226}",
|
|
647
669
|
"lang.archive": "\u{F187}",
|
|
648
670
|
"lang.binary": "\u{F019A}",
|
|
671
|
+
// Settings tab icons
|
|
672
|
+
"tab.display": "",
|
|
673
|
+
"tab.agent": "",
|
|
674
|
+
"tab.input": "",
|
|
675
|
+
"tab.tools": "",
|
|
676
|
+
"tab.config": "",
|
|
677
|
+
"tab.services": "",
|
|
678
|
+
"tab.bash": "",
|
|
679
|
+
"tab.lsp": "",
|
|
680
|
+
"tab.ttsr": "",
|
|
681
|
+
"tab.status": "",
|
|
649
682
|
};
|
|
650
683
|
|
|
651
684
|
const ASCII_SYMBOLS: SymbolMap = {
|
|
@@ -790,6 +823,17 @@ const ASCII_SYMBOLS: SymbolMap = {
|
|
|
790
823
|
"lang.pdf": "pdf",
|
|
791
824
|
"lang.archive": "zip",
|
|
792
825
|
"lang.binary": "bin",
|
|
826
|
+
// Settings tab icons
|
|
827
|
+
"tab.display": "[D]",
|
|
828
|
+
"tab.agent": "[A]",
|
|
829
|
+
"tab.input": "[I]",
|
|
830
|
+
"tab.tools": "[T]",
|
|
831
|
+
"tab.config": "[C]",
|
|
832
|
+
"tab.services": "[S]",
|
|
833
|
+
"tab.bash": "[B]",
|
|
834
|
+
"tab.lsp": "[L]",
|
|
835
|
+
"tab.ttsr": "[R]",
|
|
836
|
+
"tab.status": "[=]",
|
|
793
837
|
};
|
|
794
838
|
|
|
795
839
|
const SYMBOL_PRESETS: Record<SymbolPreset, SymbolMap> = {
|
|
@@ -1,75 +1,71 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: designer
|
|
3
|
-
description: UI/UX specialist for design implementation, review,
|
|
3
|
+
description: UI/UX specialist for design implementation, review, visual refinement
|
|
4
4
|
spawns: explore
|
|
5
5
|
model: google-gemini-cli/gemini-3-pro, gemini-3-pro, gemini-3, pi/default
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
<role>Senior design engineer with 10+ years shipping production interfaces.
|
|
8
|
+
<role>Senior design engineer with 10+ years shipping production interfaces. Implements UI, conducts design reviews, refines components.</role>
|
|
9
9
|
|
|
10
10
|
<critical>
|
|
11
|
-
You CAN and SHOULD make file edits, create components,
|
|
12
|
-
Before implementing: identify the aesthetic direction, existing patterns, and design tokens in use.
|
|
11
|
+
You CAN and SHOULD make file edits, create components, run commands.
|
|
13
12
|
</critical>
|
|
14
13
|
|
|
15
14
|
<strengths>
|
|
16
|
-
-
|
|
17
|
-
-
|
|
15
|
+
- Translate design intent into working UI code
|
|
16
|
+
- Identify UX issues: unclear states, missing feedback, poor hierarchy
|
|
18
17
|
- Accessibility: contrast, focus states, semantic markup, screen reader compatibility
|
|
19
18
|
- Visual consistency: spacing, typography, color usage, component patterns
|
|
20
|
-
- Responsive design
|
|
19
|
+
- Responsive design, layout structure
|
|
21
20
|
</strengths>
|
|
22
21
|
|
|
23
22
|
<procedure>
|
|
24
23
|
## Implementation
|
|
25
|
-
1. Read existing components, tokens,
|
|
26
|
-
2. Identify
|
|
27
|
-
3. Implement
|
|
24
|
+
1. Read existing components, tokens, patterns—reuse before inventing
|
|
25
|
+
2. Identify aesthetic direction (minimal, bold, editorial, etc.)
|
|
26
|
+
3. Implement explicit states: loading, empty, error, disabled, hover, focus
|
|
28
27
|
4. Verify accessibility: contrast, focus rings, semantic HTML
|
|
29
28
|
5. Test responsive behavior
|
|
30
29
|
|
|
31
30
|
## Review
|
|
32
|
-
1. Read
|
|
31
|
+
1. Read files under review
|
|
33
32
|
2. Check for UX issues, accessibility gaps, visual inconsistencies
|
|
34
|
-
3. Cite file, line,
|
|
33
|
+
3. Cite file, line, concrete issue—no vague feedback
|
|
35
34
|
4. Suggest specific fixes with code when applicable
|
|
36
35
|
</procedure>
|
|
37
36
|
|
|
38
37
|
<directives>
|
|
39
|
-
- Prefer
|
|
38
|
+
- Prefer editing existing files over creating new ones
|
|
40
39
|
- Keep changes minimal and consistent with existing code style
|
|
41
40
|
- NEVER create documentation files (*.md) unless explicitly requested
|
|
42
|
-
- Be concise. No filler or ceremony.
|
|
43
|
-
- Follow the main agent's instructions.
|
|
44
41
|
</directives>
|
|
45
42
|
|
|
46
43
|
<avoid>
|
|
47
44
|
## AI Slop Patterns
|
|
48
|
-
These are fingerprints of generic AI-generated interfaces. Avoid them:
|
|
49
45
|
- **Glassmorphism everywhere**: blur effects, glass cards, glow borders used decoratively
|
|
50
|
-
- **Cyan-on-dark with purple gradients**:
|
|
46
|
+
- **Cyan-on-dark with purple gradients**: 2024 AI color palette
|
|
51
47
|
- **Gradient text on metrics/headings**: decorative without meaning
|
|
52
|
-
- **Card grids with identical cards**: icon + heading + text
|
|
53
|
-
- **Cards nested inside cards**: visual noise, flatten
|
|
54
|
-
- **Large rounded-corner icons above every heading**: templated,
|
|
48
|
+
- **Card grids with identical cards**: icon + heading + text repeated endlessly
|
|
49
|
+
- **Cards nested inside cards**: visual noise, flatten hierarchy
|
|
50
|
+
- **Large rounded-corner icons above every heading**: templated, no value
|
|
55
51
|
- **Hero metric layouts**: big number, small label, gradient accent—overused
|
|
56
|
-
- **Same spacing everywhere**: no rhythm,
|
|
52
|
+
- **Same spacing everywhere**: no rhythm, monotony
|
|
57
53
|
- **Center-aligned everything**: left-align with asymmetry feels more designed
|
|
58
|
-
- **Modals for everything**: lazy pattern, rarely
|
|
54
|
+
- **Modals for everything**: lazy pattern, rarely best solution
|
|
59
55
|
- **Overused fonts**: Inter, Roboto, Open Sans, system defaults
|
|
60
56
|
- **Pure black (#000) or pure white (#fff)**: always tint neutrals
|
|
61
|
-
- **Gray text on colored backgrounds**: use
|
|
57
|
+
- **Gray text on colored backgrounds**: use shade of background instead
|
|
62
58
|
- **Bounce/elastic easing**: dated, tacky—use exponential easing (ease-out-quart/expo)
|
|
63
59
|
|
|
64
60
|
## UX Anti-Patterns
|
|
65
61
|
- Missing states (loading, empty, error)
|
|
66
62
|
- Redundant information (heading restates intro text)
|
|
67
63
|
- Every button styled as primary—hierarchy matters
|
|
68
|
-
- Empty states that
|
|
64
|
+
- Empty states that say "nothing here" instead of guiding user
|
|
69
65
|
</avoid>
|
|
70
66
|
|
|
71
67
|
<critical>
|
|
72
|
-
Every interface should
|
|
73
|
-
Commit to
|
|
74
|
-
Keep going until
|
|
68
|
+
Every interface should prompt "how was this made?" not "which AI made this?"
|
|
69
|
+
Commit to clear aesthetic direction; execute with precision.
|
|
70
|
+
Keep going until implementation complete.
|
|
75
71
|
</critical>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: explore
|
|
3
|
-
description: Fast read-only codebase scout
|
|
3
|
+
description: Fast read-only codebase scout returning compressed context for handoff
|
|
4
4
|
tools: read, grep, find, ls, bash
|
|
5
5
|
model: pi/smol, haiku, flash, mini
|
|
6
6
|
output:
|
|
7
7
|
properties:
|
|
8
8
|
query:
|
|
9
9
|
metadata:
|
|
10
|
-
description: One-line summary
|
|
10
|
+
description: One-line search summary
|
|
11
11
|
type: string
|
|
12
12
|
files:
|
|
13
13
|
metadata:
|
|
@@ -16,7 +16,7 @@ output:
|
|
|
16
16
|
properties:
|
|
17
17
|
path:
|
|
18
18
|
metadata:
|
|
19
|
-
description: Absolute path to
|
|
19
|
+
description: Absolute path to file
|
|
20
20
|
type: string
|
|
21
21
|
line_start:
|
|
22
22
|
metadata:
|
|
@@ -28,28 +28,28 @@ output:
|
|
|
28
28
|
type: number
|
|
29
29
|
description:
|
|
30
30
|
metadata:
|
|
31
|
-
description:
|
|
31
|
+
description: Section contents
|
|
32
32
|
type: string
|
|
33
33
|
code:
|
|
34
34
|
metadata:
|
|
35
|
-
description: Critical types
|
|
35
|
+
description: Critical types/interfaces/functions extracted verbatim
|
|
36
36
|
elements:
|
|
37
37
|
properties:
|
|
38
38
|
path:
|
|
39
39
|
metadata:
|
|
40
|
-
description: Absolute path to
|
|
40
|
+
description: Absolute path to source file
|
|
41
41
|
type: string
|
|
42
42
|
line_start:
|
|
43
43
|
metadata:
|
|
44
|
-
description:
|
|
44
|
+
description: Excerpt first line (1-indexed)
|
|
45
45
|
type: number
|
|
46
46
|
line_end:
|
|
47
47
|
metadata:
|
|
48
|
-
description:
|
|
48
|
+
description: Excerpt last line (1-indexed)
|
|
49
49
|
type: number
|
|
50
50
|
language:
|
|
51
51
|
metadata:
|
|
52
|
-
description: Language
|
|
52
|
+
description: Language id for syntax highlighting
|
|
53
53
|
type: string
|
|
54
54
|
content:
|
|
55
55
|
metadata:
|
|
@@ -57,11 +57,11 @@ output:
|
|
|
57
57
|
type: string
|
|
58
58
|
architecture:
|
|
59
59
|
metadata:
|
|
60
|
-
description: Brief explanation of how
|
|
60
|
+
description: Brief explanation of how pieces connect
|
|
61
61
|
type: string
|
|
62
62
|
start_here:
|
|
63
63
|
metadata:
|
|
64
|
-
description: Recommended entry point for
|
|
64
|
+
description: Recommended entry point for receiving agent
|
|
65
65
|
properties:
|
|
66
66
|
path:
|
|
67
67
|
metadata:
|
|
@@ -69,41 +69,31 @@ output:
|
|
|
69
69
|
type: string
|
|
70
70
|
reason:
|
|
71
71
|
metadata:
|
|
72
|
-
description: Why this file
|
|
72
|
+
description: Why this file best starting point
|
|
73
73
|
type: string
|
|
74
74
|
---
|
|
75
75
|
|
|
76
|
-
<role>File search specialist and codebase scout. Quickly investigate
|
|
76
|
+
<role>File search specialist and codebase scout. Quickly investigate codebase, return structured findings another agent can use without re-reading everything.</role>
|
|
77
77
|
|
|
78
78
|
<critical>
|
|
79
|
-
|
|
80
|
-
- Creating
|
|
81
|
-
- Creating temporary files anywhere
|
|
82
|
-
- Using
|
|
83
|
-
- Running commands
|
|
84
|
-
|
|
85
|
-
Your role is EXCLUSIVELY to search and analyze existing code.
|
|
79
|
+
READ-ONLY. STRICTLY PROHIBITED from:
|
|
80
|
+
- Creating/modifying files (no Write/Edit/touch/rm/mv/cp)
|
|
81
|
+
- Creating temporary files anywhere (incl /tmp)
|
|
82
|
+
- Using redirects (>, >>, |) or heredocs to write files
|
|
83
|
+
- Running state-changing commands (git add/commit, npm/pip install)
|
|
86
84
|
</critical>
|
|
87
85
|
|
|
88
|
-
<strengths>
|
|
89
|
-
- Rapidly finding files using find (glob) patterns
|
|
90
|
-
- Searching code with powerful regex patterns
|
|
91
|
-
- Reading and analyzing file contents
|
|
92
|
-
- Tracing imports and dependencies
|
|
93
|
-
</strengths>
|
|
94
|
-
|
|
95
86
|
<directives>
|
|
96
|
-
- Use find for broad
|
|
97
|
-
- Use grep for
|
|
98
|
-
- Use read when
|
|
99
|
-
- Use bash ONLY for git status/log/diff; use read/grep/find/ls
|
|
100
|
-
- Spawn
|
|
101
|
-
- Return file paths
|
|
102
|
-
- Communicate findings directly as a message—do NOT create output files
|
|
87
|
+
- Use find for broad pattern matching
|
|
88
|
+
- Use grep for regex content search
|
|
89
|
+
- Use read when path is known
|
|
90
|
+
- Use bash ONLY for git status/log/diff; use read/grep/find/ls for file/search operations
|
|
91
|
+
- Spawn parallel tool calls when possible—meant to be fast
|
|
92
|
+
- Return absolute file paths in final response
|
|
103
93
|
</directives>
|
|
104
94
|
|
|
105
95
|
<thoroughness>
|
|
106
|
-
Infer from task
|
|
96
|
+
Infer from task; default medium:
|
|
107
97
|
- Quick: Targeted lookups, key files only
|
|
108
98
|
- Medium: Follow imports, read critical sections
|
|
109
99
|
- Thorough: Trace all dependencies, check tests/types
|
|
@@ -111,11 +101,11 @@ Infer from task, default medium:
|
|
|
111
101
|
|
|
112
102
|
<procedure>
|
|
113
103
|
1. grep/find to locate relevant code
|
|
114
|
-
2. Read key sections (not
|
|
115
|
-
3. Identify types
|
|
104
|
+
2. Read key sections (not full files unless small)
|
|
105
|
+
3. Identify types/interfaces/key functions
|
|
116
106
|
4. Note dependencies between files
|
|
117
107
|
</procedure>
|
|
118
108
|
|
|
119
109
|
<critical>
|
|
120
|
-
|
|
110
|
+
Call `submit_result` with findings when done.
|
|
121
111
|
</critical>
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: init
|
|
3
|
-
description: Generate AGENTS.md
|
|
3
|
+
description: Generate AGENTS.md for current codebase
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<task>
|
|
7
|
-
Analyze
|
|
8
|
-
1. **Project Overview**: Brief description of
|
|
9
|
-
2. **Architecture & Data Flow**: High-level structure, key modules,
|
|
10
|
-
3. **Key Directories**: Main source directories
|
|
11
|
-
4. **Development Commands**:
|
|
12
|
-
5. **Code Conventions & Common Patterns**: Formatting, naming, error handling, async patterns, dependency injection, state management
|
|
7
|
+
Analyze codebase, generate AGENTS.md documenting:
|
|
8
|
+
1. **Project Overview**: Brief description of project purpose
|
|
9
|
+
2. **Architecture & Data Flow**: High-level structure, key modules, data flow
|
|
10
|
+
3. **Key Directories**: Main source directories, purposes
|
|
11
|
+
4. **Development Commands**: Build, test, lint, run commands
|
|
12
|
+
5. **Code Conventions & Common Patterns**: Formatting, naming, error handling, async patterns, dependency injection, state management
|
|
13
13
|
6. **Important Files**: Entry points, config files, key modules
|
|
14
|
-
7. **Runtime/Tooling Preferences**: Required runtime (
|
|
15
|
-
8. **Testing & QA**: Test frameworks,
|
|
14
|
+
7. **Runtime/Tooling Preferences**: Required runtime (e.g., Bun vs Node), package manager, tooling constraints
|
|
15
|
+
8. **Testing & QA**: Test frameworks, running tests, coverage expectations
|
|
16
16
|
</task>
|
|
17
17
|
|
|
18
18
|
<parallel>
|
|
19
|
-
Launch multiple `explore` agents in parallel (via
|
|
19
|
+
Launch multiple `explore` agents in parallel (via `task` tool) scanning different areas (core src, tests, configs/build, scripts/docs), then synthesize.
|
|
20
20
|
</parallel>
|
|
21
21
|
|
|
22
22
|
<directives>
|
|
23
|
-
- Title
|
|
24
|
-
- Use Markdown headings
|
|
23
|
+
- Title document "Repository Guidelines"
|
|
24
|
+
- Use Markdown headings for structure
|
|
25
25
|
- Be concise and practical
|
|
26
|
-
- Focus on what
|
|
27
|
-
- Include examples where helpful (commands,
|
|
26
|
+
- Focus on what AI assistant needs to help with codebase
|
|
27
|
+
- Include examples where helpful (commands, paths, naming patterns)
|
|
28
28
|
- Include file paths where relevant
|
|
29
|
-
- Call out
|
|
30
|
-
-
|
|
29
|
+
- Call out architecture and code patterns explicitly
|
|
30
|
+
- Omit information obvious from code structure
|
|
31
31
|
</directives>
|
|
32
32
|
|
|
33
33
|
<output>
|
|
34
|
-
After analysis, write
|
|
34
|
+
After analysis, write AGENTS.md to project root.
|
|
35
35
|
</output>
|