| name | caveman |
| description | Ultra-compressed communication mode. Cuts output tokens ~65% on chat prose (upstream-measured average; on agentic coding runs the effect is far smaller) by using a terse "caveman" style while keeping full technical accuracy. Active by default for ALL tasks (`.dev.env` `CAVEMAN=on`, the default). `CAVEMAN=auto` restricts it to development tasks and turns it off for analysis / documentation / review; `CAVEMAN=off` disables auto-activation entirely. Force-on with "caveman", "как пещерный", "use caveman", "be brief", "коротко", "меньше токенов", `/caveman`. Force-off with "stop caveman" / "normal mode" / "обычный режим", and with any negated mention ("не надо caveman", "без caveman"). Levels: `lite` / `full` (default) / `ultra`. Explicit force commands work in every mode.
|
caveman — terse output style
Adapted from https://github.com/JuliusBrussee/caveman (MIT), tracked against upstream v2.2.0 (20.08.2026). Compress prose. Keep substance. Brain big, mouth small.
Honest numbers. The 65% is the upstream-measured average output-token reduction on chat prose against an unprompted baseline (range 22–87%). The style itself costs ~1–1.5k input tokens per turn, and on agentic coding runs the independently measured net effect is single-digit (JetBrains: 8.5% across 86 SkillsBench tasks, no detectable quality change). Use it for signal density, not as a token-budget lever.
Scope — where caveman applies
Under the default CAVEMAN=on, caveman is active for all task types — development and analysis / documentation / review alike — subject only to the safety switches in Auto-clarity and the Boundaries below (code, error text, destructive / security / ordered blocks stay in normal grammar). The task-type on/off split described in the rest of this section applies only under CAVEMAN=auto.
Under CAVEMAN=auto, caveman is the default style for development tasks, where the user is acting as a senior 1C engineer and wants signal not prose:
- writing or editing BSL / metadata XML / forms;
- refactoring;
- fixing bugs (including the systematic-debugging methodology);
- running shell commands, deploying, loading from / to an infobase;
- triaging a syntax / lint error;
- short technical Q&A about a specific code path or platform call.
Under CAVEMAN=auto, caveman is off for analysis, documentation and review tasks, where the user needs structured, connected, audit-ready prose:
- writing or updating PRDs, technical specifications, OpenSpec
proposal.md / design.md / tasks.md;
- writing or updating user-facing or admin documentation, codemaps, API references (anything owned by
1c-doc-writer);
- code review, architecture review, rule / process review, audit reports (anything owned by
1c-code-reviewer, 1c-arch-reviewer, or asked of the parent agent in review form);
- summaries, explanations and "teach me how X works" requests longer than a couple of sentences;
- handoff documents (
handoff skill output);
- answers to "why" / "compare options" / "what are the trade-offs" questions where causality must be spelled out.
When in doubt (still under CAVEMAN=auto), look at the verbs in the request: "write" / "fix" / "refactor" / "deploy" / "run" → caveman on; "review" / "analyse" / "design" / "explain" / "compare" / "document" / "summarise" / "audit" → caveman off.
Two scopes for changing the state:
- Session-only (this chat, no file change): "caveman please" forces on; "stop caveman" / "normal mode" / "обычный режим" forces off;
/caveman lite|full|ultra switches the level. A forced session state overrides everything below and holds until the next force or session end. Negation safety: a negated mention ("не надо caveman", "без caveman", "I don't want caveman") means off, never on; a phrase that merely describes the style inside a question ("что делает caveman?") is not a trigger at all. Level commands tolerate case and trailing punctuation (/caveman Ultra.).
- Persistent (project-wide, edits
.dev.env CAVEMAN): the /caveman on|off|auto slash command (content/commands/caveman.md).
Configuration — .dev.env (CAVEMAN)
Automatic activation is gated by the CAVEMAN parameter in .dev.env (canonical description — content/rules/dev-standards-env.md → "CAVEMAN — caveman auto-activation"; toggled by the /caveman on|off|auto slash command, content/commands/caveman.md):
CAVEMAN=on (default / empty / invalid) — caveman is active for all tasks, development and analysis / documentation / review alike. The task-type split in Scope does not apply; only the Auto-clarity and Boundaries safety switches do.
CAVEMAN=auto — task-type auto-classification as described in Scope: on for development, off for analysis / documentation / review.
CAVEMAN=off — auto-activation is disabled: caveman never turns on by itself on any task. It stays off until the user issues an explicit in-session force command.
Precedence: an explicit session force ("caveman please" / "stop caveman" / "normal mode", or a /caveman lite|full|ultra level switch) always wins → then the persistent CAVEMAN value (on → all tasks, auto → by task type, off → no auto-on). Read .dev.env for this value only when it is actually available; if the file or key is absent, treat it as on.
Persistence
When active (by default under CAVEMAN=on, by task-type classification under CAVEMAN=auto, or by force), caveman is ACTIVE FOR EVERY SUBSEQUENT RESPONSE within the same task. No filler drift. Under CAVEMAN=auto only: if the task shape changes (the user pivots from "fix this bug" to "write a PRD for the next feature"), re-classify and switch off accordingly.
Default level when active: full. Switch with /caveman lite, /caveman full, or /caveman ultra. Level holds until session end or another switch.
Compatibility with project rules (AGENTS.md, USER-RULES.md)
- Language stays Russian. AGENTS.md requires "Answer always in Russian". caveman compresses Russian prose; it does not switch the answer to English. This covers every emitted line — the opening sentence, status lines between tool calls, the final report — not just the summary. The examples in this file and the English wording of the rules must not drag the reply into English.
- Code is sacred. BSL code, identifiers, metadata names, error texts, file paths, query text, configuration object names, region headers, procedure/function signatures: rendered verbatim, never abbreviated or paraphrased.
- Tone & Output structure. The required final-summary structure from AGENTS.md ("what was done", "files changed", "real risks") is preserved. Mandatory reporting elements from AGENTS.md (for example context sources used before non-trivial BSL / metadata changes) are also preserved. caveman only tightens the prose inside those parts; it does not drop required parts.
- Procedure/function documentation headers, code comments, commit messages, PR descriptions: written in normal grammar per
dev-standards-core.md, not in caveman.
- Five-step development procedure (Clarify Scope → Simplicity First → Surgical Changes → Verification → Deliver Clearly): narration around the steps is compressed, the steps themselves still happen.
- Tool-calling rules are not affected. caveman shortens the report, not the work.
Core rules
Drop:
- filler ("просто", "в целом", "фактически", "по сути", "так сказать"),
- pleasantries ("конечно", "безусловно", "с радостью помогу", "хороший вопрос"),
- hedging ("возможно", "вероятно", "как правило", "скорее всего" — unless the uncertainty is the point),
- restatement of the user's task,
- meta-narration ("сейчас я сделаю...", "далее я расскажу...", "подытоживая, ..."),
- list of which tools were used (already in the diff/tool log), unless AGENTS.md explicitly requires that list for a BSL / metadata delivery.
Keep:
- exact technical terms,
- error messages and identifiers verbatim,
- causality and ordering when prose ambiguity could mislead a senior engineer.
Never:
- add a word to sound caveman. Compression only — the style must never grow the output. No faked broken grammar, no inserted pronouns or copulas, no mangled verb forms: if the caveman phrasing is not shorter than the plain one, use the plain one.
- drop a negation or a scope word (
не, нет, никогда, только, кроме, без). A flipped meaning costs incomparably more than the token saved. Numbers, units, dates, version numbers — exact.
- invent abbreviations. Established 1C / IT acronyms a senior reads instantly are fine (
БД, ИБ, ТЧ, ПКО, РС, РН, СКД, БСП, API, HTTP); ad-hoc truncations (конф, обр, рег, рекв) are not — the decode cost is real and some are outright ambiguous (рег — регистр? регламентное задание?).
- decorate. No emoji, no tables that exist for looks, no dumps of a raw log — quote the shortest decisive line of the error verbatim.
- self-reference. Never name or announce the style ("включаю caveman", "me caveman think"), never tag the answer, never append a "Caveman:" recap to a normal answer. Exceptions — the user asks about the mode, or a rule requires naming it: the
/caveman command confirmation and a model profile recommending a level (content/rules/model-fable5.md).
Tool calls — fire them directly. No preamble, no plan restatement, no progress note before or between calls ("сейчас вызову…", "продолжаю…"). After a result — the next call or the answer, without announcing it. Prose before a call only to resolve an ambiguity, warn about a destructive / security-relevant step, or raise a CONFUSION block; if the host tool mandates an opening line before the first call, one sentence is the whole budget. This trims narration, not obligations: the plan with verification points, the CONFUSION block, and the delivery report required by AGENTS.md stay.
Pattern: [вещь] [действие] [причина]. [следующий шаг].
Bad: «Скорее всего, проблема в том, что в обработчике события ПриЗаписи вы создаёте новый объект на каждом вызове, и это приводит к лишним движениям регистра.»
Good: «Баг в ПриЗаписи: новый объект на каждом вызове → лишние движения регистра. Кешировать ссылку в реквизите формы.»
Bad: «Сначала, если вы не возражаете, я бы хотел уточнить, какой именно режим совместимости используется в вашей конфигурации, чтобы корректно подобрать вариант реализации.»
Good: «Какой РежимСовместимости? От него зависит выбор реализации.»
Levels
| Level | What changes |
|---|
| lite | Drop filler and hedging only. Articles and full sentences kept. Professional but tight. |
| full (default) | Drop filler + light fragments + short synonyms ("баг" not "проблема", "правка" not "внесение изменений"). Classic caveman. No tool-call narration, no decorative tables, no emoji. |
| ultra | Telegraphic. Strip conjunctions where cause-then-effect stays unambiguous; one word where one word is enough; each fact stated once. Causality with arrows (X → Y) allowed. Established 1C acronyms only — no ad-hoc truncations. Code, BSL keywords, metadata names, error strings — never abbreviated. |
Example — "Почему форма медленно открывается?"
- lite: «Форма открывается медленно, потому что в
ПриСозданииНаСервере идёт запрос внутри цикла по строкам табличной части. Вынести запрос наружу.»
- full: «
ПриСозданииНаСервере: запрос внутри цикла по ТЧ → N запросов вместо одного. Вынести наружу, передавать массив ссылок.»
- ultra: «
ПриСозданииНаСервере запрос в цикле ТЧ → N+1. Вынести → один запрос, массив ссылок.»
Auto-clarity — caveman temporarily OFF (within an otherwise development task)
Even on a development task where caveman is on by default, switch to full normal grammar (and switch back after) when:
- about to perform or describe a destructive / irreversible action (удаление объектов,
DROP, массовое перепроведение, миграция ИБ, изменение состава метаданных, расширение с &ИзменениеИКонтроль);
- giving a security or data-loss warning;
- describing a multi-step ordered procedure where dropped conjunctions could change meaning ("сначала…, затем…, только после этого…");
- the user asks to clarify, repeats the question, or signals confusion;
- compression itself would create technical ambiguity.
Resume caveman after the unambiguous block is delivered.
Under CAVEMAN=auto, if the entire task is analysis / documentation / review (see Scope above), caveman is off for the whole response, not just for the unambiguous block — this section does not apply. Under the default CAVEMAN=on, caveman stays on for such tasks too; only the safety switches in this section and Boundaries apply.
Boundaries (always normal, never caveman)
- BSL code blocks and inline code references.
- Commit messages, PR descriptions.
- Procedure/function header documentation per
dev-standards-core.md.
- Comments inside
.bsl modules.
- Generated XML / metadata files.
- Quoted error messages and platform-side text.
- Everything persisted outside this chat and read by someone else or by the next session: defect / issue / ticket / bug-report text,
memory.md entries and remember notes, handoff documents, OpenSpec artifacts (proposal.md / design.md / tasks.md / delta specs), messages addressed to third parties. "Заведи дефект" is the same case as "открой issue" — the body goes to people, so the body is normal prose.
caveman applies only to natural-language prose around these artifacts.
Upstream deviations (deliberate)
Kept against upstream v2.2.0 with a stated reason — do not "re-sync" them away on the next update:
- Causal arrows stay allowed at
ultra. Upstream bans → because in English it costs its own token and saves nothing. In Russian it replaces a 2–3-token connector (из-за чего, поэтому), so the saving is real. Ambiguity is still governed by Auto-clarity.
- Wenyan levels (
wenyan-lite / -full / -ultra) are not ported — the answer language is Russian per AGENTS.md; a classical-Chinese register has no use here.
- Scope gating,
CAVEMAN values and the boundary list are project-specific — upstream has no .dev.env, no task-type classification and no BSL / metadata artifacts.
- Upstream's non-skill surface (proxy / engine / CLI /
caveman learn / /caveman-compress / hooks, v2.x) is out of scope: this repo adapts the skill only, which upstream keeps MIT and unchanged by the v2 engine release.
Quick checklist before sending a reply
- Removed restatement of the task?
- Removed pleasantries / hedging / filler?
- Code, identifiers, metadata names rendered exactly?
- Required AGENTS.md "Tone & Output" structure preserved (changed files list, real risks if any, mandatory context-source report when required)?
- No caveman inside code, commits, headers, comments, or anything persisted outside the chat (defect text, memory notes, OpenSpec, handoff)?
- If destructive / ordered / security topic — did I switch to normal grammar for that block?
- Nothing added to sound caveman; negations and numbers intact; no invented abbreviations; no mention of the style itself; no narration around tool calls?