rmagent-core — shared engine, not a witness
This skill is the one engine the family imports. It has no door and no
payloads. Questions live in the grain skills. Cases, baselines, census
history, silent-host book, actuate journal, and drill history live under
~/.rmagent/ — never inside a skill checkout.
Constitution
- Watch only (Phase 0) in question skills. Actuate is a separate skill.
- Allowlisted questions only. Grain firewall: a skill may only ask its grain.
- Capped answers (32 KB). Oversized → hole.
- A hole is an answer.
- Never trust “no findings” until attest/blind_check can see.
- On-device rings, not shipped lakes. Jump host stores cases (megabytes).
- Context propagates; data does not.
- Credentials never in inventory / skill / case.
- Your estate only.
- No tight retry on a silent host.
- Secrets / PAN / prompt text never stored unless masked.
- Persistent rings are MOP, dry-run default,
--apply+--teardown. - Honest fidelity gaps.
- Keep the existing sensor.
Grain firewall (scripts/grains.py)
| Skill | Grain | ALLOWED |
|---|---|---|
| rmagent-so / windows | principal + LogonId | identity questions |
| rmagent-linux | principal (root) | attest sketch edges explain attackmap |
| rmagent-at | request-ish | apptrace appslow apperrors appnet appproc appsysmon |
| rmagent-ao | host, agent, session | agents agentstate agenttrace agentnet agentmodels agentdrift agentdeep |
| rmagent-fr | ticket | none — records cases, does not ask boxes |
| rmagent-iso | STAN+RRN wire | txnattest txntrace txnhops txnslow txnfail txnbaseline |
| rmagent-pay | STAN+RRN diary | pay_attest switch_txn core_auth pay_sketch hop_delta |
App questions are not legal on so. Identity questions are not legal on at. fr has an empty allowlist.
Paths (scripts/paths.py)
~/.rmagent/cases/
~/.rmagent/baselines/
~/.rmagent/census_history.jsonl
~/.rmagent/silent.json
~/.rmagent/actuate.jsonl
~/.rmagent/drill/
~/.rmagent/creds.json
Loader (scripts/loader.py)
Other skills load the canonical so engine with spec_from_file_location
(never sys.path + import lib). Then they replace ALLOWED with their
grain set.
Will not do
- Ask a box.
- Copy Security.evtx / pcap / ETL home.
- Grow without bound. Cases prune raw answers on close.