@preapexis/piexis 0.2.2 → 0.2.5

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.
Files changed (149) hide show
  1. package/README.md +85 -131
  2. package/apps/server/src/index.ts +97 -0
  3. package/apps/server/src/session-manager.ts +95 -0
  4. package/apps/server/src/workspace.ts +39 -0
  5. package/{tsconfig.json → apps/server/tsconfig.json} +3 -3
  6. package/apps/web/dist/assets/index-D4n3_lAw.js +10 -0
  7. package/apps/web/dist/assets/index-igiK0FPY.css +1 -0
  8. package/apps/web/dist/index.html +3 -0
  9. package/bin/piexis-web.mjs +24 -0
  10. package/extensions/agents.ts +205 -0
  11. package/extensions/ask-question.ts +54 -95
  12. package/extensions/recommended-tools.ts +62 -0
  13. package/extensions/ui.ts +204 -58
  14. package/extensions/webui.ts +45 -0
  15. package/lib/agent-config.ts +55 -0
  16. package/lib/agents.ts +208 -0
  17. package/lib/question-model.ts +98 -0
  18. package/lib/question-ui.ts +214 -0
  19. package/lib/recommended-tools.ts +119 -0
  20. package/lib/subagent-runner.ts +146 -0
  21. package/lib/ui-tips.json +41 -0
  22. package/package.json +41 -14
  23. package/packages/pi-integration/src/rpc-client.ts +99 -0
  24. package/packages/shared/src/index.ts +27 -0
  25. package/prompts/init.md +10 -2
  26. package/prompts/summary.md +7 -6
  27. package/schemas/agent.schema.json +48 -0
  28. package/skills/{claude-api/LICENSE.txt → caveman/LICENSE} +2 -2
  29. package/skills/caveman/LICENSE-MIT +21 -0
  30. package/skills/caveman/NOTICE +10 -0
  31. package/skills/caveman/SKILL.md +89 -0
  32. package/skills/find-skills/SKILL.md +141 -0
  33. package/skills/ponytail/LICENSE +21 -0
  34. package/skills/ponytail/NOTICE +9 -0
  35. package/skills/ponytail/SKILL.md +52 -0
  36. package/themes/midnight.json +81 -0
  37. package/.github/workflows/publish.yml +0 -35
  38. package/AGENTS.md +0 -58
  39. package/eval/README.md +0 -72
  40. package/eval/permission-cases.json +0 -28
  41. package/eval/permissions.mjs +0 -103
  42. package/extensions/background-tasks.ts +0 -433
  43. package/extensions/background-worker.ts +0 -50
  44. package/extensions/glob.ts +0 -32
  45. package/extensions/mode.ts +0 -397
  46. package/lib/bash-approvals.ts +0 -113
  47. package/lib/bash-policy.ts +0 -164
  48. package/lib/mode-policy.ts +0 -174
  49. package/lib/path-policy.ts +0 -182
  50. package/lib/permission-classifier.ts +0 -128
  51. package/lib/permission-config.ts +0 -91
  52. package/lib/permission-denials.ts +0 -32
  53. package/lib/permission-intent.ts +0 -128
  54. package/lib/permission-taxonomy.ts +0 -15
  55. package/lib/task-broker.ts +0 -65
  56. package/lib/task-checkout.ts +0 -39
  57. package/lib/task-git.ts +0 -44
  58. package/lib/task-patch.ts +0 -106
  59. package/lib/task-permissions.ts +0 -51
  60. package/lib/task-report.ts +0 -62
  61. package/lib/task-worktree-policy.ts +0 -56
  62. package/scripts/release.mjs +0 -32
  63. package/skills/claude-api/SKILL.md +0 -572
  64. package/skills/claude-api/csharp/claude-api/README.md +0 -362
  65. package/skills/claude-api/csharp/claude-api/batches.md +0 -14
  66. package/skills/claude-api/csharp/claude-api/files-api.md +0 -25
  67. package/skills/claude-api/csharp/claude-api/streaming.md +0 -28
  68. package/skills/claude-api/csharp/claude-api/tool-use.md +0 -164
  69. package/skills/claude-api/curl/examples.md +0 -256
  70. package/skills/claude-api/curl/managed-agents.md +0 -371
  71. package/skills/claude-api/go/claude-api/README.md +0 -188
  72. package/skills/claude-api/go/claude-api/files-api.md +0 -23
  73. package/skills/claude-api/go/claude-api/streaming.md +0 -43
  74. package/skills/claude-api/go/claude-api/tool-use.md +0 -220
  75. package/skills/claude-api/go/managed-agents/README.md +0 -564
  76. package/skills/claude-api/java/claude-api/README.md +0 -238
  77. package/skills/claude-api/java/claude-api/files-api.md +0 -27
  78. package/skills/claude-api/java/claude-api/streaming.md +0 -24
  79. package/skills/claude-api/java/claude-api/tool-use.md +0 -228
  80. package/skills/claude-api/java/managed-agents/README.md +0 -443
  81. package/skills/claude-api/php/claude-api/README.md +0 -174
  82. package/skills/claude-api/php/claude-api/batches.md +0 -15
  83. package/skills/claude-api/php/claude-api/files-api.md +0 -13
  84. package/skills/claude-api/php/claude-api/streaming.md +0 -27
  85. package/skills/claude-api/php/claude-api/tool-use.md +0 -253
  86. package/skills/claude-api/php/managed-agents/README.md +0 -443
  87. package/skills/claude-api/python/claude-api/README.md +0 -565
  88. package/skills/claude-api/python/claude-api/batches.md +0 -198
  89. package/skills/claude-api/python/claude-api/files-api.md +0 -170
  90. package/skills/claude-api/python/claude-api/sdk-upgrade.md +0 -286
  91. package/skills/claude-api/python/claude-api/streaming.md +0 -179
  92. package/skills/claude-api/python/claude-api/tool-use.md +0 -627
  93. package/skills/claude-api/python/managed-agents/README.md +0 -335
  94. package/skills/claude-api/ruby/claude-api/README.md +0 -134
  95. package/skills/claude-api/ruby/claude-api/streaming.md +0 -16
  96. package/skills/claude-api/ruby/claude-api/tool-use.md +0 -41
  97. package/skills/claude-api/ruby/managed-agents/README.md +0 -394
  98. package/skills/claude-api/shared/admin-api.md +0 -179
  99. package/skills/claude-api/shared/agent-design.md +0 -101
  100. package/skills/claude-api/shared/anthropic-cli.md +0 -269
  101. package/skills/claude-api/shared/claude-platform-on-aws.md +0 -59
  102. package/skills/claude-api/shared/cost-optimization.md +0 -233
  103. package/skills/claude-api/shared/error-codes.md +0 -262
  104. package/skills/claude-api/shared/live-sources.md +0 -166
  105. package/skills/claude-api/shared/managed-agents-api-reference.md +0 -455
  106. package/skills/claude-api/shared/managed-agents-client-patterns.md +0 -220
  107. package/skills/claude-api/shared/managed-agents-core.md +0 -359
  108. package/skills/claude-api/shared/managed-agents-environments.md +0 -226
  109. package/skills/claude-api/shared/managed-agents-events.md +0 -290
  110. package/skills/claude-api/shared/managed-agents-memory.md +0 -201
  111. package/skills/claude-api/shared/managed-agents-multiagent.md +0 -260
  112. package/skills/claude-api/shared/managed-agents-onboarding.md +0 -82
  113. package/skills/claude-api/shared/managed-agents-outcomes.md +0 -108
  114. package/skills/claude-api/shared/managed-agents-overview.md +0 -77
  115. package/skills/claude-api/shared/managed-agents-scheduled-deployments.md +0 -156
  116. package/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +0 -282
  117. package/skills/claude-api/shared/managed-agents-tools.md +0 -504
  118. package/skills/claude-api/shared/managed-agents-webhooks.md +0 -143
  119. package/skills/claude-api/shared/model-migration.md +0 -1872
  120. package/skills/claude-api/shared/models.md +0 -142
  121. package/skills/claude-api/shared/platform-availability.md +0 -53
  122. package/skills/claude-api/shared/prompt-audit.md +0 -223
  123. package/skills/claude-api/shared/prompt-caching.md +0 -292
  124. package/skills/claude-api/shared/token-counting.md +0 -56
  125. package/skills/claude-api/shared/tool-use-concepts.md +0 -526
  126. package/skills/claude-api/typescript/claude-api/README.md +0 -405
  127. package/skills/claude-api/typescript/claude-api/batches.md +0 -106
  128. package/skills/claude-api/typescript/claude-api/files-api.md +0 -98
  129. package/skills/claude-api/typescript/claude-api/streaming.md +0 -178
  130. package/skills/claude-api/typescript/claude-api/tool-use.md +0 -586
  131. package/skills/claude-api/typescript/managed-agents/README.md +0 -359
  132. package/skills-lock.json +0 -359
  133. package/tests/auto-permissions.test.mjs +0 -315
  134. package/tests/background-tasks.test.mjs +0 -27
  135. package/tests/background-worker.test.mjs +0 -60
  136. package/tests/bash-permissions.test.mjs +0 -276
  137. package/tests/glob.test.mjs +0 -31
  138. package/tests/mode.test.mjs +0 -62
  139. package/tests/permission-evaluation.test.mjs +0 -70
  140. package/tests/permission-foundation.test.mjs +0 -194
  141. package/tests/permission-policy.test.mjs +0 -158
  142. package/tests/runtime/README.md +0 -51
  143. package/tests/runtime/harness.mjs +0 -190
  144. package/tests/runtime/permissions.test.mjs +0 -192
  145. package/tests/runtime/tui.test.mjs +0 -60
  146. package/tests/skills-routing.test.mjs +0 -51
  147. package/tests/task-integration.test.mjs +0 -324
  148. package/tests/task-permissions.test.mjs +0 -178
  149. package/tests/task-worktree-policy.test.mjs +0 -53
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@preapexis/piexis",
3
- "version": "0.2.2",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "description": "Extensions, skills, prompts, and themes for pi",
6
6
  "repository": {
@@ -11,6 +11,21 @@
11
11
  "pi-package"
12
12
  ],
