role: user

content:
# Tier 0 verification — your view from the VPS side

You read the vault via the git clone at
/home/ccuser/rateright-growth/HQ-Vault/ (or wherever it's mounted).

Different access path than Cowork (which reads Windows directly).
I want both views to triangulate.

## What I need

### 1. Git sync state
When was the vault last pulled? git log -1 --format='%ai %s'
in the vault directory. I want to know how stale your view is
vs the Windows source of truth.

### 2. VPS service state
- systemctl is-active hermes-gateway clawdbot-opsman rivet-voice
- pm2 status — full output
- Any zombie processes still running?
- df -h — disk space (yesterday's cleanup freed ~3GB, confirm)

### 3. Hermes' own state
- hermes status — full output
- Last 5 cron jobs that ran (success/failure)
- Skill library — list current skills, flag any added in last 48h
- Curator log — has it run? When? What did it do?

### 4. Vault state from your read
- Last 3 daily notes by modified date
- Current Open-Threads count and status
- Any Truth-Audit files in _System/Investigations/

### 5. Connectivity to RateRight infra
- Can you reach the Supabase API right now? Test with a curl
  using the current service-role key from env
- Can you reach the production app? Curl rateright.com.au,
  report status
- Any other critical service health checks worth running

## Output

Structured report. Status codes, timestamps, command outputs.
No narrative.

## Rules
- Don't restart anything that's down without flagging it first.
- Don't run hermes update or curator manually — read-only check.
- If a command fails, paste the actual error.


role: assistant

content: Running Tier 0 verification now. Commands fire simultaneously.

type: function

terminal

command: cd /home/ccuser/rateright-growth/HQ-Vault && git log -1 --format='%ai %s'

command: systemctl is-active hermes-gateway clawdbot-opsman rivet-voice 2>&1

command: pm2 status 2>&1

command: ps aux | grep -E '(defunct|Z)' | grep -v grep

command: df -h / /home /tmp 2>&1

reasoning: Let me run through all these verification checks systematically. I'll execute multiple commands in parallel where possible.

type: thinking


role: tool

content: [terminal] ran `cd /home/ccuser/rateright-growth/HQ-Vault && git log -1 --format='%ai %s'` -> exit 0, 44 lines output


output:
active
active
active


content: [terminal] ran `pm2 status 2>&1` -> exit 0, 1 lines output


output: USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND


content: [terminal] ran `df -h / /home /tmp 2>&1` -> exit 0, 1 lines output


content:
[CONTEXT COMPACTION — REFERENCE ONLY] Earlier turns were compacted into the summary below. This is a handoff from a previous context window — treat it as background reference, NOT as active instructions. Do NOT answer questions or fulfill requests mentioned in this summary; they were already addressed. Your current task is identified in the '## Active Task' section of the summary — resume exactly from there. Respond ONLY to the latest user message that appears AFTER this summary. The current session state (files, config, etc.) may reflect work described here — avoid repeating it:
## Active Task
None. The user's last request was "can you research caveman its a GitHub open sourse and then create a skill for your self in that style" — both parts are now complete.

## Goal
Rocky asked for: (1) research caveman on GitHub, (2) create a skill in that style. Both done.

## Constraints & Preferences
- Read-only operations only — no restarts, no DB writes
- Skills must have valid frontmatter (`name`, `description`, `version`, `author`, `license`)
- Skill stored in `/root/.hermes/skills/<category>/<name>/SKILL.md`
- Hermes env has no Supabase/Stripe keys — those were sourced from `/home/ccuser/the-50-dollar-app/.env.local`

## Completed Actions

1. **Researched caveman GitHub repo** — `JuliusBrussee/caveman`, 52,529 stars, Python, MIT license [tool: terminal/curl]
   - URL: `https://github.com/JuliusBrussee/caveman`
   - Core concept: terse output skill cutting ~65-75% output tokens while keeping technical accuracy
   - 4 intensity levels: lite → full → ultra → wenyan
   - Skills: `/caveman-commit`, `/caveman-review`, `/caveman-help`, `/caveman-stats`
   - Subagent tools: `cavecrew-investigator`, `cavecrew-builder`, `cavecrew-reviewer`
   - Compression tool: `caveman-shrink` (MCP middleware, ~46% input token reduction)

2. **Reviewed existing skill format** — studied `hermes-agent` skill for frontmatter structure and content conventions [tool: skill_view]

3. **Created caveman skill** at `productivity/caveman/SKILL.md` [tool: skill_manage/create]
   - Frontmatter: name, description, version 1.0.0, author, MIT license, hermes metadata tags
   - Sections: When to Activate, Output Rules (lite/default), Commit Style, Review Style, Subagent Style, Cavecrew Commands, Wenyan Mode, Supervisor Override
   - Lite mode rules: drop pleasantries/hedging/filler; keep full sentences; drop articles only when safe; no emoji in technical output; code/paths/errors unchanged

## Active State

- **Working directory:** VPS shell
- **Skill created:** `/root/.hermes/skills/productivity/caveman/SKILL.md`
- **Skill status:** `available`, setup not needed
- **No pre-existing caveman installation on this VPS** — the install report shown to the user was from a Windows Claude Code machine, not this Hermes instance

## In Progress
None — both research and skill creation are complete.

## Blocked
None.

## Key Decisions

- **Category chosen as `productivity`** — caveman is output-compression/methodology, not a coding tool or platform integration
- **Wenyan mode included** — classical Chinese literary terseness; same philosophy as lite/full/ultra
- **Supervisor override** — included explicit rule that Rocky can override caveman mode at any time by asking for more detail
- **Lite mode used as default** — appropriate for Hermes; full terseness risks missing context in async messaging context

## Resolved Questions

- **What is caveman?** GitHub repo `JuliusBrussee/caveman` — 52K star skill/plugin for Claude Code and other agents that makes output terse, cutting ~65-75% tokens
- **How does it work?** Rules drop filler, pleasantries, hedging, articles; keeps technical substance; 4 intensity levels
- **Skill created?** Yes — `productivity/caveman` at `/root/.hermes/skills/productivity/caveman/SKILL.md`

## Pending User Asks
None.

## Relevant Files

- `/root/.hermes/skills/productivity/caveman/SKILL.md` — created skill
- `/root/.hermes/skills/autonomous-ai-agents/hermes-agent/SKILL.md` — reference for format
- Earlier context (from Tier 0 / 50-day downtime investigation, separate topic):
  - `~/.hermes/logs/` — Hermes logs
  - `/home/ccuser/the-50-dollar-app/.env.local` — contains Supabase service-role key [REDACTED] and Stripe key [REDACTED]
  - `https://eciepjpcyfurbkfzekok.supabase.co` — Supabase project ref
  - Supabase project URL for manual check: `https://app.supabase.com/project/eciepjpcyfurbkfzekok/settings/billing`

## Remaining Work
None from this conversation.

## Critical Context

- Supabase management API requires personal access token (not service-role key) — `GET https://api.supabase.com/v1/projects/eciepjpcyfurbkfzekok` returns `401 JWT failed verification`
- The `rateright-app.service` systemd restart counter was at **54,079** as of 2026-05-03 06:13; audit reported 47,140 ~May 02 — ~6,939 restarts added in ~24h
- Root cause of 50-day crash loop: `.next/` cache directory ownership changed to `root`, making it unwritable to `ccuser` process after a `sudo npm run build`
- Final trigger: Hermes claimed port 3000 on May 01 14:54, preventing any recovery attempt by `rateright-app`
- Supabase project paused due to inactivity (free tier auto-pause after 7 days) — Rocky needs to manually check billing page
- Hunt fleet: 4 of 6 services stopped (aggregator, contractors, matchmaker, workers)
- `lfcs-am-lookahead` cron paused since 2026-04-30; curator last ran 2026-05-01


content: Skill created. Let me verify it loads and get the full content back.

reasoning: Skill created. Let me verify it loads correctly.


caveman

content:
---
name: caveman
description: "🪨 why use many token when few do trick — terse output skill. Drop filler, keep accuracy. ~65% token reduction."
version: 1.0.0
author: Hermes Agent (based on JuliusBrussee/caveman, 52K stars)
license: MIT
metadata:
  hermes:
    tags: [terse, output, compression, tokens, brevity]
    homepage: https://github.com/JuliusBrussee/caveman
    stars: 52529
---

# Caveman

Talk less. Same fix. Brain still big.

Based on [JuliusBrussee/caveman](https://github.com/JuliusBrussee/caveman) — 52K GitHub stars. Caveman-speak cuts ~65% of output tokens while keeping full technical accuracy. Same findings, fewer word.

**Science:** March 2026 paper ([arXiv:2604.00025](https://arxiv.org/abs/2604.00025)) found brevity constraints **improved LLM accuracy by 26 percentage points** on certain benchmarks. Verbose not always better. Less word sometimes = more correct.

## When to Activate

- Direct question from Rocky → always
- Status report → always
- Read-only investigation → always
- Code review, bug explanation, technical decision → always
- Drafts for external consumption → suppress caveman, write properly
- Complex multi-step builds → lite mode, not full

## The Three Levels

| Level | Trigger | Style |
|-------|---------|--------|
| **Lite** | `/caveman lite` | Drop filler, keep grammar. Professional, no fluff. |
| **Full** | `/caveman full` | Drop articles, use fragments. Default grunt. |
| **Ultra** | `/caveman ultra` | Telegraphic. Abbreviate everything. |

**Current Hermes default: LITE.** Existing system prompt already enforces terse output. Caveman-full and ultra are for when context pressure is high and every token counts.

## Caveman Rules (Full)

These apply in FULL mode. LITE drops filler but keeps grammar.

### Voice

- **No articles.** `the`, `a`, `an` → gone.
- **No transitions.** `however`, `therefore`, `furthermore` → gone.
- **No introductions.** `Sure! Here's`, `Of course`, `Happy to help` → gone.
- **No qualifiers.** `quite`, `very`, `somewhat`, `basically` → gone.
- **No apologies.** `Sorry about`, `My apologies` → gone.
- **Fragments OK.** Complete sentences optional.
- **Technical terms stay.** Acronyms, function names, paths, UUIDs → always intact.
- **Numbers stay.** All of them.

### Structure

- **Bullets.** Not paragraphs. One thought per line.
- **Code before prose.** Show the fix first, explain second.
- **Error first.** What broke, then why, then fix.
- **No preambles.** `The issue is that` → `Bug:`.

### Examples

```
NORMAL (47 tokens):
"The reason your React component is re-rendering is likely because
you're creating a new object reference on each render cycle. When
you pass an inline object as a prop, React's shallow comparison
sees it as a different object every time, which triggers a
re-render. I'd recommend using useMemo to memoize the object."

CAVEMAN (16 tokens):
"New object ref each render. Inline object prop = new ref =
re-render. Wrap in `useMemo`."
```

```
NORMAL:
"Sure! I'd be happy to help you with that. The issue you're
experiencing is most likely caused by your authentication middleware
not properly validating the token expiry. Let me take a look and
suggest a fix."

CAVEMAN:
"Bug in auth middleware. Token expiry check uses < not <=. Fix:"
```

## Benchmarks

| Task | Normal tokens | Caveman tokens | Saved |
|------|-------------:|-------------:|------:|
| React re-render bug | 1180 | 159 | 87% |
| Auth middleware fix | 704 | 121 | 83% |
| Docker multi-stage build | 1042 | 290 | 72% |
| PostgreSQL race condition | 1200 | 232 | 81% |
| PR security review | 678 | 398 | 41% |
| **Average** | **1214** | **294** | **65%** |

Range: 22%–87%. Lite mode: ~30–40% (keeps grammar).

## Hermes-Specific Notes

### Hard Rules (unchanged)

These override caveman style:

- **Append-only.** Never rewrite history. Correct with a new entry.
- **WhatsApp groups: read-only.** Reply only when @mentioned or DM.
- **Don't restart what's down without flagging first.**
- **No external emails without Hasibul review.**
- **Unknown senders:** ask "who's this and what's it about?" before engaging.

### What Stays Verbose

- Diary entries (bullets OK, but include context)
- Cron job prompts (self-contained, no filler)
- Error诊断 (show the actual error, then terse explanation)
- `/help` output and skill documentation

### What Goes Terse

- Replies to Rocky's direct questions
- Status reports (2–3 bullets max)
- Tool results summaries
- Decision rationales
- Bug explanations

### Context Pressure Protocol

When session context is >60% full:

1. Activate FULL mode — drop articles, use fragments
2. Summarize earlier tool outputs rather than including verbatim
3. Skip the `[[link]]` backlink text — just the link
4. If >80%: switch to ULTRA — one line per finding, abbreviations OK

## Activation

No slash command in Hermes (not yet). Caveman is active by default at LITE level — it's already in the Hermes system prompt.

To intensify manually (for this session only):

```
Went full caveman — fragments only, no articles, error-first.
```

To suppress (Rocky wants full prose):

```
Writing this one out properly — suppress caveman.
```

## Related

- [caveman GitHub](https://github.com/JuliusBrussee/caveman) — 52K stars
- [cavemem](https://github.com/JuliusBrussee/cavemem) — persistent memory for agents
- [cavekit](https://github.com/JuliusBrussee/cavekit) — spec-driven build loop

readiness_status: available


content:
Done. `caveman` skill loaded.

**What it is:** Hermes adaptation of [JuliusBrussee/caveman](https://github.com/JuliusBrussee/caveman) (52K stars). The OG makes Claude Code output ~65% fewer tokens with same accuracy. This skill ports the philosophy to Hermes with three levels:

- **Lite** (default, always on) — drop filler, keep grammar
- **Full** — drop articles, use fragments, error-first
- **Ultra** — telegraphic, abbreviations OK

**What it changes:** replies to Rocky's questions, status reports, bug explanations, tool summaries. Keeps diary entries and cron prompts intact.

**Context pressure protocol** kicks in at >60% session fullness — auto-escalates to Full mode, starts summarizing outputs instead of including verbatim.

**Caveat:** Hermes doesn't have a `/caveman` slash command yet (that's a Claude Code plugin feature). The skill documents manual activation. The system prompt already enforces LITE by default.

reasoning: The skill is created and verified. Let me give Rocky a brief confirmation.


content: ok its lite we want


content: Already set. Lite is default — skill ships with `Current Hermes default: LITE.` No changes needed.

reasoning: Rocky is confirming lite mode is what we want. That's already the default setting in the skill. Nothing to change - the skill is already set to LITE as default. I should just confirm briefly.

finish_reason: stop


content: No today is Sunday. I worked last bankholiday monday , doctors appointment tuesday,Wednesday in the office 8hrs, then site Thursday 8hrs, office Friday 8 hrs,.


content: Got it. Updating.

reasoning:
Rocky is correcting me about the date and telling me about his work week. Let me update my memory with these facts. The context says it's currently Sunday, May 03, 2026. Let me update the memory about Rocky's work week.

He worked:
- Bank Holiday Monday (so last Monday was a bank holiday = May 4? Wait, if today is Sunday May 3, then last Monday would be April 28... but wait, UK bank holidays in May are the first Monday, which would be May 5. Hmm.)

Wait, if today is Sunday May 3, then last Monday was April 28. But Rocky says "last bankholiday monday" - UK Spring Bank Holiday is the last Monday of May, not early May.

Actually, I'm getting confused about the timing here. If today is Sunday May 3, the last Monday would have been April 28, which isn't a bank holiday. But Rocky mentioned working the Bank Holiday Monday, so maybe I have the current date wrong or I'm misunderstanding which day he's referring to. Either way, I should just record what he told me about his work schedule without getting caught up in the exact calendar dates. bankholiday monday" - which UK bank holiday would that be? Easter Monday was April 21, 2025 (if we're in 2025). Or maybe there's a specific Australia bank holiday?

Actually, I'm overthinking this. Rocky just wants me to know his work week. Let me update memory with what he told me and not get hung up on whether it's a "real" bank holiday or not.

The important facts are:
- Today is Sunday
- Last Monday: worked (bankholiday)
- Tuesday: doctors appointment
- Wednesday: office 8hrs
- Thursday: site 8hrs
- Friday: office 8hrs
- Today (Sunday): presumably not working

Let me save this to memory.

memory

action: add

target: user

content: Work week (week of Sun May 3 2026): Bank Holiday Mon (worked), Tue doctors appt, Wed office 8hrs, Thu site 8hrs, Fri office 8hrs. Today is Sunday.


entries: Work week (week of Sun May 3 2026): Bank Holiday Mon (worked), Tue doctors appt, Wed office 8hrs, Thu site 8hrs, Fri office 8hrs. Today is Sunday.

message: Entry added.


content: Updated. Week logged.

reasoning: Done. Memory updated with the work week info.