@krtclcdy/tersio 2.25.4 → 2.25.6
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/README.md +27 -63
- package/dashboard/dist/index.html +18 -16
- package/dist/cli/backups.js +187 -0
- package/dist/cli/banner.js +4 -3
- package/dist/cli/common.js +29 -13
- package/dist/cli/currency.js +1 -1
- package/dist/cli/dashboard.js +168 -110
- package/dist/cli/doctor-fix.js +232 -50
- package/dist/cli/doctor.js +281 -32
- package/dist/cli/hosts.js +29 -9
- package/dist/cli/install.js +204 -69
- package/dist/cli/interactive.js +3 -3
- package/dist/cli/manifest.js +125 -17
- package/dist/cli/profile.js +14 -9
- package/dist/cli/rtk-wiring.js +1 -1
- package/dist/cli/settings.js +20 -5
- package/dist/cli/uninstall.js +24 -8
- package/dist/cli/update.js +9 -10
- package/dist/cli/usage.js +75 -7
- package/dist/extensions/{caveman-session → caveman}/index.js +4 -2
- package/{extensions/caveman-session → dist/extensions/caveman}/rule-megacave.md +5 -3
- package/{extensions/caveman-session → dist/extensions/caveman}/rule-ultra.md +4 -4
- package/dist/extensions/caveman/rule.md +89 -0
- package/dist/extensions/{combo-toggle → combo}/index.js +62 -21
- package/dist/extensions/{tersio-commands → commands}/index.js +2 -2
- package/dist/extensions/pstack/index.js +119 -0
- package/dist/extensions/pstack/rule.md +65 -0
- package/dist/extensions/{rtk-filter/index.js → rtk/filter.js} +1 -2
- package/dist/extensions/{rtk-session/index.js → rtk/session.js} +5 -5
- package/dist/extensions/{opencode/server.js → server.js} +98 -14
- package/dist/extensions/shared/agent-stats.js +1198 -0
- package/dist/extensions/shared/brand-marks.js +153 -0
- package/dist/extensions/shared/carbon.js +1 -1
- package/dist/extensions/shared/plugin-settings.js +12 -7
- package/dist/extensions/shared/pricing.js +86 -30
- package/dist/extensions/shared/rtk-gain.js +4 -9
- package/dist/extensions/shared/session-state.js +15 -10
- package/dist/extensions/shared/sqlite.js +168 -0
- package/dist/extensions/shared/status.js +8 -8
- package/dist/extensions/shared/types.js +1 -1
- package/dist/extensions/shared/usage-ledger.js +113 -39
- package/dist/extensions/shared/usage-store.js +191 -48
- package/dist/extensions/{lib → shared}/utils.js +6 -6
- package/dist/extensions/timing/index.js +31 -0
- package/dist/extensions/{ai-addons-updater → updater}/index.js +13 -6
- package/dist/probe-catalog.js +48 -0
- package/dist/probe-catalog188.js +44 -0
- package/dist/tersio.js +9 -4
- package/extensions/{caveman-session → caveman}/index.ts +4 -2
- package/{dist/extensions/caveman-session → extensions/caveman}/rule-megacave.md +5 -3
- package/{dist/extensions/caveman-session → extensions/caveman}/rule-ultra.md +4 -4
- package/extensions/caveman/rule.md +89 -0
- package/extensions/{combo-toggle → combo}/index.ts +62 -19
- package/extensions/{tersio-commands → commands}/index.ts +2 -2
- package/extensions/pstack/index.ts +128 -0
- package/extensions/pstack/rule.md +65 -0
- package/extensions/{rtk-filter/index.ts → rtk/filter.ts} +1 -2
- package/extensions/{rtk-session/index.ts → rtk/session.ts} +5 -5
- package/extensions/{opencode/server.ts → server.ts} +81 -16
- package/extensions/shared/agent-stats.ts +1605 -0
- package/extensions/shared/brand-marks.ts +163 -0
- package/extensions/shared/carbon.ts +1 -1
- package/extensions/shared/plugin-settings.ts +13 -7
- package/extensions/shared/pricing.ts +95 -32
- package/extensions/shared/rtk-gain.ts +4 -9
- package/extensions/shared/session-state.ts +18 -13
- package/extensions/shared/sqlite.ts +168 -0
- package/extensions/shared/status.ts +9 -8
- package/extensions/shared/types.ts +2 -1
- package/extensions/shared/usage-ledger.ts +134 -46
- package/extensions/shared/usage-store.ts +202 -50
- package/extensions/{lib → shared}/utils.ts +6 -6
- package/extensions/timing/index.ts +45 -0
- package/extensions/{ai-addons-updater → updater}/index.ts +15 -9
- package/package.json +27 -18
- package/dist/extensions/caveman-session/rule.md +0 -79
- package/extensions/caveman-session/rule.md +0 -79
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// /ai-addons manual updater. Node built-ins only. RTK ships SHA256 checksums
|
|
1
|
+
// /ai-addons manual updater. Node built-ins only. RTK ships unsigned SHA256 checksums, so checksum-only it is.
|
|
2
2
|
|
|
3
3
|
import { execFileSync } from 'node:child_process';
|
|
4
4
|
import { createHash } from 'node:crypto';
|
|
5
|
+
import fsSync from 'node:fs';
|
|
5
6
|
import fs from 'node:fs/promises';
|
|
6
7
|
import os from 'node:os';
|
|
7
8
|
import path from 'node:path';
|
|
@@ -12,7 +13,6 @@ import {
|
|
|
12
13
|
CAVEMAN_REMOTE_ULTRA,
|
|
13
14
|
CAVEMAN_REMOTE_MEGACAVE,
|
|
14
15
|
RTK_RELEASE_API,
|
|
15
|
-
RtkRelease,
|
|
16
16
|
fetchJson,
|
|
17
17
|
findFile,
|
|
18
18
|
findHoistedPackage,
|
|
@@ -24,15 +24,24 @@ import {
|
|
|
24
24
|
readTextIfExists,
|
|
25
25
|
rtkPlatformSpec,
|
|
26
26
|
resolveRtkBinary,
|
|
27
|
-
} from '../
|
|
27
|
+
} from '../shared/utils.ts';
|
|
28
|
+
import type { RtkRelease } from '../shared/utils.ts';
|
|
28
29
|
|
|
29
30
|
const IS_WINDOWS = process.platform === 'win32';
|
|
30
31
|
const EXTENSION_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
31
32
|
|
|
32
33
|
const PONYTAIL_REMOTE = 'https://raw.githubusercontent.com/DietrichGebert/ponytail/main/package.json';
|
|
33
34
|
const RTK_BINARY = resolveRtkBinary();
|
|
34
|
-
// Beside this file
|
|
35
|
-
const
|
|
35
|
+
// Beside this file: a retired agent-tree copy has no `caveman` sibling, so fall back to the OMP plugin.
|
|
36
|
+
const CAVEMAN_SIBLING = (name: string): string => path.join(EXTENSION_DIR, '..', 'caveman', name);
|
|
37
|
+
|
|
38
|
+
function cavemanRule(name: string): string {
|
|
39
|
+
const beside = CAVEMAN_SIBLING(name);
|
|
40
|
+
if (fsSync.existsSync(beside)) return beside;
|
|
41
|
+
const plugin = path.join(os.homedir(), '.omp', 'plugins', 'node_modules', '@krtclcdy', 'tersio', 'extensions', 'caveman', name);
|
|
42
|
+
return fsSync.existsSync(plugin) ? plugin : beside;
|
|
43
|
+
}
|
|
44
|
+
|
|
36
45
|
const CAVEMAN_LOCAL = cavemanRule('rule.md');
|
|
37
46
|
const CAVEMAN_TRACKED: ReadonlyArray<{ file: string; remote: string }> = [
|
|
38
47
|
{ file: cavemanRule('rule-ultra.md'), remote: CAVEMAN_REMOTE_ULTRA },
|
|
@@ -41,13 +50,11 @@ const CAVEMAN_TRACKED: ReadonlyArray<{ file: string; remote: string }> = [
|
|
|
41
50
|
// Host-neutral: this updater runs inside pi, OMP, and OpenCode alike.
|
|
42
51
|
const RELOAD_MSG = 'Reminder: restart your agent (or reload extensions) for updates to take effect.';
|
|
43
52
|
|
|
44
|
-
// Ponytail is
|
|
53
|
+
// Ponytail is hoisted, so the installed copy is found by walking up, not by naming a host directory.
|
|
45
54
|
function ponytailLocal(): string | null {
|
|
46
55
|
return findHoistedPackage('@dietrichgebert/ponytail', EXTENSION_DIR, 'package.json');
|
|
47
56
|
}
|
|
48
57
|
|
|
49
|
-
// --- Types ---
|
|
50
|
-
|
|
51
58
|
interface AddonUpdaterCtx {
|
|
52
59
|
cwd?: string;
|
|
53
60
|
ui?: {
|
|
@@ -185,7 +192,6 @@ async function checkAddons(ctx: AddonUpdaterCtx): Promise<string> {
|
|
|
185
192
|
return lines.join('\n');
|
|
186
193
|
}
|
|
187
194
|
|
|
188
|
-
// Ponytail is a hoisted dependency; replace its package dir from the npm tarball.
|
|
189
195
|
async function updatePonytail(pi: AddonUpdaterPi, ctx: AddonUpdaterCtx, dryRun = false): Promise<string> {
|
|
190
196
|
void pi;
|
|
191
197
|
const localPkg = ponytailLocal();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@krtclcdy/tersio",
|
|
3
|
-
"version": "2.25.
|
|
3
|
+
"version": "2.25.6",
|
|
4
4
|
"description": "✂️ Token saver and usage tracker for coding agents: terse Caveman replies, compact RTK shell output, lean Ponytail code calls, and a gain dashboard — one-command combo presets over one shared extension tree.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"token-saving",
|
|
@@ -24,27 +24,25 @@
|
|
|
24
24
|
"tersio": "dist/tersio.js"
|
|
25
25
|
},
|
|
26
26
|
"exports": {
|
|
27
|
-
"./server": "./dist/extensions/
|
|
27
|
+
"./server": "./dist/extensions/server.js"
|
|
28
28
|
},
|
|
29
29
|
"omp": {
|
|
30
30
|
"name": "Tersio",
|
|
31
|
-
"description": "Toggleable Caveman/RTK/Ponytail session modes with Combo presets",
|
|
31
|
+
"description": "Toggleable Caveman/RTK/Ponytail session modes with Combo presets, plus the opt-in pstack rigor mode",
|
|
32
32
|
"extensions": [
|
|
33
|
-
"./extensions/caveman
|
|
34
|
-
"./extensions/
|
|
35
|
-
"./extensions/rtk
|
|
36
|
-
"./extensions/
|
|
37
|
-
"./extensions/
|
|
38
|
-
|
|
39
|
-
"skills": [
|
|
40
|
-
"./node_modules/@dietrichgebert/ponytail/skills"
|
|
33
|
+
"./extensions/caveman/index.ts",
|
|
34
|
+
"./extensions/pstack/index.ts",
|
|
35
|
+
"./extensions/rtk/session.ts",
|
|
36
|
+
"./extensions/rtk/filter.ts",
|
|
37
|
+
"./extensions/combo/index.ts",
|
|
38
|
+
"./extensions/commands/index.ts"
|
|
41
39
|
],
|
|
42
40
|
"features": {
|
|
43
41
|
"updater": {
|
|
44
42
|
"description": "In-session updater for Ponytail, RTK, and Caveman (/ai-addons)",
|
|
45
43
|
"default": true,
|
|
46
44
|
"extensions": [
|
|
47
|
-
"./extensions/
|
|
45
|
+
"./extensions/updater/index.ts"
|
|
48
46
|
]
|
|
49
47
|
}
|
|
50
48
|
},
|
|
@@ -95,6 +93,15 @@
|
|
|
95
93
|
],
|
|
96
94
|
"default": "off"
|
|
97
95
|
},
|
|
96
|
+
"pstackDefault": {
|
|
97
|
+
"type": "enum",
|
|
98
|
+
"description": "Session-start default; opt-in, never set by a combo preset",
|
|
99
|
+
"values": [
|
|
100
|
+
"off",
|
|
101
|
+
"on"
|
|
102
|
+
],
|
|
103
|
+
"default": "off"
|
|
104
|
+
},
|
|
98
105
|
"currency": {
|
|
99
106
|
"type": "enum",
|
|
100
107
|
"description": "Display currency for usage/dashboard reports (--currency overrides per run)",
|
|
@@ -116,16 +123,18 @@
|
|
|
116
123
|
},
|
|
117
124
|
"files": [
|
|
118
125
|
"dist/**/*.js",
|
|
119
|
-
"dist/extensions/caveman
|
|
126
|
+
"dist/extensions/caveman/*.md",
|
|
127
|
+
"dist/extensions/pstack/*.md",
|
|
120
128
|
"dashboard/dist/**/*",
|
|
121
129
|
"extensions/**/*.ts",
|
|
122
|
-
"extensions/caveman
|
|
123
|
-
"extensions/caveman
|
|
124
|
-
"extensions/caveman
|
|
130
|
+
"extensions/caveman/rule.md",
|
|
131
|
+
"extensions/caveman/rule-ultra.md",
|
|
132
|
+
"extensions/caveman/rule-megacave.md",
|
|
133
|
+
"extensions/pstack/rule.md"
|
|
125
134
|
],
|
|
126
135
|
"scripts": {
|
|
127
136
|
"clean": "rm -rf dist dashboard/dist",
|
|
128
|
-
"build": "tsc && bun run build:dashboard && cp extensions/caveman
|
|
137
|
+
"build": "tsc && bun run build:dashboard && cp extensions/caveman/*.md dist/extensions/caveman/ && cp extensions/pstack/*.md dist/extensions/pstack/",
|
|
129
138
|
"build:dashboard": "bun install --cwd dashboard/app --frozen-lockfile && bun run --cwd dashboard/app build",
|
|
130
139
|
"prepublishOnly": "bun run build",
|
|
131
140
|
"check": "tsc --noEmit",
|
|
@@ -151,6 +160,6 @@
|
|
|
151
160
|
"dependencies": {
|
|
152
161
|
"@clack/core": "^1.5.1",
|
|
153
162
|
"@clack/prompts": "^1.8.0",
|
|
154
|
-
"@dietrichgebert/ponytail": "^
|
|
163
|
+
"@dietrichgebert/ponytail": "^5.2.0"
|
|
155
164
|
}
|
|
156
165
|
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: caveman
|
|
3
|
-
description: >
|
|
4
|
-
Ultra-compressed communication mode that cuts output tokens while keeping
|
|
5
|
-
technical accuracy. Levels: lite, full, ultra and the megacave variants. Use for
|
|
6
|
-
/caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
Respond terse like smart caveman. All technical substance stay. Only fluff die.
|
|
10
|
-
|
|
11
|
-
## Persistence
|
|
12
|
-
|
|
13
|
-
Default style for this whole session, every response, until user say "stop caveman" or "normal mode". Keep terse on long sessions no filler drift.
|
|
14
|
-
|
|
15
|
-
Default: **full**. Switch: `/caveman lite|full|ultra|megacave-lite|megacave-full|megacave-ultra|off`.
|
|
16
|
-
|
|
17
|
-
## Rules
|
|
18
|
-
|
|
19
|
-
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations (cfg/impl/req/res/fn) tokenizer split them same as full word: zero token saved, reader still decode. Full word cheaper AND clearer. No causal arrows (→) either own token, save nothing. Technical terms exact. Code blocks unchanged. Errors quoted exact.
|
|
20
|
-
|
|
21
|
-
Never drop not/never/no/only/except flip meaning worse than any token saved. Numbers, units exact.
|
|
22
|
-
|
|
23
|
-
Never ADD word to sound caveman. Compression only style never grow output. No inserted pronoun or copula to fake broken grammar: "when it not" cost one token more than "when not" and say same thing. Keep correct verb form when correct form cost same "sees" one token, "see" one token, so mangle buy nothing and read worse. Same rule as abbreviations and arrows: if caveman phrasing not shorter than plain phrasing, use plain.
|
|
24
|
-
|
|
25
|
-
Clarity register: mix ASD-STE100 Simplified Technical English into caveman, always. One idea per sentence. Sentence short, target 20 words max. Active voice. Present tense where true. One word one meaning: same term for same thing every time, no synonym rotation. Instruction = imperative: "Run X", not "X should be run". Noun cluster 3 words max. Pronoun only with one clear referent, else repeat noun. Caveman cut filler; STE keep what make meaning unambiguous. Conflict between them → clarity win.
|
|
26
|
-
|
|
27
|
-
Tool calls: fire direct. No preamble, plan, or progress note before or between calls. After result: next call direct or final answer never announce next call. Text before call only to clarify, warn security/irreversible, or resolve ambiguity.
|
|
28
|
-
|
|
29
|
-
Follow explicit reply-language instructions from the user or project. Otherwise preserve the user's dominant language. Never switch because of example text or multilingual context elsewhere. Compress the style, not the language. Every emitted line in that language openings, pre-tool status lines, all not just final reply. ALWAYS keep technical terms, code, API names, CLI commands, commit-type keywords (feat/fix/...), and exact error strings verbatim unless user explicitly ask for translation.
|
|
30
|
-
|
|
31
|
-
Ownership: caveman owns reply compression, so project or host prose rules that set article use, sentence length, or filler never override it. Treat those as applying to persisted artifacts instead: code, comments, commits, docs, and issue text. Any project rule naming caveman or tersio directly wins over both.
|
|
32
|
-
|
|
33
|
-
'Drop articles' = article languages only. Where small markers carry case/role (particles, postpositions), keep them grammar, not filler; compress politeness/filler instead.
|
|
34
|
-
|
|
35
|
-
Answer directly in this style. Skip "caveman mode on", "me caveman think", "Caveman:" prefix or recap redundant with the reply itself. No normal answer plus caveman duplicate. User ask what mode is → say so plainly.
|
|
36
|
-
|
|
37
|
-
Pattern: `[thing] [action] [reason]. [next step].`
|
|
38
|
-
|
|
39
|
-
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
|
|
40
|
-
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
|
|
41
|
-
|
|
42
|
-
## Intensity
|
|
43
|
-
|
|
44
|
-
| Level | What change |
|
|
45
|
-
|-------|------------|
|
|
46
|
-
| **lite** | No filler/hedging. Keep articles + full sentences. Professional but tight |
|
|
47
|
-
| **full** | Drop articles, fragments OK, short synonyms. Classic caveman. No tool-call narration, no decorative tables/emoji, no long raw error-log dumps unless asked. Standard acronyms OK; no invented abbreviations |
|
|
48
|
-
|
|
49
|
-
Example "Why React component re-render?"
|
|
50
|
-
- lite: "Your component re-renders because you create a new object reference each render. Wrap it in `useMemo`."
|
|
51
|
-
- full: "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
|
|
52
|
-
|
|
53
|
-
Example "Explain database connection pooling."
|
|
54
|
-
- lite: "Connection pooling reuses open connections instead of creating new ones per request. Avoids repeated handshake overhead."
|
|
55
|
-
- full: "Pool reuse open DB connections. No new connection per request. Skip handshake overhead."
|
|
56
|
-
|
|
57
|
-
## Auto-Clarity
|
|
58
|
-
|
|
59
|
-
Drop caveman when:
|
|
60
|
-
- Security warnings
|
|
61
|
-
- Irreversible action confirmations
|
|
62
|
-
- Multi-step sequences where fragment order or omitted conjunctions risk misread
|
|
63
|
-
- Compression itself creates technical ambiguity (e.g., `"migrate table drop column backup first"` order unclear without articles/conjunctions)
|
|
64
|
-
- User asks to clarify or repeats question
|
|
65
|
-
|
|
66
|
-
Resume caveman after clear part done.
|
|
67
|
-
|
|
68
|
-
Example shows FORMAT only write warning in session language, not example's.
|
|
69
|
-
|
|
70
|
-
Example destructive op:
|
|
71
|
-
> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
|
|
72
|
-
> ```sql
|
|
73
|
-
> DROP TABLE users;
|
|
74
|
-
> ```
|
|
75
|
-
> Caveman resume. Verify backup exist first.
|
|
76
|
-
|
|
77
|
-
## Boundaries
|
|
78
|
-
|
|
79
|
-
Persisted outside chat: write normal prose code, comments, commits, docs, issue/PR/MR/defect/ticket/bug-report text, memory files, third-party messages (/caveman-compress exempt). "Open a defect" or "file a bug" mean the same as "open issue": body go to other humans, so body normal English. "stop caveman" or "normal mode": revert. Level persist until changed or session end.
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: caveman
|
|
3
|
-
description: >
|
|
4
|
-
Ultra-compressed communication mode that cuts output tokens while keeping
|
|
5
|
-
technical accuracy. Levels: lite, full, ultra and the megacave variants. Use for
|
|
6
|
-
/caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
Respond terse like smart caveman. All technical substance stay. Only fluff die.
|
|
10
|
-
|
|
11
|
-
## Persistence
|
|
12
|
-
|
|
13
|
-
Default style for this whole session, every response, until user say "stop caveman" or "normal mode". Keep terse on long sessions no filler drift.
|
|
14
|
-
|
|
15
|
-
Default: **full**. Switch: `/caveman lite|full|ultra|megacave-lite|megacave-full|megacave-ultra|off`.
|
|
16
|
-
|
|
17
|
-
## Rules
|
|
18
|
-
|
|
19
|
-
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations (cfg/impl/req/res/fn) tokenizer split them same as full word: zero token saved, reader still decode. Full word cheaper AND clearer. No causal arrows (→) either own token, save nothing. Technical terms exact. Code blocks unchanged. Errors quoted exact.
|
|
20
|
-
|
|
21
|
-
Never drop not/never/no/only/except flip meaning worse than any token saved. Numbers, units exact.
|
|
22
|
-
|
|
23
|
-
Never ADD word to sound caveman. Compression only style never grow output. No inserted pronoun or copula to fake broken grammar: "when it not" cost one token more than "when not" and say same thing. Keep correct verb form when correct form cost same "sees" one token, "see" one token, so mangle buy nothing and read worse. Same rule as abbreviations and arrows: if caveman phrasing not shorter than plain phrasing, use plain.
|
|
24
|
-
|
|
25
|
-
Clarity register: mix ASD-STE100 Simplified Technical English into caveman, always. One idea per sentence. Sentence short, target 20 words max. Active voice. Present tense where true. One word one meaning: same term for same thing every time, no synonym rotation. Instruction = imperative: "Run X", not "X should be run". Noun cluster 3 words max. Pronoun only with one clear referent, else repeat noun. Caveman cut filler; STE keep what make meaning unambiguous. Conflict between them → clarity win.
|
|
26
|
-
|
|
27
|
-
Tool calls: fire direct. No preamble, plan, or progress note before or between calls. After result: next call direct or final answer never announce next call. Text before call only to clarify, warn security/irreversible, or resolve ambiguity.
|
|
28
|
-
|
|
29
|
-
Follow explicit reply-language instructions from the user or project. Otherwise preserve the user's dominant language. Never switch because of example text or multilingual context elsewhere. Compress the style, not the language. Every emitted line in that language openings, pre-tool status lines, all not just final reply. ALWAYS keep technical terms, code, API names, CLI commands, commit-type keywords (feat/fix/...), and exact error strings verbatim unless user explicitly ask for translation.
|
|
30
|
-
|
|
31
|
-
Ownership: caveman owns reply compression, so project or host prose rules that set article use, sentence length, or filler never override it. Treat those as applying to persisted artifacts instead: code, comments, commits, docs, and issue text. Any project rule naming caveman or tersio directly wins over both.
|
|
32
|
-
|
|
33
|
-
'Drop articles' = article languages only. Where small markers carry case/role (particles, postpositions), keep them grammar, not filler; compress politeness/filler instead.
|
|
34
|
-
|
|
35
|
-
Answer directly in this style. Skip "caveman mode on", "me caveman think", "Caveman:" prefix or recap redundant with the reply itself. No normal answer plus caveman duplicate. User ask what mode is → say so plainly.
|
|
36
|
-
|
|
37
|
-
Pattern: `[thing] [action] [reason]. [next step].`
|
|
38
|
-
|
|
39
|
-
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
|
|
40
|
-
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
|
|
41
|
-
|
|
42
|
-
## Intensity
|
|
43
|
-
|
|
44
|
-
| Level | What change |
|
|
45
|
-
|-------|------------|
|
|
46
|
-
| **lite** | No filler/hedging. Keep articles + full sentences. Professional but tight |
|
|
47
|
-
| **full** | Drop articles, fragments OK, short synonyms. Classic caveman. No tool-call narration, no decorative tables/emoji, no long raw error-log dumps unless asked. Standard acronyms OK; no invented abbreviations |
|
|
48
|
-
|
|
49
|
-
Example "Why React component re-render?"
|
|
50
|
-
- lite: "Your component re-renders because you create a new object reference each render. Wrap it in `useMemo`."
|
|
51
|
-
- full: "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
|
|
52
|
-
|
|
53
|
-
Example "Explain database connection pooling."
|
|
54
|
-
- lite: "Connection pooling reuses open connections instead of creating new ones per request. Avoids repeated handshake overhead."
|
|
55
|
-
- full: "Pool reuse open DB connections. No new connection per request. Skip handshake overhead."
|
|
56
|
-
|
|
57
|
-
## Auto-Clarity
|
|
58
|
-
|
|
59
|
-
Drop caveman when:
|
|
60
|
-
- Security warnings
|
|
61
|
-
- Irreversible action confirmations
|
|
62
|
-
- Multi-step sequences where fragment order or omitted conjunctions risk misread
|
|
63
|
-
- Compression itself creates technical ambiguity (e.g., `"migrate table drop column backup first"` order unclear without articles/conjunctions)
|
|
64
|
-
- User asks to clarify or repeats question
|
|
65
|
-
|
|
66
|
-
Resume caveman after clear part done.
|
|
67
|
-
|
|
68
|
-
Example shows FORMAT only write warning in session language, not example's.
|
|
69
|
-
|
|
70
|
-
Example destructive op:
|
|
71
|
-
> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
|
|
72
|
-
> ```sql
|
|
73
|
-
> DROP TABLE users;
|
|
74
|
-
> ```
|
|
75
|
-
> Caveman resume. Verify backup exist first.
|
|
76
|
-
|
|
77
|
-
## Boundaries
|
|
78
|
-
|
|
79
|
-
Persisted outside chat: write normal prose code, comments, commits, docs, issue/PR/MR/defect/ticket/bug-report text, memory files, third-party messages (/caveman-compress exempt). "Open a defect" or "file a bug" mean the same as "open issue": body go to other humans, so body normal English. "stop caveman" or "normal mode": revert. Level persist until changed or session end.
|