13
13
  "license": "MIT",
14
+ "bin": {
15
+ "piexis-web": "./bin/piexis-web.mjs"
16
+ },
17
+ "files": [
18
+ "apps/server/",
19
+ "apps/web/dist/",
20
+ "bin/",
21
+ "extensions/",
22
+ "lib/",
23
+ "packages/",
24
+ "prompts/",
25
+ "schemas/",
26
+ "skills/",
27
+ "themes/"
28
+ ],
14
29
  "engines": {
15
30
  "node": ">=22.19.0"
16
31
  },
@@ -21,19 +36,22 @@
21
36
  },
22
37
  "scripts": {
23
38
  "test": "node --test tests/*.test.mjs",
24
- "test:runtime": "node --test tests/runtime/*.test.mjs",
39
+ "test:webui": "node --import tsx --test tests/webui/*.test.ts",
25
40
  "check": "tsc --noEmit",
26
- "eval:permissions": "node eval/permissions.mjs",
27
- "release": "node scripts/release.mjs",
28
- "test:sandbox": "PIEXIS_REQUIRE_SANDBOX=1 node --test tests/mode-sandbox.test.mjs"
41
+ "check:server": "tsc -p apps/server/tsconfig.json --noEmit",
42
+ "check:web": "tsc -p apps/web/tsconfig.json --noEmit",
43
+ "build": "vite build --config apps/web/vite.config.ts",
44
+ "prepack": "npm run build",
45
+ "dev": "node scripts/dev.mjs",
46
+ "release": "node scripts/release.mjs"
29
47
  },
