summaryrefslogtreecommitdiff
path: root/AGENTS.md
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-21 21:30:29 +0300
committerPaul Buetow <paul@buetow.org>2025-09-21 21:30:29 +0300
commitf5bcffa15b1279add0e26c96ed4e8ef0471dc06b (patch)
treebcbbab3c1d1383f27d70fd1275ed90add5a69298 /AGENTS.md
parent4c367424d81722b0473cc65fd58fac3136ce13d3 (diff)
add agents remove CLAUDE.md
Diffstat (limited to 'AGENTS.md')
-rw-r--r--AGENTS.md50
1 files changed, 50 insertions, 0 deletions
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..a2be14a
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,50 @@
+# AGENTS.md
+
+This file provides guidance to AI coding assistants working with the I/O Riot NG (ior) codebase.
+
+## Build/Test Commands
+
+**Prerequisites**: Ensure libbpfgo is cloned at `../libbpfgo` relative to this repository.
+
+```bash
+make all # Build everything (BPF objects and Go binary)
+make test # Run all tests
+make test_with_name TEST_NAME=TestEventloop # Run specific test
+go test ./internal/event -v # Run tests for specific package
+make generate # Generate code (required after modifying tracepoint definitions)
+make bench # Run benchmarks
+make clean # Clean build artifacts
+```
+
+## Code Generation
+
+**Run `make generate` before building when tracepoint definitions change!**
+
+Three Raku scripts generate code from Linux kernel tracepoint data:
+
+```bash
+make generate # Generate all code (C and Go)
+make -C internal/c generate # Generate C tracepoint handlers from /sys/kernel/tracing
+make -C internal/types generate # Generate Go types from C structs
+make -C internal/tracepoints generate # Generate Go tracepoint list
+```
+
+Generated files (do not edit manually):
+- `internal/c/generated_tracepoints.c` - BPF C handlers for syscall tracepoints
+- `internal/types/generated_types.go` - Go structs matching C structs + type mappings
+- `internal/tracepoints/generated_tracepoints.go` - List of available syscall tracepoints
+
+## Architecture
+
+- **Entry point**: `cmd/ior/main.go` - Linux-only BPF-based I/O syscall tracer
+- **Core packages**: `/internal/event/` (BPF event handling), `/internal/flamegraph/` (FlameGraph generation), `/internal/c/` (BPF programs)
+- **Output**: Compressed zstd files, collapsed stack format compatible with Inferno FlameGraphs
+
+## Code Style
+
+- Standard Go conventions with static linking (`-ldflags '-w -extldflags "-static"'`)
+- Keep functions under 50 lines, refactor larger code to `/internal/` packages
+- Use generated types from `/internal/types/generated_types.go` for kernel-userspace communication
+- BPF C code in `/internal/c/ior.bpf.c` should be minimal for verification
+- Import style: `"ior/internal/packagename"` for internal packages
+- Error handling: Return errors, don't panic except for setup validation