{"id":"0c72d7e4-f1ce-4028-af18-899f4c2352f0","shortId":"2p9ffy","kind":"skill","title":"ebpf-skill","tagline":"Practical guidance for choosing, writing, loading, and debugging eBPF programs. Prioritizes correct toolchain and hook selection, map choice, kernel-version fit, verifier triage, and concise production-ready examples using libbpf, ebpf-go, and bpftrace.","description":"You are an expert eBPF engineer. Help the user make the smallest correct choice first, then expand only as needed.\n\n## Operating Mode\n\nWhen the request is about eBPF:\n\n1. Identify the user's goal:\n   - tracing or profiling\n   - packet processing or redirection\n   - cgroup/socket policy\n   - map design or state management\n   - verifier failure or runtime debugging\n   - loader/build/toolchain setup\n2. Choose the narrowest viable toolchain, program type, and map type.\n3. Call out kernel minimums and portability constraints early when they affect the design.\n4. Prefer a minimal correct snippet over a broad survey.\n5. Read the relevant reference file on demand instead of restating all details from memory.\n\nDefault response shape:\n- recommend one toolchain\n- recommend one program type\n- recommend one map strategy\n- mention kernel/version constraints\n- show the smallest working pattern\n- mention the next debugging step if it fails\n\nIf the user is unsure what to use, be decisive. Do not dump every option unless the tradeoff itself is the question.\n\nPrimary routing buckets:\n- development workflow and loader setup -> `workflows/development.md`\n- runtime debugging and host diagnosis -> `workflows/debugging.md`\n- verifier failures and constraint reasoning -> `workflows/verifier.md`\n- cross-kernel CI and compatibility testing -> `workflows/testing.md`\n\n---\n\n## Toolchain Selection\n\nChoose based on language and intent:\n\n| Toolchain | Best For | Default Guidance |\n|-----------|----------|------------------|\n| **libbpf** | C/C++, CO-RE, production agents, advanced hooks | Default for C/C++ |\n| **ebpf-go** (`cilium/ebpf`) | Go services and operators, embedded assets via `bpf2go` | Default for Go |\n| **bpftrace** | one-liners, quick diagnostics, temporary tracing | Default for ad-hoc observability |\n| **BCC** | legacy scripts only | Avoid for new work |\n\nRules:\n- Use **libbpf** when the user needs CO-RE portability, skeletons, or modern production examples.\n- Use **ebpf-go** when the surrounding system is Go and the user likely wants `bpf2go`.\n- Use **bpftrace** when the task is exploratory and does not need a custom userspace loader.\n- Do not recommend **BCC** for new projects unless the user is stuck in an existing BCC codebase.\n\n---\n\n## Quick Choosers\n\n### Program Type\n\nPick the closest hook to the user's goal:\n\n| Goal | Default Choice | Choose Instead When |\n|------|----------------|---------------------|\n| Trace a stable kernel event | `tracepoint` | use `tp_btf` on modern kernels for typed args |\n| Trace any kernel function | `kprobe` / `kretprobe` | use `fentry` / `fexit` when BTF is available and lower overhead matters |\n| Trace a syscall portably | `BPF_KSYSCALL` | use tracepoints if a stable syscall tracepoint is enough |\n| Trace userspace functions | `uprobe` / `uretprobe` | use `perf_event` for sampling instead of function tracing |\n| Fast packet drop/redirect | `xdp` | use `tc` if you need skb metadata or header rewrites deeper in the stack |\n| Packet policy/rewrites in stack | `tc` | use `tcx` on newer kernels when multi-prog ordering matters |\n| Per-cgroup connect/bind/socket policy | cgroup programs | use `sockops` for TCP lifecycle tuning |\n| Security policy on LSM hooks | `lsm` | use tracing hooks if you only need observation |\n| Hot-replace loaded BPF | `freplace` | use tail calls if you need in-program dispatch |\n\nRead on demand:\n- Tracing hooks: `program-types/tracing.md`\n- Network hooks: `program-types/network.md`\n- Cgroup/socket hooks: `program-types/cgroup.md`\n- Misc/advanced hooks: `program-types/misc.md`\n\n### Map Type\n\nChoose the simplest state shape that matches the access pattern:\n\n| Need | Default Choice | Choose Instead When |\n|------|----------------|---------------------|\n| Ordered kernel to userspace events | `RINGBUF` | use `PERF_EVENT_ARRAY` on older kernels or when per-CPU throughput wins over ordering |\n| General key-value state | `HASH` | use `LRU_HASH` for unbounded keyspaces |\n| Fast fixed-index state | `ARRAY` | use `PERCPU_ARRAY` for lock-free counters |\n| Per-CPU counters/histograms | `PERCPU_ARRAY` or `PERCPU_HASH` | aggregate in userspace |\n| CIDR / prefix matching | `LPM_TRIE` | keep this in `map-types/key-value.md` as the canonical reference |\n| FIFO / LIFO worklists | `QUEUE` / `STACK` | use only when keyless ordering matters |\n| Probabilistic membership | `BLOOM_FILTER` | confirm with a real map if false positives matter |\n| Tail-call dispatch | `PROG_ARRAY` | use subprograms if you only need local code factoring |\n| Dynamic per-object state | object storage maps | prefer over manual pointer-keyed hash maps |\n| XDP redirect targets | `DEVMAP`, `CPUMAP`, `XSKMAP` | pick by destination: device, CPU, or AF_XDP socket |\n| Shared pointer-rich memory | `ARENA` | only on very new kernels |\n\nRead on demand:\n- Event output maps: `map-types/event-output.md`\n- Key-value maps: `map-types/key-value.md`\n- Queue/stack/bloom maps: `map-types/queue-stack-bloom.md`\n- Tail calls and map-in-map: `map-types/tail-calls-and-map-in-map.md`\n- Specialized maps: `map-types/specialized.md`\n\n---\n\n## Workflow Routing\n\nUse these files when the request is workflow-heavy:\n\n- development and build setup -> `workflows/development.md`\n- runtime debugging and attach/load diagnosis -> `workflows/debugging.md`\n- verifier failures and constraint-aware coding -> `workflows/verifier.md`\n- cross-kernel and CI compatibility testing -> `workflows/testing.md`\n\nKeep these top-level defaults in mind:\n- `vmlinux.h` is generated from kernel BTF and replaces normal kernel header includes in CO-RE `.bpf.c`\n- prefer global variables in `.rodata` / `.data` over one-entry config maps\n- compile with `-g`\n- prefer `bpf_link`-style lifecycle management when available\n- use `link.Kprobe`, `link.Tracepoint`, `link.AttachXDP`, `ringbuf.NewReader`, and `perf.NewReader` first in ebpf-go\n\n---\n\n## Practical Design Rules\n\n### Memory Access\n\n- Use `BPF_CORE_READ` for kernel memory in CO-RE programs.\n- Use `bpf_probe_read_user` / `bpf_probe_read_user_str` for userspace pointers.\n- For `tp_btf` and many trampoline-based hooks, direct typed access is often cleaner than `BPF_CORE_READ`.\n- In packet paths, bounds-check before every dereference.\n\n### Concurrency\n\nChoose the simplest correct model:\n- per-CPU maps for counters and histograms\n- atomic builtins for single-field shared counters\n- `bpf_spin_lock` only for multi-field consistency\n- object storage maps when state should follow kernel object lifetime\n\n### Event Delivery\n\n- Default to `RINGBUF`.\n- Use `PERF_EVENT_ARRAY` only when targeting kernels below 5.8 or when profiling shows it wins.\n- Use `USER_RINGBUF` only for explicit userspace-to-kernel message passing.\n\n### Tail Calls and Large Programs\n\n- Use `PROG_ARRAY` when the program is naturally staged or near verifier/instruction limits.\n- Tail calls do not return on success.\n- Caller and callee must have compatible program types.\n\n### Global Variables\n\nPrefer:\n\n```c\nconst volatile __u32 target_pid = 0;\nvolatile __u32 sample_rate = 100;\n```\n\nUse `.rodata` for load-time constants and `.data` for mutable runtime state.\n\n---\n\n## Debugging and Verifier Routing\n\nUse `workflows/debugging.md` for:\n- attach/load diagnosis\n- missing events or empty maps\n- host capability checks\n- tracing output and runtime observability workflow\n\nUse `workflows/verifier.md` for:\n- register-state reasoning\n- packet bounds and NULL-check proofs\n- loop constraints\n- stack initialization problems\n- instruction-limit mitigation\n\nHigh-level verifier defaults:\n- identify the pointer class first\n- reduce to the smallest failing path\n- add the missing proof instead of rewriting blindly\n- if a real verifier log exists, explain that log rather than answering generically\n\n---\n\n## Kernel Version Guidance\n\nAlways mention minimum kernel when recommending newer features:\n\n| Feature | Min Kernel |\n|---------|------------|\n| CO-RE + usable BTF workflows | 5.2 |\n| `CAP_BPF` split from `CAP_SYS_ADMIN` | 5.8 |\n| `RINGBUF` | 5.8 |\n| `fentry` / `fexit` / `fmod_ret` | 5.8 |\n| `BPF_PROG_TYPE_LSM` | 5.7 |\n| `bpf_for_each_map_elem` | 5.13 |\n| `bpf_timer_*` | 5.15 |\n| `bpf_loop` | 5.17 |\n| dynptrs | 5.19 |\n| `USER_RINGBUF` | 6.2 |\n| netfilter BPF | 6.4 |\n| TCX | 6.6 |\n| `ARENA` | 6.8 |\n\nFallback rule:\n- if the preferred feature is too new, recommend the nearest older primitive explicitly\n- example: `RINGBUF` -> `PERF_EVENT_ARRAY`\n- example: `fentry` -> `kprobe`\n- example: TCX -> classic TC\n\n---\n\n## KFuncs and Advanced Features\n\nKFuncs are more powerful than helpers but less stable across kernels. Use them when the task actually needs one of these classes:\n\n- reference-counted object access such as `bpf_task_acquire`\n- dynptr manipulation\n- arena allocation\n- open-coded iterators\n\nGuidance:\n- declare them as `extern ... __ksym`\n- pair acquire/release kfuncs correctly\n- mention kernel sensitivity and runtime availability checks\n- avoid reaching for kfuncs when a stable helper already solves the problem\n\nIf the user asks about:\n- task/cgroup references\n- arena-backed memory\n- iterators\n- dynptr internals\n\nthen it is worth discussing kfuncs explicitly.\n\n---\n\n## Safety and Ops Notes\n\n- Older kernels often still require `CAP_SYS_ADMIN`; newer tracing setups prefer `CAP_BPF` plus `CAP_PERFMON`.\n- XDP, TC, cgroup, and LSM programs can impact live traffic or policy. Always mention a detach path.\n- Prefer `bpf_link`-based attachment and cleanup when available.\n- For risky networking changes, suggest testing on loopback, a veth pair, or a dedicated interface first.\n- For LSM and override-style workflows, confirm kernel config and runtime status before assuming the hook is usable.\n\n---\n\n## Reference Routing\n\nUse these files as canonical detail references:\n\n- `references.md` — external docs, tooling links, CO-RE guides, and verifier resources\n- `program-types/tracing.md`\n- `program-types/network.md`\n- `program-types/cgroup.md`\n- `program-types/misc.md`\n- `map-types/event-output.md`\n- `map-types/key-value.md`\n- `map-types/queue-stack-bloom.md`\n- `map-types/tail-calls-and-map-in-map.md`\n- `map-types/specialized.md`\n- `workflows/development.md`\n- `workflows/debugging.md`\n- `workflows/verifier.md`\n- `workflows/testing.md`\n\nCanonical ownership rules:\n- `LPM_TRIE` lives in `map-types/key-value.md`\n- redirect and object-lifetime maps live in `map-types/specialized.md`\n- `SKILL.md` is the chooser and triage layer, not the full encyclopedia\n\nWhen answering, open only the file needed for the user's immediate task.\n\nWhen an external resource would directly help, open `references.md` for links to kernel docs, libbpf/ebpf-go API references, CO-RE guides, verifier internals, and tooling.","tags":["ebpf","skill","h0x0er","agent-skills","skills"],"capabilities":["skill","source-h0x0er","skill-ebpf-skill","topic-agent-skills","topic-ebpf","topic-skills"],"categories":["ebpf-skill"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/h0x0er/ebpf-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add h0x0er/ebpf-skill","source_repo":"https://github.com/h0x0er/ebpf-skill","install_from":"skills.sh"}},"qualityScore":"0.459","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 19 github stars · SKILL.md body (10,680 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-22T13:03:00.514Z","embedding":null,"createdAt":"2026-04-19T00:40:02.362Z","updatedAt":"2026-04-22T13:03:00.514Z","lastSeenAt":"2026-04-22T13:03:00.514Z","tsv":"'/cgroup.md':530,1428 '/event-output.md':721,1436 '/key-value.md':626,729,1440,1467 '/misc.md':536,1432 '/network.md':524,1424 '/queue-stack-bloom.md':735,1444 '/specialized.md':752,1452,1479 '/tail-calls-and-map-in-map.md':746,1448 '/tracing.md':518,1420 '0':1026 '1':69 '100':1031 '2':96 '3':107 '4':121 '5':131 '5.13':1174 '5.15':1177 '5.17':1180 '5.19':1182 '5.2':1148 '5.7':1168 '5.8':965,1156,1158,1163 '6.2':1185 '6.4':1188 '6.6':1190 '6.8':1192 'access':547,856,893,1250 'acquir':1255 'acquire/release':1271 'across':1233 'actual':1240 'ad':278 'ad-hoc':277 'add':1107 'admin':1155,1325 'advanc':247,1222 'af':698 'affect':118 'agent':246 'aggreg':612 'alloc':1259 'alreadi':1289 'alway':1131,1347 'answer':1126,1492 'api':1519 'arena':706,1191,1258,1301 'arena-back':1300 'arg':386 'array':564,594,597,608,660,959,991,1212 'ask':1296 'asset':261 'assum':1391 'atom':924 'attach':1356 'attach/load':773,1052 'avail':399,839,1279,1360 'avoid':285,1281 'awar':781 'back':1302 'base':230,889,1355 'bcc':281,339,351 'best':236 'blind':1114 'bloom':644 'bound':905,1076 'bounds-check':904 'bpf':408,498,833,858,870,874,898,932,1150,1164,1169,1175,1178,1187,1253,1331,1353 'bpf.c':816 'bpf2go':263,320 'bpftrace':40,267,322 'broad':129 'btf':380,397,805,884,1146 'bucket':200 'build':767 'builtin':925 'c':1020 'c/c':241,251 'call':108,502,657,737,985,1003 'calle':1011 'caller':1009 'canon':629,1402,1457 'cap':1149,1153,1323,1330,1333 'capabl':1060 'cgroup':469,472,1337 'cgroup/socket':82,525 'chang':1364 'check':906,1061,1080,1280 'choic':21,54,368,551 'choos':7,97,229,369,539,552,911 'chooser':354,1483 'ci':222,788 'cidr':615 'cilium/ebpf':255 'class':1099,1245 'classic':1218 'cleaner':896 'cleanup':1358 'closest':359 'co':243,297,814,866,1143,1411,1522 'co-r':242,296,813,865,1142,1410,1521 'code':668,782,1262 'codebas':352 'compat':224,789,1014 'compil':829 'concis':29 'concurr':910 'config':827,1386 'confirm':646,1384 'connect/bind/socket':470 'consist':940 'const':1021 'constant':1038 'constraint':114,162,216,780,1083 'constraint-awar':779 'core':859,899 'correct':15,53,125,914,1273 'count':1248 'counter':602,921,931 'counters/histograms':606 'cpu':572,605,696,918 'cpumap':690 'cross':220,785 'cross-kernel':219,784 'custom':333 'data':822,1040 'debug':11,93,171,208,771,1045 'decis':185 'declar':1265 'dedic':1374 'deeper':447 'default':146,238,249,264,275,367,550,797,953,1095 'deliveri':952 'demand':138,512,714 'derefer':909 'design':85,120,853 'destin':694 'detach':1350 'detail':143,1403 'develop':201,765 'devic':695 'devmap':689 'diagnosi':211,774,1053 'diagnost':272 'direct':891,1509 'discuss':1311 'dispatch':509,658 'doc':1407,1517 'drop/redirect':435 'dump':188 'dynam':670 'dynptr':1181,1256,1305 'earli':115 'ebpf':2,12,37,45,68,253,307,850 'ebpf-go':36,252,306,849 'ebpf-skil':1 'elem':1173 'embed':260 'empti':1057 'encyclopedia':1490 'engin':46 'enough':418 'entri':826 'event':376,426,559,563,715,951,958,1055,1211 'everi':189,908 'exampl':33,304,1208,1213,1216 'exist':350,1120 'expand':57 'expert':44 'explain':1121 'explicit':977,1207,1313 'exploratori':327 'extern':1268,1406,1506 'factor':669 'fail':175,1105 'failur':90,214,777 'fallback':1193 'fals':652 'fast':433,589 'featur':1138,1139,1198,1223 'fentri':394,1159,1214 'fexit':395,1160 'field':929,939 'fifo':631 'file':136,757,1400,1496 'filter':645 'first':55,847,1100,1376 'fit':25 'fix':591 'fixed-index':590 'fmod':1161 'follow':947 'free':601 'freplac':499 'full':1489 'function':390,421,431 'g':831 'general':577 'generat':802 'generic':1127 'global':818,1017 'go':38,254,256,266,308,314,851 'goal':74,365,366 'guid':1413,1524 'guidanc':5,239,1130,1264 'hash':582,585,611,684 'header':445,810 'heavi':764 'help':47,1510 'helper':1229,1288 'high':1092 'high-level':1091 'histogram':923 'hoc':279 'hook':18,248,360,484,488,514,520,526,532,890,1393 'host':210,1059 'hot':495 'hot-replac':494 'identifi':70,1096 'immedi':1502 'impact':1342 'in-program':506 'includ':811 'index':592 'initi':1085 'instead':139,370,429,553,1111 'instruct':1088 'instruction-limit':1087 'intent':234 'interfac':1375 'intern':1306,1526 'iter':1263,1304 'keep':620,792 'kernel':23,110,221,375,383,389,460,556,567,711,786,804,809,862,948,963,981,1128,1134,1141,1234,1275,1319,1385,1516 'kernel-vers':22 'kernel/version':161 'key':579,683,723 'key-valu':578,722 'keyless':639 'keyspac':588 'kfunc':1220,1224,1272,1284,1312 'kprobe':391,1215 'kretprob':392 'ksym':1269 'ksyscal':409 'languag':232 'larg':987 'layer':1486 'legaci':282 'less':1231 'level':796,1093 'libbpf':35,240,291 'libbpf/ebpf-go':1518 'lifecycl':478,836 'lifetim':950,1472 'lifo':632 'like':318 'limit':1001,1089 'liner':270 'link':834,1354,1409,1514 'link.attachxdp':843 'link.kprobe':841 'link.tracepoint':842 'live':1343,1462,1474 'load':9,497,1036 'load-tim':1035 'loader':204,335 'loader/build/toolchain':94 'local':667 'lock':600,934 'lock-fre':599 'log':1119,1123 'loop':1082,1179 'loopback':1368 'lower':401 'lpm':618,1460 'lru':584 'lsm':483,485,1167,1339,1378 'make':50 'manag':88,837 'mani':886 'manipul':1257 'manual':680 'map':20,84,105,158,537,624,650,677,685,717,719,725,727,731,733,740,742,744,748,750,828,919,943,1058,1172,1434,1438,1442,1446,1450,1465,1473,1477 'map-in-map':739 'map-typ':623,718,726,732,743,749,1433,1437,1441,1445,1449,1464,1476 'match':545,617 'matter':403,466,641,654 'membership':643 'memori':145,705,855,863,1303 'mention':160,168,1132,1274,1348 'messag':982 'metadata':443 'min':1140 'mind':799 'minim':124 'minimum':111,1133 'misc/advanced':531 'miss':1054,1109 'mitig':1090 'mode':62 'model':915 'modern':302,382 'multi':463,938 'multi-field':937 'multi-prog':462 'must':1012 'mutabl':1042 'narrowest':99 'natur':996 'near':999 'nearest':1204 'need':60,295,331,441,492,505,549,666,1241,1497 'netfilt':1186 'network':519,1363 'new':287,341,710,1201 'newer':459,1137,1326 'next':170 'normal':808 'note':1317 'null':1079 'null-check':1078 'object':673,675,941,949,1249,1471 'object-lifetim':1470 'observ':280,493,1066 'often':895,1320 'older':566,1205,1318 'one':150,153,157,269,825,1242 'one-entri':824 'one-lin':268 'op':1316 'open':1261,1493,1511 'open-cod':1260 'oper':61,259 'option':190 'order':465,555,576,640 'output':716,1063 'overhead':402 'overrid':1381 'override-styl':1380 'ownership':1458 'packet':78,434,451,902,1075 'pair':1270,1371 'pass':983 'path':903,1106,1351 'pattern':167,548 'per':468,571,604,672,917 'per-cgroup':467 'per-cpu':570,603,916 'per-object':671 'percpu':596,607,610 'perf':425,562,957,1210 'perf.newreader':846 'perfmon':1334 'pick':357,692 'pid':1025 'plus':1332 'pointer':682,703,881,1098 'pointer-key':681 'pointer-rich':702 'polici':83,471,481,1346 'policy/rewrites':452 'portabl':113,299,407 'posit':653 'power':1227 'practic':4,852 'prefer':122,678,817,832,1019,1197,1329,1352 'prefix':616 'primari':198 'primit':1206 'priorit':14 'probabilist':642 'probe':871,875 'problem':1086,1292 'process':79 'product':31,245,303 'production-readi':30 'profil':77,968 'prog':464,659,990,1165 'program':13,102,154,355,473,508,516,522,528,534,868,988,994,1015,1340,1418,1422,1426,1430 'program-typ':515,521,527,533,1417,1421,1425,1429 'project':342 'proof':1081,1110 'question':197 'queue':634 'queue/stack/bloom':730 'quick':271,353 'rate':1030 'rather':1124 're':244,298,815,867,1144,1412,1523 'reach':1282 'read':132,510,712,860,872,876,900 'readi':32 'real':649,1117 'reason':217,1074 'recommend':149,152,156,338,1136,1202 'redirect':81,687,1468 'reduc':1101 'refer':135,630,1247,1299,1396,1404,1520 'reference-count':1246 'references.md':1405,1512 'regist':1072 'register-st':1071 'relev':134 'replac':496,807 'request':65,760 'requir':1322 'resourc':1416,1507 'respons':147 'restat':141 'ret':1162 'return':1006 'rewrit':446,1113 'rich':704 'ringbuf':560,955,974,1157,1184,1209 'ringbuf.newreader':844 'riski':1362 'rodata':821,1033 'rout':199,754,1048,1397 'rule':289,854,1194,1459 'runtim':92,207,770,1043,1065,1278,1388 'safeti':1314 'sampl':428,1029 'script':283 'secur':480 'select':19,228 'sensit':1276 'servic':257 'setup':95,205,768,1328 'shape':148,543 'share':701,930 'show':163,969 'simplest':541,913 'singl':928 'single-field':927 'skb':442 'skeleton':300 'skill':3 'skill-ebpf-skill' 'skill.md':1480 'smallest':52,165,1104 'snippet':126 'socket':700 'sockop':475 'solv':1290 'source-h0x0er' 'special':747 'spin':933 'split':1151 'stabl':374,414,1232,1287 'stack':450,454,635,1084 'stage':997 'state':87,542,581,593,674,945,1044,1073 'status':1389 'step':172 'still':1321 'storag':676,942 'str':878 'strategi':159 'stuck':347 'style':835,1382 'subprogram':662 'success':1008 'suggest':1365 'surround':311 'survey':130 'sys':1154,1324 'syscal':406,415 'system':312 'tail':501,656,736,984,1002 'tail-cal':655 'target':688,962,1024 'task':325,1239,1254,1503 'task/cgroup':1298 'tc':438,455,1219,1336 'tcp':477 'tcx':457,1189,1217 'temporari':273 'test':225,790,1366 'throughput':573 'time':1037 'timer':1176 'tool':1408,1528 'toolchain':16,101,151,227,235 'top':795 'top-level':794 'topic-agent-skills' 'topic-ebpf' 'topic-skills' 'tp':379,883 'trace':75,274,372,387,404,419,432,487,513,1062,1327 'tracepoint':377,411,416 'tradeoff':193 'traffic':1344 'trampolin':888 'trampoline-bas':887 'triag':27,1485 'trie':619,1461 'tune':479 'type':103,106,155,356,385,517,523,529,535,538,625,720,728,734,745,751,892,1016,1166,1419,1423,1427,1431,1435,1439,1443,1447,1451,1466,1478 'u32':1023,1028 'unbound':587 'unless':191,343 'unsur':180 'uprob':422 'uretprob':423 'usabl':1145,1395 'use':34,183,290,305,321,378,393,410,424,437,456,474,486,500,561,583,595,636,661,755,840,857,869,956,972,989,1032,1049,1068,1235,1398 'user':49,72,178,294,317,345,363,873,877,973,1183,1295,1500 'userspac':334,420,558,614,880,979 'userspace-to-kernel':978 'valu':580,724 'variabl':819,1018 'verifi':26,89,213,776,1047,1094,1118,1415,1525 'verifier/instruction':1000 'version':24,1129 'veth':1370 'via':262 'viabl':100 'vmlinux.h':800 'volatil':1022,1027 'want':319 'win':574,971 'work':166,288 'workflow':202,753,763,1067,1147,1383 'workflow-heavi':762 'workflows/debugging.md':212,775,1050,1454 'workflows/development.md':206,769,1453 'workflows/testing.md':226,791,1456 'workflows/verifier.md':218,783,1069,1455 'worklist':633 'worth':1310 'would':1508 'write':8 'xdp':436,686,699,1335 'xskmap':691","prices":[{"id":"5130cda2-82b1-4df3-bd76-fc7822699cdf","listingId":"0c72d7e4-f1ce-4028-af18-899f4c2352f0","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"h0x0er","category":"ebpf-skill","install_from":"skills.sh"},"createdAt":"2026-04-19T00:40:02.362Z"}],"sources":[{"listingId":"0c72d7e4-f1ce-4028-af18-899f4c2352f0","source":"github","sourceId":"h0x0er/ebpf-skill","sourceUrl":"https://github.com/h0x0er/ebpf-skill","isPrimary":false,"firstSeenAt":"2026-04-19T00:40:02.362Z","lastSeenAt":"2026-04-22T13:03:00.514Z"}],"details":{"listingId":"0c72d7e4-f1ce-4028-af18-899f4c2352f0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"h0x0er","slug":"ebpf-skill","github":{"repo":"h0x0er/ebpf-skill","stars":19,"topics":["agent-skills","ebpf","skills"],"license":"apache-2.0","html_url":"https://github.com/h0x0er/ebpf-skill","pushed_at":"2026-04-12T12:10:35Z","description":"An eBPF skill for coding agents","skill_md_sha":"85bd0e88e09e9e370a1bc9f303f2589e31343165","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/h0x0er/ebpf-skill"},"layout":"root","source":"github","category":"ebpf-skill","frontmatter":{"name":"ebpf-skill","description":"Practical guidance for choosing, writing, loading, and debugging eBPF programs. Prioritizes correct toolchain and hook selection, map choice, kernel-version fit, verifier triage, and concise production-ready examples using libbpf, ebpf-go, and bpftrace."},"skills_sh_url":"https://skills.sh/h0x0er/ebpf-skill"},"updatedAt":"2026-04-22T13:03:00.514Z"}}