30
48
  "pi": {
31
49
  "extensions": [
32
50
  "./extensions/ask-question.ts",
33
- "./extensions/background-tasks.ts",
34
- "./extensions/glob.ts",
35
- "./extensions/mode.ts",
36
- "./extensions/ui.ts"
51
+ "./extensions/ui.ts",
52
+ "./extensions/recommended-tools.ts",
53
+ "./extensions/agents.ts",
54
+ "./extensions/webui.ts"
37
55
  ],
38
56
  "skills": [
39
57
  "./skills"
@@ -45,12 +63,21 @@
45
63
  "./themes"
46
64
  ]
47
65
  },
48
- "dependencies": {
49
- "@anthropic-ai/sandbox-runtime": "0.0.77",
50
- "jiti": "2.6.1"
51
- },
52
66
  "devDependencies": {
53
67
  "@types/node": "24.10.0",
54
- "typescript": "5.9.3"
68
+ "@types/react": "^19.3.0",
69
+ "@types/react-dom": "^19.3.0",
70
+ "@vitejs/plugin-react": "^6.1.2",
71
+ "typescript": "5.9.3",
72
+ "vite": "^8.3.4"
73
+ },
74
+ "dependencies": {
75
+ "@fastify/static": "^10.1.6",
76
+ "@fastify/websocket": "^11.3.4",
77
+ "fastify": "^5.12.5",
78
+ "react": "^19.3.0",
79
+ "react-dom": "^19.3.0",
80
+ "tsx": "^4.23.15",
81
+ "zod": "^4.6.5"
55
82
  }
56
83
  }
