{"id":"b6a50b71-3224-4cf3-9705-f4d7279c55de","shortId":"pztXpu","kind":"skill","title":"ham","tagline":"Set up Hierarchical Agent Memory (HAM) — scoped CLAUDE.md files per directory that reduce token spend. Trigger on \"go ham\", \"set up HAM\", \"ham commands\", \"ham help\", \"ham route\", \"ham remove\", \"ham update\", \"ham status\", \"ham benchmark\", \"ham baseline start\", \"ham baseline stop\",","description":"## Pro Guard — run FIRST\n\nBefore ANY command, check for Pro signals: `.ham/config.json` with `\"pro\": true`, `enabledImporters` with more than `\"claude\"`, or any `**/AGENTS.md` files.\n\n- **If Pro detected:** allow `go ham` (Pro-aware mode) and `ham remove` (has own Pro logic). All other commands → print `HAM Pro detected — this project is managed by HAM Pro. Manage at goham.dev` and STOP.\n- **Pro rules:** NEVER create/modify/delete AGENTS.md files. CLAUDE.md = HAM-owned. AGENTS.md = Pro-owned.\n\n## Commands\n\n**Trigger:** \"ham commands\" or \"ham help\" — list all commands:\n\n| Command | What it does |\n|---|---|\n| `go ham` | Set up HAM (auto-detects stack and structure) |\n| `ham remove` | Remove HAM safely (preserves Pro files) |\n| `ham update` | Run `bash <skill-dir>/scripts/update.sh`, update `.ham/version` |\n| `ham status` | Show version, update status, memory file count, last setup date |\n| `ham route` | Add/update Context Routing in root CLAUDE.md |\n| `ham dashboard` | Launch web dashboard at :7777 via `node <skill-dir>/dashboard/launch.js --port 7777` |\n| `ham savings` | Show token and cost savings report |\n| `ham carbon` | Run `node <skill-dir>/dashboard/carbon-cli.js [--last] [--days 30]` |\n| `ham insights` | Generate insights → write actionable items to `.memory/inbox.md` |\n| `ham benchmark` | Run `node <skill-dir>/dashboard/benchmark-cli.js [--days 30] [--model name] [--json]` |\n| `ham baseline start` | Begin 10-task baseline capture |\n| `ham baseline stop` | End baseline early, keep partial data |\n| `ham metrics clear` | Delete all benchmark data (confirm first) |\n| `ham audit` | Check memory system health |\n| `ham sync` | Sync Claude Code sessions → `.ham/metrics/sessions.jsonl`. Run `node <skill-dir>/dashboard/sync-cli.js [--force] [--json]` |\n\n## go ham — Setup\n\n0. **Update check** — compare `.ham/version` against `ham_version` in frontmatter. If outdated, print update notice. Never block.\n1. **Detect platform** — scan for: `*.xcodeproj`/`Package.swift` (iOS), `build.gradle*` (Android), `pubspec.yaml` (Flutter), `package.json` + framework (Web/RN), `pyproject.toml`/`requirements.txt` (Python), `Cargo.toml` (Rust), `go.mod` (Go).\n2. **Detect maturity** — count subdirs with code: 0-2 = greenfield, 3+ = brownfield.\n3. **Monorepo guard** — if >20 code dirs: present sorted list, pre-select top 15, let user adjust. Hard cap: never create >20 subdirectory CLAUDE.md files.\n4. **Generate files** silently, then confirm.\n\n**Pro-aware mode:** if Pro detected, skip directories with existing CLAUDE.md (Pro-created). Fill gaps only. Never touch AGENTS.md.\n\n### Generated Structure\n\n```\nproject/\n├── CLAUDE.md              # Root (~200 tokens)\n├── .ham/\n│   ├── version\n│   └── metrics/state.json # {mode, tasks_completed, tasks_target, started_at, memory_reads, total_prompts}\n├── .memory/\n│   ├── decisions.md       # ADRs\n│   ├── patterns.md        # Reusable patterns\n│   ├── inbox.md           # Inferred items (brownfield only)\n│   └── audit-log.md       # Audit history (last 5 entries)\n└── [src dirs]/CLAUDE.md   # Per-directory (brownfield only)\n```\n\nGreenfield: root + .memory/ + .ham/ only. Brownfield: also subdirectory CLAUDE.md files.\n\n### .gitignore\n\nAppend (idempotent — check for `# HAM` marker first):\n```\n# HAM — AI agent scaffolding (local, do not commit)\n.ham/\n.memory/\n**/CLAUDE.md\n!CLAUDE.md\n# end HAM\n```\n\n### Capture Baseline\n\nBefore creating files, save `.memory/baseline.json`:\n```json\n{\"captured_at\":\"YYYY-MM-DD\",\"existing_claude_md\":{\"found\":true,\"chars\":4820,\"tokens\":1205},\"notes\":\"Migrated from monolithic CLAUDE.md\"}\n```\nIf no existing CLAUDE.md: `{\"captured_at\":\"...\",\"existing_claude_md\":{\"found\":false},\"estimated_baseline_tokens\":7500}`.\n\n### Initialize Benchmarking\n\nCreate `.ham/metrics/state.json`: `{\"mode\":\"baseline\",\"tasks_completed\":0,\"tasks_target\":10,\"started_at\":\"ISO-8601\",\"memory_reads\":0,\"total_prompts\":0}`. Next 10 tasks log to `baseline.jsonl` without HAM memory loading. Auto-transitions to active after 10.\n\n### Confirm Setup\n\nReport files created. If root CLAUDE.md >3,000 tokens: warn, list sections that may belong in subdirectory files, offer interactive migration (present each candidate one at a time, move only on user confirmation).\n\n## Operating Instructions\n\nEmbed in every root CLAUDE.md:\n\n```markdown\n## Agent Memory System\n\n### Before Working\n- Read this file for global context, then read the target directory's CLAUDE.md before changes\n- If this file has a ## Context Routing section, use it to find the right subdirectory CLAUDE.md\n- Check .memory/decisions.md before architectural changes\n- Check .memory/patterns.md before implementing common functionality\n- Check if audit is due: if 14+ days or 10+ sessions since last audit in .memory/audit-log.md, suggest running one\n\n### During Work\n- Create CLAUDE.md in any new directory you create\n\n### After Work\n- Update relevant CLAUDE.md if conventions changed\n- Log decisions to .memory/decisions.md (ADR format)\n- Log patterns to .memory/patterns.md\n- Uncertain inferences → .memory/inbox.md (never canonical files)\n\n### Safety\n- Never record secrets, API keys, or user data\n- Never overwrite decisions — mark as [superseded]\n- Never promote from inbox without user confirmation\n```\n\n## Task Metrics Logging\n\nEach non-trivial task logs two JSONL entries to `.ham/metrics/tasks.jsonl` (or `baseline.jsonl` in baseline mode):\n\n```json\n{\"id\":\"task-<hex8>\",\"type\":\"task_start\",\"timestamp\":\"ISO-8601\",\"description\":\"...\",\"ham_active\":true,\"model\":\"claude-opus-4-6\",\"files_read\":0,\"memory_files_loaded\":0,\"estimated_tokens\":0}\n{\"id\":\"task-<hex8>\",\"type\":\"task_end\",\"timestamp\":\"ISO-8601\",\"status\":\"completed\"}\n```\n\nSkip trivial queries (HAM commands, yes/no, clarifications). Increment `total_prompts` in state.json for every non-trivial task; increment `memory_reads` when `.memory/` files are loaded.\n\n### Baseline Mode\n\nCheck `.ham/metrics/state.json` before each task:\n\n1. **mode = \"baseline\":** write to `baseline.jsonl`, set `ham_active: false`, skip subdir CLAUDE.md and .memory/ files. Only increment `tasks_completed` for `status: \"completed\"` (not \"error\"/\"skipped\"). Transition to active when `tasks_completed >= tasks_target`.\n\n2. **mode = \"active\", or state.json missing, or state.json unparseable:** write to `tasks.jsonl`, set `ham_active: true`, load all files normally. If state.json was corrupt, warn user once: `⚠ .ham/metrics/state.json is corrupted. Treating as active mode.`\n\n## ham savings\n\n**Trigger:** \"HAM savings\" or \"HAM stats\"\n\nRead `.memory/baseline.json`, count tokens in all CLAUDE.md and .memory/ files (chars ÷ 4), then display: baseline section, current HAM setup, tokens per prompt, savings, and monthly projection (1,500 prompts at $3/M Sonnet, $15/M Opus).\n\n### Calculation\n\n```python\nroot_tokens = count_tokens(read(\"CLAUDE.md\"))\nsubdir_files = glob(\"**/CLAUDE.md\", exclude=\"root\")\navg_subdir = sum(count_tokens(read(f)) for f in subdir_files) / len(subdir_files) if subdir_files else 0\n\n# .memory/ weighted by tracked read frequency\nmemory_tokens = sum(count_tokens(read(f)) for f in glob(\".memory/*.md\"))\nstate = read_json(\".ham/metrics/state.json\")\nmemory_weight = state[\"memory_reads\"] / state[\"total_prompts\"] if state.get(\"total_prompts\", 0) >= 10 else 0.30\nham_tokens = root_tokens + avg_subdir + (memory_tokens * memory_weight)\n\n# Baseline: measured if baseline.json exists, tiered estimate otherwise\nif exists(\".memory/baseline.json\"):\n    baseline_mid = baseline_data[\"old_claude_md_tokens\"] + max(500, len(subdir_files) * 300)\n    baseline_is_measured = True\nelse:\n    code_dirs = count_dirs_with_code()\n    baseline_mid = max(1000, ham_tokens * 1.5) if code_dirs <= 2 else max(3000, ham_tokens * 2.5) if code_dirs <= 10 else max(5000, ham_tokens * 3.5)\n    baseline_is_measured = False\n```\n\n**Display rules:** when `baseline_is_measured = False`, show raw token counts only — no savings percentage or cost projections. Add: `⚠ No baseline captured — savings % requires a real baseline. Run \"go ham\" to capture one.` Show \"(estimated)\" next to .memory/ frequency until 10+ prompts tracked.\n\n## ham remove\n\n**Trigger:** \"ham remove\" — EXEMPT from Pro guard.\n\n1. Detect Pro (same checks as guard)\n2. Inventory: skill-owned (.memory/\\*, .ham/\\*, subdir CLAUDE.md, HAM sections in root) vs Pro-owned (.ham/config.json, AGENTS.md) vs user files (root CLAUDE.md content)\n3. Show dry-run listing what will be deleted/edited/kept\n4. Confirm with user\n5. Execute: delete skill files, strip `## Agent Memory System` and `## Context Routing` from root CLAUDE.md, remove HAM block from .gitignore\n6. Report results\n\n## ham route\n\n**Trigger:** \"ham route\"\n\n1. Find all `**/CLAUDE.md` (excluding root)\n2. Build entries: `→ [label]: [path]` (label = directory name)\n3. Append or update `## Context Routing` in root CLAUDE.md. Never remove existing entries.\n\n## ham dashboard\n\n**Trigger:** \"HAM dashboard\" or \"HAM sandwich\"\n\nCheck for updates, then run `node <skill-dir>/dashboard/launch.js --port 7777` from the project root. Dashboard reads session JSONL from `~/.claude/projects/` — no database. Tell user to open http://localhost:7777.\n\n## ham insights\n\n**Trigger:** \"HAM insights\"\n\nRun `node <skill-dir>/dashboard/insights-cli.js --days 30`. Parse JSON output, filter to actionable items, deduplicate against existing `.memory/inbox.md`, write new items in format:\n```markdown\n### Insight: [title] ([date])\n**Confidence:** [severity] | **Observed:** [detail] | **Proposed Action:** [action]\n```\nLog to `.memory/audit-log.md` (keep last 5 entries). Report summary to user.\n\n## ham audit\n\n**Trigger:** \"HAM audit\" or \"HAM health\"\n\nCheck: root CLAUDE.md size (recommend <60 lines, <250 tokens), subdirectory file count and oversized files (>75 lines), missing CLAUDE.md in code dirs, .memory/ entry counts, unreviewed inbox items. Present results, append to `.memory/audit-log.md`.\n\n## ham baseline start / stop\n\n**start:** Create `.ham/metrics/state.json` with `mode: \"baseline\"`, `tasks_target: 10`. Tell user next 10 tasks capture baseline.\n\n**stop:** Set `mode: \"active\"` in state.json. Report tasks captured.\n\n## Templates\n\nSee `templates.md` for full templates. Summary:\n\n- **Root CLAUDE.md:** Project name, Stack, Rules, Agent Memory System (operating instructions above)\n- **Subdirectory CLAUDE.md:** Purpose (1 sentence), Conventions, Patterns\n- **decisions.md:** ADR format (status, decision, context, alternatives)\n- **inbox.md:** Header + review instructions","tags":["ham","kromahlusenii-ops","agent-memory","agent-skills","ai-coding-assistant","claude-code","claude-code-skill","claude-code-skills","claude-skills"],"capabilities":["skill","source-kromahlusenii-ops","skill-ham","topic-agent-memory","topic-agent-skills","topic-ai-coding-assistant","topic-claude-code","topic-claude-code-skill","topic-claude-code-skills","topic-claude-skills"],"categories":["ham"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/kromahlusenii-ops/ham","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add kromahlusenii-ops/ham","source_repo":"https://github.com/kromahlusenii-ops/ham","install_from":"skills.sh"}},"qualityScore":"0.476","qualityRationale":"deterministic score 0.48 from registry signals: · indexed on github topic:agent-skills · 53 github stars · SKILL.md body (10,458 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T18:57:53.158Z","embedding":null,"createdAt":"2026-04-18T23:54:56.320Z","updatedAt":"2026-04-22T18:57:53.158Z","lastSeenAt":"2026-04-22T18:57:53.158Z","tsv":"'-2':319 '-6':738 '-8601':512,728,756 '/.claude/projects':1231 '/agents.md':66 '/claude.md':416,450,913,1181 '/dashboard/benchmark-cli.js':219 '/dashboard/carbon-cli.js':202 '/dashboard/insights-cli.js':1247 '/dashboard/launch.js':187,1219 '/dashboard/sync-cli.js':266 '/scripts/update.sh':155 '0':272,318,505,515,518,741,745,748,935,971 '0.30':974 '000':545 '1':289,792,894,1104,1178,1380 '1.5':1027 '10':229,508,520,535,635,972,1041,1092,1341,1345 '1000':1024 '1205':476 '14':632 '15':337 '15/m':900 '2':311,826,1031,1111,1184 '2.5':1037 '20':327,345 '200':381 '250':1303 '3':321,323,544,1136,1192 '3.5':1047 '3/m':898 '30':205,221,1249 '300':1009 '3000':1034 '4':349,737,879,1146 '4820':474 '5':412,1150,1282 '500':895,1005 '5000':1044 '6':1170 '60':1301 '75':1311 '7500':496 '7777':184,189,1221,1239 'action':211,1255,1275,1276 'activ':533,731,800,820,828,840,858,1352 'add':1070 'add/update':172 'adjust':340 'adr':399,667,1385 'agent':5,442,579,1156,1371 'agents.md':108,114,375,1129 'ai':441 'allow':71 'also':428 'altern':1390 'android':298 'api':683 'append':433,1193,1326 'architectur':618 'audit':252,409,628,639,1289,1292 'audit-log.md':408 'auto':138,530 'auto-detect':137 'auto-transit':529 'avg':916,979 'awar':76,357 'baselin':39,42,226,231,234,237,455,494,502,718,785,794,882,985,996,998,1010,1021,1048,1055,1072,1078,1330,1338,1348 'baseline.json':988 'baseline.jsonl':524,716,797 'bash':154 'begin':228 'belong':552 'benchmark':37,216,247,498 'block':288,1167 'brownfield':322,406,420,427 'build':1185 'build.gradle':297 'calcul':902 'candid':561 'canon':677 'cap':342 'captur':232,454,462,486,1073,1083,1347,1357 'carbon':199 'cargo.toml':307 'chang':598,619,662 'char':473,878 'check':51,253,274,435,615,620,626,787,1108,1213,1296 'clarif':765 'claud':63,260,469,489,735,1001 'claude-opus':734 'claude.md':9,110,177,347,366,379,430,451,481,485,543,577,596,614,648,659,804,874,909,1119,1134,1164,1200,1298,1314,1366,1378 'clear':244 'code':261,317,328,1015,1020,1029,1039,1316 'command':25,50,87,118,121,127,128,763 'commit':447 'common':624 'compar':275 'complet':388,504,758,811,814,823 'confid':1270 'confirm':249,354,536,570,700,1147 'content':1135 'context':173,589,604,1160,1196,1389 'convent':661,1382 'corrupt':849,855 'cost':195,1068 'count':166,314,870,906,919,945,1017,1062,1307,1320 'creat':344,369,457,499,540,647,654,1334 'create/modify/delete':107 'current':884 'dashboard':179,182,1206,1209,1226 'data':241,248,687,999 'databas':1233 'date':169,1269 'day':204,220,633,1248 'dd':467 'decis':664,690,1388 'decisions.md':398,1384 'dedupl':1257 'delet':245,1152 'deleted/edited/kept':1145 'descript':729 'detail':1273 'detect':70,91,139,290,312,361,1105 'dir':329,415,1016,1018,1030,1040,1317 'directori':12,363,419,594,652,1190 'display':881,1052 'dri':1139 'dry-run':1138 'due':630 'earli':238 'els':934,973,1014,1032,1042 'emb':573 'enabledimport':59 'end':236,452,753 'entri':413,712,1186,1204,1283,1319 'error':816 'estim':493,746,991,1086 'everi':575,772 'exclud':914,1182 'execut':1151 'exempt':1100 'exist':365,468,484,488,989,994,1203,1259 'f':922,924,948,950 'fals':492,801,1051,1058 'file':10,67,109,150,165,348,351,431,458,539,555,586,601,678,739,743,782,807,844,877,911,927,930,933,1008,1132,1154,1306,1310 'fill':370 'filter':1253 'find':610,1179 'first':47,250,439 'flutter':300 'forc':267 'format':668,1265,1386 'found':471,491 'framework':302 'frequenc':941,1090 'frontmatt':281 'full':1362 'function':625 'gap':371 'generat':208,350,376 'gitignor':432,1169 'glob':912,952 'global':588 'go':19,72,132,269,310,1080 'go.mod':309 'goham.dev':101 'greenfield':320,422 'guard':45,325,1103,1110 'ham':1,7,20,23,24,26,28,30,32,34,36,38,41,73,79,89,97,112,120,123,133,136,143,146,151,158,170,178,190,198,206,215,225,233,242,251,257,270,278,383,425,437,440,448,453,526,730,762,799,839,860,863,866,885,975,1025,1035,1045,1081,1095,1098,1117,1120,1166,1173,1176,1205,1208,1211,1240,1243,1288,1291,1294,1329 'ham-own':111 'ham/config.json':55,1128 'ham/metrics/sessions.jsonl':263 'ham/metrics/state.json':500,788,853,958,1335 'ham/metrics/tasks.jsonl':714 'ham/version':157,276 'hard':341 'header':1392 'health':256,1295 'help':27,124 'hierarch':4 'histori':410 'id':721,749 'idempot':434 'implement':623 'inbox':697,1322 'inbox.md':403,1391 'increment':766,777,809 'infer':404,674 'initi':497 'insight':207,209,1241,1244,1267 'instruct':572,1375,1394 'interact':557 'inventori':1112 'io':296 'iso':511,727,755 'item':212,405,1256,1263,1323 'json':224,268,461,720,957,1251 'jsonl':711,1229 'keep':239,1280 'key':684 'label':1187,1189 'last':167,203,411,638,1281 'launch':180 'len':928,1006 'let':338 'line':1302,1312 'list':125,332,548,1141 'load':528,744,784,842 'local':444 'localhost':1238 'log':522,663,669,703,709,1277 'logic':84 'manag':95,99 'mark':691 'markdown':578,1266 'marker':438 'matur':313 'max':1004,1023,1033,1043 'may':551 'md':470,490,954,1002 'measur':986,1012,1050,1057 'memori':6,164,254,393,397,424,449,513,527,580,742,778,781,806,876,936,942,953,959,962,981,983,1089,1116,1157,1318,1372 'memory/audit-log.md':641,1279,1328 'memory/baseline.json':460,869,995 'memory/decisions.md':616,666 'memory/inbox.md':214,675,1260 'memory/patterns.md':621,672 'metric':243,702 'metrics/state.json':385 'mid':997,1022 'migrat':478,558 'miss':831,1313 'mm':466 'mode':77,358,386,501,719,786,793,827,859,1337,1351 'model':222,733 'monolith':480 'monorepo':324 'month':892 'move':566 'name':223,1191,1368 'never':106,287,343,373,676,680,688,694,1201 'new':651,1262 'next':519,1087,1344 'node':186,201,218,265,1218,1246 'non':706,774 'non-trivi':705,773 'normal':845 'note':477 'notic':286 'observ':1272 'offer':556 'old':1000 'one':562,644,1084 'open':1237 'oper':571,1374 'opus':736,901 'otherwis':992 'outdat':283 'output':1252 'overs':1309 'overwrit':689 'own':113,117,1115,1127 'package.json':301 'package.swift':295 'pars':1250 'partial':240 'path':1188 'pattern':402,670,1383 'patterns.md':400 'per':11,418,888 'per-directori':417 'percentag':1066 'platform':291 'port':188,1220 'pre':334 'pre-select':333 'present':330,559,1324 'preserv':148 'print':88,284 'pro':44,53,57,69,75,83,90,98,104,116,149,356,360,368,1102,1106,1126 'pro-awar':74,355 'pro-creat':367 'pro-own':115,1125 'project':93,378,893,1069,1224,1367 'promot':695 'prompt':396,517,768,889,896,966,970,1093 'propos':1274 'pubspec.yaml':299 'purpos':1379 'pyproject.toml':304 'python':306,903 'queri':761 'raw':1060 'read':394,514,584,591,740,779,868,908,921,940,947,956,963,1227 'real':1077 'recommend':1300 'record':681 'reduc':14 'relev':658 'remov':31,80,144,145,1096,1099,1165,1202 'report':197,538,1171,1284,1355 'requir':1075 'requirements.txt':305 'result':1172,1325 'reusabl':401 'review':1393 'right':612 'root':176,380,423,542,576,904,915,977,1123,1133,1163,1183,1199,1225,1297,1365 'rout':29,171,174,605,1161,1174,1177,1197 'rule':105,1053,1370 'run':46,153,200,217,264,643,1079,1140,1217,1245 'rust':308 'safe':147 'safeti':679 'sandwich':1212 'save':191,196,459,861,864,890,1065,1074 'scaffold':443 'scan':292 'scope':8 'secret':682 'section':549,606,883,1121 'see':1359 'select':335 'sentenc':1381 'session':262,636,1228 'set':2,21,134,798,838,1350 'setup':168,271,537,886 'sever':1271 'show':160,192,1059,1085,1137 'signal':54 'silent':352 'sinc':637 'size':1299 'skill':1114,1153 'skill-ham' 'skill-own':1113 'skip':362,759,802,817 'sonnet':899 'sort':331 'source-kromahlusenii-ops' 'spend':16 'src':414 'stack':140,1369 'start':40,227,391,509,725,1331,1333 'stat':867 'state':955,961,964 'state.get':968 'state.json':770,830,833,847,1354 'status':35,159,163,757,813,1387 'stop':43,103,235,1332,1349 'strip':1155 'structur':142,377 'subdir':315,803,910,917,926,929,932,980,1007,1118 'subdirectori':346,429,554,613,1305,1377 'suggest':642 'sum':918,944 'summari':1285,1364 'supersed':693 'sync':258,259 'system':255,581,1158,1373 'target':390,507,593,825,1340 'task':230,387,389,503,506,521,701,708,722,724,750,752,776,791,810,822,824,1339,1346,1356 'tasks.jsonl':837 'tell':1234,1342 'templat':1358,1363 'templates.md':1360 'tier':990 'time':565 'timestamp':726,754 'titl':1268 'token':15,193,382,475,495,546,747,871,887,905,907,920,943,946,976,978,982,1003,1026,1036,1046,1061,1304 'top':336 'topic-agent-memory' 'topic-agent-skills' 'topic-ai-coding-assistant' 'topic-claude-code' 'topic-claude-code-skill' 'topic-claude-code-skills' 'topic-claude-skills' 'total':395,516,767,965,969 'touch':374 'track':939,1094 'transit':531,818 'treat':856 'trigger':17,119,862,1097,1175,1207,1242,1290 'trivial':707,760,775 'true':58,472,732,841,1013 'two':710 'type':723,751 'uncertain':673 'unpars':834 'unreview':1321 'updat':33,152,156,162,273,285,657,1195,1215 'use':607 'user':339,569,686,699,851,1131,1149,1235,1287,1343 'version':161,279,384 'via':185 'vs':1124,1130 'warn':547,850 'web':181 'web/rn':303 'weight':937,960,984 'without':525,698 'work':583,646,656 'write':210,795,835,1261 'xcodeproj':294 'yes/no':764 'yyyi':465 'yyyy-mm-dd':464","prices":[{"id":"25bfc586-fbaa-4fc4-9b94-ffa284b7ecf9","listingId":"b6a50b71-3224-4cf3-9705-f4d7279c55de","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"kromahlusenii-ops","category":"ham","install_from":"skills.sh"},"createdAt":"2026-04-18T23:54:56.320Z"}],"sources":[{"listingId":"b6a50b71-3224-4cf3-9705-f4d7279c55de","source":"github","sourceId":"kromahlusenii-ops/ham","sourceUrl":"https://github.com/kromahlusenii-ops/ham","isPrimary":false,"firstSeenAt":"2026-04-18T23:54:56.320Z","lastSeenAt":"2026-04-22T18:57:53.158Z"}],"details":{"listingId":"b6a50b71-3224-4cf3-9705-f4d7279c55de","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kromahlusenii-ops","slug":"ham","github":{"repo":"kromahlusenii-ops/ham","stars":53,"topics":["agent-memory","agent-skills","ai-coding-assistant","claude-code","claude-code-skill","claude-code-skills","claude-skills"],"license":"mit","html_url":"https://github.com/kromahlusenii-ops/ham","pushed_at":"2026-03-21T00:57:40Z","description":"(HAM) Memory system for AI coding agents. Cut token usage by 80% by scoping context to directories.","skill_md_sha":"d26cad330b5ecab40b546e3e83ea6f0a341886b9","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/kromahlusenii-ops/ham"},"layout":"root","source":"github","category":"ham","frontmatter":{"name":"ham","description":"Set up Hierarchical Agent Memory (HAM) — scoped CLAUDE.md files per directory that reduce token spend. Trigger on \"go ham\", \"set up HAM\", \"ham commands\", \"ham help\", \"ham route\", \"ham remove\", \"ham update\", \"ham status\", \"ham benchmark\", \"ham baseline start\", \"ham baseline stop\", \"ham metrics clear\", \"HAM savings\", \"HAM stats\", \"HAM dashboard\", \"HAM sandwich\", \"HAM insights\", \"HAM carbon\", or \"ham sync\"."},"skills_sh_url":"https://skills.sh/kromahlusenii-ops/ham"},"updatedAt":"2026-04-22T18:57:53.158Z"}}