---
name: hermes-profile-ops
description: Operate multi-profile Hermes installations — profile anatomy, symlinked skill scoping, fork-vs-edit decisions, and new-profile smoke tests. Trigger when creating, forking, or auditing Hermes profiles, when verifying a profile's scoped skill set, when a profile session can't see a skill the main library has, or when the user asks whether a variant process needs its own profile.
---

# Hermes Profile Ops

Rob splits work across Hermes profiles by business function (e.g. `bail-outreach` for the Premium Line campaign, `social-media-agent` for content crons, `default` for infra). This skill is the operating manual for creating, auditing, and forking profiles.

## Profile anatomy

Each profile lives at `/root/.hermes/profiles/<name>/`:

- `AGENT-BRIEF.md` — operator brief (Rob's convention, not a Hermes requirement). Read at session start; defines the campaign, hard copy rules, and session discipline.
- `skills/` — category subdirs (`marketing-ops/`, `integrations/`…) containing **symlinks** into the main library at `/root/.hermes/skills/`. The profile sees ONLY what's symlinked.
- `cron/` — profile-scoped scheduled jobs.
- `memories/` — profile-scoped memory (own 8K cap).
- `plans/` — task plans for that profile.

**New profiles start EMPTY.** Cron jobs and memories do NOT copy from any other profile — on a fork you recreate what you need, and memory accumulates fresh.

## Auditing a profile's scoped skills (the pitfall that bites)

A session running under the **default** profile sees the FULL skill library (45+) in `skills_list` — NOT any other profile's scoped set. Never report a profile's skill coverage from a default session's skill list alone.

To audit for real:

```bash
ls -la /root/.hermes/profiles/<name>/skills/*/
```

- Confirm every symlink **resolves** to a live target (broken symlink = silently missing skill).
- **Coverage-check against the profile's brief**: walk the brief's pipeline step by step and map each step to a symlinked skill. The headline-step skills (prospecting, flyers, walk-in script) are easy to remember — the ones that get forgotten are the **delivery/logging steps** (e.g. `composio-mcp-ops` for Drive delivery was missing from `bail-outreach` until a follow-up audit caught the empty `integrations/` dir, 2026-08-12).

## Fork vs edit — the decision rule

**EDIT the existing profile** (default choice) for refinements: new skill, brief wording, town list, offer terms. Profiles are cheap to edit — the brief is one markdown file, skills are symlinks you add/remove in seconds.

**FORK (new profile) only when:**
- Two variants must run **simultaneously**, each with isolated memory, cron, and session history.
- Cross-contamination would skew results (e.g. A/B testing two pitch framings — one variant's "what worked" memory must not bleed into the other).

**Group channels that share infrastructure into ONE profile.** Example: cold email + FB Ads + SMS all run through GHL end-to-end, so they belong in one `digital-outreach` profile with a per-channel brief section — not three profiles. Every skill patch and offer-terms change would otherwise need applying N times. The natural seam for Rob's campaign: field (walk-in/print) vs digital (GHL-mediated channels).

## Shared-state caveat

`/root/.hermes/work/` and `/root/.hermes/vault/` are **profile-independent** — every profile reads and writes the same files. Isolation applies only to skills, memory, and cron. If a variant needs its own work dir, its brief must point at a different path (e.g. `work/ghl-hvac/`).

## New-profile smoke-test pattern

1. Read the profile's `AGENT-BRIEF.md` + any plan file it references.
2. Verify the work dir and vault paths the brief names actually exist (list real files, don't trust the brief).
3. Write a confirmation file to the campaign work dir summarizing: brief understood, files verified, skills available.
4. **The easy-to-skip step**: audit the profile's OWN `skills/` dir (per above) instead of assuming the default library is what the profile will see. Rob will ask "but does the profile itself have what it needs?" — check before he has to.

## Cross-profile edit discipline

Don't modify another profile's skills/cron/memories unless the user explicitly directs it (the session system prompt enforces this). When directed — e.g. adding a symlink to `bail-outreach` from a default session — `ln -s` the target and immediately verify resolution with `ls -la`. `write_file`/`patch` into another profile's tree requires `cross_profile: true`.