@@ -0,0 +1,99 @@
1
+ import { ChildProcess, spawn } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { EventEmitter } from "node:events";
4
+
5
+ export interface RpcResponse {
6
+ type: "response";
7
+ id?: string;
8
+ command: string;
9
+ success: boolean;
10
+ data?: unknown;
11
+ error?: string;
12
+ }
13
+
14
+ export type RpcRecord = Record<string, unknown>;
15
+
16
+ /** Long-lived, documented Pi RPC client. It treats stdout as strict JSONL. */
17
+ export class PiRpcClient extends EventEmitter {
18
+ #child?: ChildProcess;
19
+ #buffer = "";
20
+ #pending = new Map<string, { resolve: (value: RpcResponse) => void; reject: (reason: Error) => void }>();
21
+
22
+ constructor(
23
+ private readonly cwd: string,
24
+ private readonly executable = process.env.PIXIS_PI_BIN || (process.platform === "win32" ? "pi.cmd" : "pi"),
25
+ private readonly executableArgs: string[] = []
26
+ ) {
27
+ super();
28
+ }
29
+
30
+ start(): void {
31
+ if (this.#child) return;
32
+ const child = spawn(this.executable, [...this.executableArgs, "--mode", "rpc"], { cwd: this.cwd, stdio: ["pipe", "pipe", "pipe"], windowsHide: true });
33
+ this.#child = child;
34
+ child.stdout?.on("data", (chunk: Buffer) => this.#consume(chunk.toString("utf8")));
35
+ child.stderr?.on("data", (chunk: Buffer) => this.emit("diagnostic", chunk.toString("utf8")));
36
+ child.on("error", (error) => this.#fail(error));
37
+ child.on("exit", (code, signal) => this.#fail(new Error(`Pi exited (${code ?? signal ?? "unknown"})`)));
38
+ }
39
+
40
+ async command(command: Record<string, unknown>): Promise<RpcResponse> {
41
+ this.start();
42
+ const id = randomUUID();
43
+ const record = { ...command, id };
44
+ return new Promise((resolve, reject) => {
45
+ this.#pending.set(id, { resolve, reject });
46
+ const input = this.#child?.stdin;
47
+ if (!input || input.destroyed) return reject(new Error("Pi RPC stdin is unavailable"));
48
+ input.write(`${JSON.stringify(record)}\n`, "utf8", (error) => {
49
+ if (error) {
50
+ this.#pending.delete(id);
51
+ reject(error);
52
+ }
53
+ });
54
+ });
55
+ }
56
+
57
+ send(record: Record<string, unknown>): void {
58
+ const input = this.#child?.stdin;
59
+ if (!input || input.destroyed) throw new Error("Pi RPC stdin is unavailable");
60
+ input.write(`${JSON.stringify(record)}\n`, "utf8");
61
+ }
62
+
63
+ dispose(): void {
64
+ this.#child?.stdin?.end();
65
+ this.#child = undefined;
66
+ }
67
+
68
+ #consume(chunk: string): void {
69
+ this.#buffer += chunk;
70
+ let newline: number;
71
+ while ((newline = this.#buffer.indexOf("\n")) >= 0) {
72
+ const line = this.#buffer.slice(0, newline).replace(/\r$/, "");
73
+ this.#buffer = this.#buffer.slice(newline + 1);
74
+ if (!line) continue;
75
+ try {
76
+ const record = JSON.parse(line) as RpcRecord;
77
+ if (record.type === "response" && typeof record.id === "string" && typeof record.command === "string" && typeof record.success === "boolean") {
78
+ const pending = this.#pending.get(record.id);
79
+ if (pending) {
80
+ this.#pending.delete(record.id);
81
+ pending.resolve(record as unknown as RpcResponse);
82
+ continue;
83
+ }
84
+ }
85
+ this.emit("record", record);
86
+ } catch {
87
+ this.emit("diagnostic", `Ignoring malformed Pi RPC record: ${line.slice(0, 200)}`);
88
+ }
89
+ }
90
+ }
91
+
92
+ #fail(error: Error): void {
93
+ if (!this.#child && this.#pending.size === 0) return;
94
+ this.#child = undefined;
95
+ for (const { reject } of this.#pending.values()) reject(error);
96
+ this.#pending.clear();
97
+ this.emit("exit", error);
98
+ }
99
+ }
@@ -0,0 +1,27 @@
1
+ export type SessionStatus = "starting" | "ready" | "running" | "waiting" | "cancelling" | "failed" | "stopped";
2
+
3
+ export interface SessionSummary {
4
+ id: string;
5
+ name: string;
6
+ status: SessionStatus;
7
+ model?: string;
8
+ sessionFile?: string;
9
+ }
10
+
11
+ export type ClientCommand =
12
+ | { type: "list_sessions" }
13
+ | { type: "subscribe"; sessionId: string }
14
+ | { type: "create_session" }
15
+ | { type: "prompt"; sessionId: string; message: string }
16
+ | { type: "abort"; sessionId: string }
17
+ | { type: "extension_ui_response"; sessionId: string; id: string; value?: string; confirmed?: boolean; cancelled?: boolean }
18
+ | { type: "git_status"; sessionId: string }
19
+ | { type: "git_diff"; sessionId: string; path: string };
20
+
21
+ export type ServerMessage =
22
+ | { type: "snapshot"; sessions: SessionSummary[]; sessionId: string; state: unknown; messages: unknown[] }
23
+ | { type: "session"; session: SessionSummary }
24
+ | { type: "pi_event"; sessionId: string; event: unknown }
25
+ | { type: "extension_ui"; sessionId: string; request: unknown }
26
+ | { type: "workspace"; sessionId: string; action: "git_status" | "git_diff"; data: unknown }
27
+ | { type: "error"; message: string; sessionId?: string };
package/prompts/init.md CHANGED
@@ -14,7 +14,7 @@ $ARGUMENTS
14
14
  - Target the current directory. Do not silently switch to a Git ancestor, nested package, or another worktree.
15
15
  - Check the working-tree status when Git is available. Preserve unrelated changes, staged work, and intentional deletions; do not reset, clean, stage, or commit anything. If `AGENTS.md` is marked deleted and the user's intent is unclear, ask before recreating it.
16
16
  - Only create or edit `AGENTS.md`. Do not repair source, tests, manifests, or other documentation as part of this task.
17
- - Respect the active permission mode. In Plan/read-only mode, report the proposed changes instead of writing. If access is denied, explain the limitation and stop; never change modes, permissions, or tools to bypass restrictions.
17
+ - Respect host access restrictions. If access is denied, explain the limitation and stop; do not bypass restrictions.
18
18
 
19
19
  ## 2. Inspect selectively
20
20
 
@@ -29,7 +29,15 @@ Exclude secrets, credential files, dependency/vendor directories, generated outp
29
29
 
30
30
  ## 3. Distill useful project guidance
31
31
 
32
- Include only sections that are supported and useful:
32
+ Include an **Agent workflow** section with these requested Piexis defaults. Use skill names, not paths into this package: the host provides each installed skill's location. Read the matching `SKILL.md` before following it.
33
+
34
+ - **caveman:** use the bundled skill for concise chat responses. Preserve technical facts and exact code, commands, paths, and errors. Use full sentences for questions and safety warnings; keep persisted documentation and code in normal prose. Honor requests to stop caveman or use normal mode.
35
+ - **grilling:** use the bundled skill before asking the user clarification questions about requirements, preferences, or decisions. Choose its lightest suitable mode; do not turn a clear task into a ritual interview. Use `AskQuestion` when available in an interactive TUI; otherwise ask in chat. Cancellation is not consent.
36
+ - **ponytail:** use the bundled skill when building or changing code. Make the smallest complete change, reuse existing patterns, and retain validation, error handling, security, accessibility, and required tests. Combine it with the task-specific skill rather than replacing debugging, migration, or test-first guidance.
37
+
38
+ These are instruction defaults, not runtime enforcement or tool permissions. Respect existing higher-priority guidance and explicit user overrides. If a required skill is unavailable, report that limitation rather than pretending to have loaded it; do not install anything during `/init`.
39
+
40
+ Include other sections only when supported and useful:
33
41
 
34
42
  - **Overview and layout:** what the project does, major modules, and the few paths an agent needs to navigate it.
35
43
  - **Commands:** exact setup, build, lint, type-check, format, and test commands found in repository configuration or documentation. Include required working directories or prerequisites when documented. Identify the package manager from repository evidence, not preference.
@@ -5,10 +5,11 @@ description: Summarize the current session concisely
5
5
  Review the entire current session and produce a concise, plain-language summary.
6
6
 
7
7
  Include only:
8
- - **Done:** completed work and important outcomes
9
- - **Decisions:** key choices or conclusions
10
- - **Open:** unresolved issues, blockers, or unanswered questions
11
- - **Next:** suggested next steps, if any
12
- - **Prompts:** the exact number of user-authored prompts/messages in this session
13
8
 
14
- Use short bullets. Omit empty sections. Do not invent details or count assistant/tool messages as prompts.
9
+ **Done:** completed work and important outcomes
10
+ **Decisions:** key choices or conclusions
11
+ **Open:** unresolved issues, blockers, or unanswered questions
12
+ **Next:** suggested next steps, if any
13
+ **Prompts:** the exact number of user-authored prompts/messages in this session
14
+
15
+ Use short paragraphs under bold section labels, not hyphen-prefixed bullets. Omit empty sections. Do not invent details or count assistant/tool messages as prompts.
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/VarunGaikwad/piexis/main/schemas/agent.schema.json",
4
+ "title": "Piexis agent configuration",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string",
10
+ "description": "JSON Schema used by editor validation."
11
+ },
12
+ "model": { "$ref": "#/$defs/model" },
13
+ "small_model": { "$ref": "#/$defs/model" },
14
+ "subagent_model": { "$ref": "#/$defs/model" },
15
+ "delegate_exploration": {
16
+ "type": "boolean",
17
+ "description": "Allow read-only exploration to use small_model."
18
+ },
19
+ "subagent_variant_overrides": {
20
+ "type": "object",
21
+ "additionalProperties": false,
22
+ "properties": {
23
+ "plan": { "$ref": "#/$defs/variant" },
24
+ "orchestrator": { "$ref": "#/$defs/variant" },
25
+ "debug": { "$ref": "#/$defs/variant" },
26
+ "ask": { "$ref": "#/$defs/variant" },
27
+ "code": { "$ref": "#/$defs/variant" }
28
+ }
29
+ }
30
+ },
31
+ "$defs": {
32
+ "model": {
33
+ "type": "string",
34
+ "pattern": "^[^\\s/]+/\\S+$",
35
+ "description": "Exact provider/model ID from /model."
36
+ },
37
+ "variant": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "properties": {
41
+ "model": { "$ref": "#/$defs/model" },
42
+ "effort": {
43
+ "enum": ["off", "minimal", "low", "medium", "high", "xhigh", "max"]
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2026 Anthropic, PBC.
190
+ Copyright [yyyy] [name of copyright owner]
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
@@ -199,4 +199,4 @@
199
199
  distributed under the License is distributed on an "AS IS" BASIS,
200
200
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
201
  See the License for the specific language governing permissions and
202
- limitations under the License.
202
+ limitations under the License.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Julius Brussee
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,10 @@
1
+ Caveman
2
+ Copyright 2026 Julius Brussee
3
+
4
+ Adapted from https://github.com/juliusbrussee/caveman
5
+ Commit: 2e08b9177c07bb7249a8a2d1a6758e5db281d002
6
+ License: Apache-2.0; upstream pre-3.0 MIT notice retained in LICENSE-MIT.
7
+
8
+ Piexis changes: removed references to unbundled companion skills, mode aliases,
9
+ and hooks; documented Pi's explicit skill command. Only the voice instructions
10
+ are bundled, not the upstream runtime or its third-party software.
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: caveman
3
+ description: >
4
+ Terse caveman voice: answer first, fluff gone, every technical fact kept.
5
+ Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less
6
+ tokens". Stays on until "stop caveman" or "normal mode".
7
+ ---
8
+
9
+ # caveman
10
+
11
+ Respond terse like smart caveman. All technical substance stay. Only fluff die.
12
+
13
+ Caveman is a voice, not broken grammar. Reader pays per token and reads in a terminal. Every word earns its place. Every fact survives.
14
+
15
+ ## Persistence
16
+
17
+ Every response, whole session, until user says "stop caveman" or "normal mode". Unsure if still on? It is. Confirm the switch-off in one line.
18
+
19
+ Piexis adaptation: only the core voice skill is bundled; upstream mode aliases and hooks are not included. Use Pi's `/skill:caveman` command for explicit activation.
20
+
21
+ ## Why
22
+
23
+ 1. Every output token is billed and read. Filler costs twice.
24
+ 2. Code, commands, paths, numbers, errors are the payload. One changed character breaks them.
25
+ 3. Ceremony is expensive, grammar is cheap. "Sure, I'd be happy to help" is ten tokens. "the" is one.
26
+ 4. A dropped negation costs more than every token saved. Clarity beats compression.
27
+
28
+ ## Rules
29
+
30
+ ### 1. Answer first
31
+
32
+ Answer, then reason, then next step. Pattern: `[thing] [action] [reason]. [next step].`
33
+
34
+ Bad: "Sure! I'd be happy to help. The issue you're experiencing is likely caused by..."
35
+ Good: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
36
+
37
+ ### 2. Kill ceremony
38
+
39
+ No greeting, hedging, pleasantries, recap, or closer. No "Sure!", "Let me", "I'll now", "Hope this helps". No just/really/basically/actually/simply.
40
+
41
+ ### 3. Short word
42
+
43
+ "fix" not "implement a solution for". Standard acronyms fine (DB, API, HTTP). Invented abbreviations not (cfg, impl, fn): same tokens, harder read. No arrows.
44
+
45
+ ### 4. Articles optional, meaning never
46
+
47
+ Drop a/an/the when the sentence still reads in one pass. Fragments fine. Never drop not/never/no/only/except. Numbers and units exact.
48
+
49
+ Bad: "Migration drop column backup first."
50
+ Good: "Back up first. Then run migration: it drops the column."
51
+
52
+ ### 5. One idea per sentence
53
+
54
+ ASD-STE100 is the floor: 20 words max, active voice, imperative for instructions, one term per thing, pronoun only with an obvious referent. Compression and clarity conflict? Clarity wins.
55
+
56
+ ### 6. Payload verbatim
57
+
58
+ Code blocks unchanged. Commands, paths, API names exact. Errors quoted exact, shortest decisive line only. Code change shown in chat: changed lines plus 1-2 lines of context, not the whole file. Whole file only if the user asks, the file is new, or most of it changes. Existing comments in files you edit are payload too: never delete or shorten one you were not asked to change.
59
+
60
+ ### 7. Tool runs: bounded status
61
+
62
+ No text between routine calls. One line before a multi-step run, one line per phase change, one line with the result at the end. Otherwise text before a call only to clarify, warn, or disambiguate.
63
+
64
+ ### 8. User's language
65
+
66
+ Compress the style, not the language. An explicit reply-language instruction wins. Never switch because of quoted text. Technical terms and errors stay verbatim. Particles and case markers are grammar, not filler.
67
+
68
+ ### 9. Never perform caveman
69
+
70
+ No "caveman mode on", no "me think", no "Caveman:" prefix, no normal answer plus caveman copy. No decorative tables or emoji. Never add a word to sound caveman. Caveman phrasing not shorter than plain? Use plain.
71
+
72
+ ## When to break the rules
73
+
74
+ Plain prose, then resume:
75
+
76
+ 1. Security warning.
77
+ 2. Irreversible action. Confirm in full sentences first.
78
+ 3. Step order a fragment could scramble.
79
+ 4. User confused or repeats the question.
80
+ 5. Anything persisted outside chat: code, comments, commits, docs, issues, PRs, tickets, memory files, third-party messages.
81
+ 6. Harness asks for a status line or confirmation. Give it. Harness decides *when* you speak, caveman decides *how*.
82
+ 7. You ask the user a question or offer options. Full sentences, so the answer comes back right first time.
83
+
84
+ ## Pre-send check
85
+
86
+ 1. First sentence announces what you will do? Delete.
87
+ 2. Last sentence recaps or offers help? Delete.
88
+ 3. Every not/never/no/only present? Every code span, path, number, error verbatim?
89
+ 4. Any sentence with two readings? Make it a full sentence.
@@ -0,0 +1,141 @@
1
+ ---
2
+ name: find-skills
3
+ description: Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
4
+ ---
5
+
6
+ # Find Skills
7
+
8
+ This skill helps you discover and install skills from the open agent skills ecosystem.
9
+
10
+ ## When to Use This Skill
11
+
12
+ Use this skill when the user:
13
+
14
+ - Asks "how do I do X" where X might be a common task with an existing skill
15
+ - Says "find a skill for X" or "is there a skill for X"
16
+ - Asks "can you do X" where X is a specialized capability
17
+ - Expresses interest in extending agent capabilities
18
+ - Wants to search for tools, templates, or workflows
19
+ - Mentions they wish they had help with a specific domain (design, testing, deployment, etc.)
20
+
21
+ ## What is the Skills CLI?
22
+
23
+ The Skills CLI (`npx skills`) is the package manager for the open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools.
24
+
25
+ **Key commands:**
26
+
27
+ - `npx skills find [query] [--owner <owner>]` - Search for skills interactively or by keyword, optionally scoped to a GitHub owner
28
+ - `npx skills add <package>` - Install a skill from GitHub or other sources
29
+ - `npx skills update` - Update all installed skills
30
+
31
+ **Browse skills at:** https://skills.sh/
32
+
33
+ ## How to Help Users Find Skills
34
+
35
+ ### Step 1: Understand What They Need
36
+
37
+ When a user asks for help with something, identify:
38
+
39
+ 1. The domain (e.g., React, testing, design, deployment)
40
+ 2. The specific task (e.g., writing tests, creating animations, reviewing PRs)
41
+ 3. Whether this is a common enough task that a skill likely exists
42
+
43
+ ### Step 2: Check the Leaderboard First
44
+
45
+ Before running a CLI search, check the [skills.sh leaderboard](https://skills.sh/) to see if a well-known skill already exists for the domain. The leaderboard ranks skills by total installs, surfacing the most popular and battle-tested options.
46
+
47
+ For example, top skills for web development include:
48
+ - `vercel-labs/agent-skills` — React, Next.js, web design (100K+ installs each)
49
+ - `anthropics/skills` — Frontend design, document processing (100K+ installs)
50
+
51
+ ### Step 3: Search for Skills
52
+
53
+ If the leaderboard doesn't cover the user's need, run the find command:
54
+
55
+ ```bash
56
+ npx skills find [query] [--owner <owner>]
57
+ ```
58
+
59
+ For example:
60
+
61
+ - User asks "how do I make my React app faster?" → `npx skills find react performance`
62
+ - User asks "can you help me with PR reviews?" → `npx skills find pr review`
63
+ - User asks "I need to create a changelog" → `npx skills find changelog`
64
+
65
+ ### Step 4: Verify Quality Before Recommending
66
+
67
+ **Do not recommend a skill based solely on search results.** Always verify:
68
+
69
+ 1. **Install count** — Prefer skills with 1K+ installs. Be cautious with anything under 100.
70
+ 2. **Source reputation** — Official sources (`vercel-labs`, `anthropics`, `microsoft`) are more trustworthy than unknown authors.
71
+ 3. **GitHub stars** — Check the source repository. A skill from a repo with <100 stars should be treated with skepticism.
72
+
73
+ ### Step 5: Present Options to the User
74
+
75
+ When you find relevant skills, present them to the user with:
76
+
77
+ 1. The skill name and what it does
78
+ 2. The install count and source
79
+ 3. The install command they can run
80
+ 4. A link to learn more at skills.sh
81
+
82
+ Example response:
83
+
84
+ ```
85
+ I found a skill that might help! The "react-best-practices" skill provides
86
+ React and Next.js performance optimization guidelines from Vercel Engineering.
87
+ (185K installs)
88
+
89
+ To install it:
90
+ npx skills add vercel-labs/agent-skills@react-best-practices
91
+
92
+ Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices
93
+ ```
94
+
95
+ ### Step 6: Offer to Install
96
+
97
+ If the user wants to proceed, you can install the skill for them:
98
+
99
+ ```bash
100
+ npx skills add <owner/repo@skill> -g -y
101
+ ```
102
+
103
+ The `-g` flag installs globally (user-level) and `-y` skips confirmation prompts.
104
+
105
+ ## Common Skill Categories
106
+
107
+ When searching, consider these common categories:
108
+
109
+ | Category | Example Queries |
110
+ | --------------- | ---------------------------------------- |
111
+ | Web Development | react, nextjs, typescript, css, tailwind |
112
+ | Testing | testing, jest, playwright, e2e |
113
+ | DevOps | deploy, docker, kubernetes, ci-cd |
114
+ | Documentation | docs, readme, changelog, api-docs |
115
+ | Code Quality | review, lint, refactor, best-practices |
116
+ | Design | ui, ux, design-system, accessibility |
117
+ | Productivity | workflow, automation, git |
118
+
119
+ ## Tips for Effective Searches
120
+
121
+ 1. **Use specific keywords**: "react testing" is better than just "testing"
122
+ 2. **Try alternative terms**: If "deploy" doesn't work, try "deployment" or "ci-cd"
123
+ 3. **Check popular sources**: Many skills come from `vercel-labs/agent-skills` or `ComposioHQ/awesome-claude-skills`
124
+
125
+ ## When No Skills Are Found
126
+
127
+ If no relevant skills exist:
128
+
129
+ 1. Acknowledge that no existing skill was found
130
+ 2. Offer to help with the task directly using your general capabilities
131
+ 3. Suggest the user could create their own skill with `npx skills init`
132
+
133
+ Example:
134
+
135
+ ```
136
+ I searched for skills related to "xyz" but didn't find any matches.
137
+ I can still help you with this task directly! Would you like me to proceed?
138
+
139
+ If this is something you do often, you could create your own skill:
140
+ npx skills init my-xyz-skill
141
+ ```
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DietrichGebert
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,9 @@
1
+ Ponytail
2
+ Copyright (c) 2026 DietrichGebert
3
+
4
+ Source: https://github.com/dietrichgebert/ponytail
5
+ Commit: 9cc65d03aa2da1db7121b912d03596409ee340b8
6
+ License: MIT (see LICENSE).
7
+
8
+ The core SKILL.md is bundled unchanged. Companion skills, hooks, and runtime
9
+ extensions are not bundled. In Pi, explicitly invoke it with /skill:ponytail.