{"owner":"burrowers","repo":"garble","hasSkills":true,"totalSkillsCount":1,"totalTokensCount":1080,"categories":["root-instruction"],"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# garble\n\nObfuscates Go code by wrapping the Go toolchain via `go build -toolexec=garble`.\nThe top-level process does CLI/setup; sub-processes wrap each `compile`/`asm`/`link`\ncall to transform source before the real tool runs. Read `CONTRIBUTING.md` for the\narchitecture (toolexec model, caching, terminology) and `README.md` for design goals\n(deterministic, reproducible, reversible).\n\n## Layout\n\n- Top-level `*.go`: CLI (`main.go`), the AST/type transformer (`transformer.go`),\n  name hashing (`hash.go`), reflection handling (`reflect*.go`), caches\n  (`cache_*.go`), runtime/linker patching (`runtime_patch.go`).\n- `internal/`: `literals` (string obfuscation), `ctrlflow`, `linker`, `ssa2ast`,\n  `asthelper`.\n- `bundled_xtools.go`: patched copies of x/tools packages; see below before touching.\n- `go_std_tables.go` is generated by `scripts/gen_go_std_tables.go` (`go generate`).\n\n## Testing\n\n- `go test ./...` does real builds and is slow (30s+). Use `go test -short` and\n  `go test -run Script/<name>` to target one `testdata/script/<name>.txtar`.\n- Integration tests are testscript `.txtar` files under `testdata/script/`. Most\n  behavior is tested there, not in Go unit tests.\n- Every change that alters behavior (feature, flag, bug) needs a test.\n- Tests must be deterministic — avoid randomness so failures reproduce; prefer\n  fixed seeds/inputs.\n- Test cost matters: keep builds minimal (smallest package that triggers the bug,\n  reuse caches, avoid full std rebuilds and `-debugdir` outside `debugdir.txtar`).\n- New Go version support, dependency bumps, and CI tuning are routine recurring work.\n- garble rejects Go toolchains newer than it supports, including `devel` builds.\n  If the `go` in `$PATH` is too new, run tests via `GOTOOLCHAIN` with the latest\n  bugfix release of the newest supported major version, such as\n  `GOTOOLCHAIN=go1.27.0 go test -short` as of August 2026.\n\n## Bundled x/tools packages\n\n`bundled_xtools.go` holds modified copies of x/tools packages, needed so that\n`typeutil.Hasher` does not hash struct field tags, given that tags do not affect type\nidentity. typeutil imports the internal `typeparams` package, so that is bundled too,\nwith the import replaced by the bundled `typeparams_` names. Each package's code is\nprefixed with its name and introduced by a `NOTE(garble)` comment naming its origin.\n\nOur patches are marked `// NOTE(garble)`. They are applied by an agent following the\nsteps below, not regenerated by a tool. We also drop any API which is not reachable\nfrom `typeutil_Hasher`. Line 1 records the x/tools version the file was bundled from.\n\nBumping `golang.org/x/tools` requires re-syncing the file. Never overwrite it with\nraw `go tool bundle` output, as the pruning and patches would have to be redone.\nInstead:\n\n* `go build -o /tmp/bundle golang.org/x/tools/cmd/bundle` after the bump; use this\n  new binary throughout, as older ones fail to load packages of a newer Go release\n* bundle both packages at the old version via a throwaway module requiring it and\n  blank-importing them, e.g. `/tmp/bundle -o /tmp/old_typeutil.go\n  golang.org/x/tools/go/types/typeutil`, and at the new version from this repository\n* diff old against new to see what upstream changed; apply only the hunks that touch\n  code we still keep\n* diff `bundled_xtools.go` against the new bundles to confirm the only differences are\n  the removed API and our `NOTE(garble)` patches, then bump the version in line 1\n* `go build ./...` and check `staticcheck` reports no unused code\n\n## Commits\n\n- Subject: lowercase, imperative, no trailing period, concise. Optionally prefixed\n  with an area: `testdata:`, `CI:`, `internal/literals:`, `README:`, `scripts:`, `all:`.\n- Body explains *why*, not just what. For perf changes, include benchstat tables or\n  before/after timings. For bug fixes, paste the failing build/test output and end\n  with `Fixes #NNN.`. Credit external contributors by name when relevant.\n- Keep prose tight — say what matters and stop. No restating, no padding.\n\n## Bug-fix workflow\n\nSplit into two commits: first a regression test that passes against the broken code\n(asserting current wrong behavior or with a TODO), then the fix flipping the test to\nassert correct behavior. Skip this for panics or hangs.\n"},"files":{"AGENTS.md":"# garble\n\nObfuscates Go code by wrapping the Go toolchain via `go build -toolexec=garble`.\nThe top-level process does CLI/setup; sub-processes wrap each `compile`/`asm`/`link`\ncall to transform source before the real tool runs. Read `CONTRIBUTING.md` for the\narchitecture (toolexec model, caching, terminology) and `README.md` for design goals\n(deterministic, reproducible, reversible).\n\n## Layout\n\n- Top-level `*.go`: CLI (`main.go`), the AST/type transformer (`transformer.go`),\n  name hashing (`hash.go`), reflection handling (`reflect*.go`), caches\n  (`cache_*.go`), runtime/linker patching (`runtime_patch.go`).\n- `internal/`: `literals` (string obfuscation), `ctrlflow`, `linker`, `ssa2ast`,\n  `asthelper`.\n- `bundled_xtools.go`: patched copies of x/tools packages; see below before touching.\n- `go_std_tables.go` is generated by `scripts/gen_go_std_tables.go` (`go generate`).\n\n## Testing\n\n- `go test ./...` does real builds and is slow (30s+). Use `go test -short` and\n  `go test -run Script/<name>` to target one `testdata/script/<name>.txtar`.\n- Integration tests are testscript `.txtar` files under `testdata/script/`. Most\n  behavior is tested there, not in Go unit tests.\n- Every change that alters behavior (feature, flag, bug) needs a test.\n- Tests must be deterministic — avoid randomness so failures reproduce; prefer\n  fixed seeds/inputs.\n- Test cost matters: keep builds minimal (smallest package that triggers the bug,\n  reuse caches, avoid full std rebuilds and `-debugdir` outside `debugdir.txtar`).\n- New Go version support, dependency bumps, and CI tuning are routine recurring work.\n- garble rejects Go toolchains newer than it supports, including `devel` builds.\n  If the `go` in `$PATH` is too new, run tests via `GOTOOLCHAIN` with the latest\n  bugfix release of the newest supported major version, such as\n  `GOTOOLCHAIN=go1.27.0 go test -short` as of August 2026.\n\n## Bundled x/tools packages\n\n`bundled_xtools.go` holds modified copies of x/tools packages, needed so that\n`typeutil.Hasher` does not hash struct field tags, given that tags do not affect type\nidentity. typeutil imports the internal `typeparams` package, so that is bundled too,\nwith the import replaced by the bundled `typeparams_` names. Each package's code is\nprefixed with its name and introduced by a `NOTE(garble)` comment naming its origin.\n\nOur patches are marked `// NOTE(garble)`. They are applied by an agent following the\nsteps below, not regenerated by a tool. We also drop any API which is not reachable\nfrom `typeutil_Hasher`. Line 1 records the x/tools version the file was bundled from.\n\nBumping `golang.org/x/tools` requires re-syncing the file. Never overwrite it with\nraw `go tool bundle` output, as the pruning and patches would have to be redone.\nInstead:\n\n* `go build -o /tmp/bundle golang.org/x/tools/cmd/bundle` after the bump; use this\n  new binary throughout, as older ones fail to load packages of a newer Go release\n* bundle both packages at the old version via a throwaway module requiring it and\n  blank-importing them, e.g. `/tmp/bundle -o /tmp/old_typeutil.go\n  golang.org/x/tools/go/types/typeutil`, and at the new version from this repository\n* diff old against new to see what upstream changed; apply only the hunks that touch\n  code we still keep\n* diff `bundled_xtools.go` against the new bundles to confirm the only differences are\n  the removed API and our `NOTE(garble)` patches, then bump the version in line 1\n* `go build ./...` and check `staticcheck` reports no unused code\n\n## Commits\n\n- Subject: lowercase, imperative, no trailing period, concise. Optionally prefixed\n  with an area: `testdata:`, `CI:`, `internal/literals:`, `README:`, `scripts:`, `all:`.\n- Body explains *why*, not just what. For perf changes, include benchstat tables or\n  before/after timings. For bug fixes, paste the failing build/test output and end\n  with `Fixes #NNN.`. Credit external contributors by name when relevant.\n- Keep prose tight — say what matters and stop. No restating, no padding.\n\n## Bug-fix workflow\n\nSplit into two commits: first a regression test that passes against the broken code\n(asserting current wrong behavior or with a TODO), then the fix flipping the test to\nassert correct behavior. Skip this for panics or hangs.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/burrowers/garble/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# garble\n\nObfuscates Go code by wrapping the Go toolchain via `go build -toolexec=garble`.\nThe top-level process does CLI/setup; sub-processes wrap each `compile`/`asm`/`link`\ncall to transform source before the real tool runs. Read `CONTRIBUTING.md` for the\narchitecture (toolexec model, caching, terminology) and `README.md` for design goals\n(deterministic, reproducible, reversible).\n\n## Layout\n\n- Top-level `*.go`: CLI (`main.go`), the AST/type transformer (`transformer.go`),\n  name hashing (`hash.go`), reflection handling (`reflect*.go`), caches\n  (`cache_*.go`), runtime/linker patching (`runtime_patch.go`).\n- `internal/`: `literals` (string obfuscation), `ctrlflow`, `linker`, `ssa2ast`,\n  `asthelper`.\n- `bundled_xtools.go`: patched copies of x/tools packages; see below before touching.\n- `go_std_tables.go` is generated by `scripts/gen_go_std_tables.go` (`go generate`).\n\n## Testing\n\n- `go test ./...` does real builds and is slow (30s+). Use `go test -short` and\n  `go test -run Script/<name>` to target one `testdata/script/<name>.txtar`.\n- Integration tests are testscript `.txtar` files under `testdata/script/`. Most\n  behavior is tested there, not in Go unit tests.\n- Every change that alters behavior (feature, flag, bug) needs a test.\n- Tests must be deterministic — avoid randomness so failures reproduce; prefer\n  fixed seeds/inputs.\n- Test cost matters: keep builds minimal (smallest package that triggers the bug,\n  reuse caches, avoid full std rebuilds and `-debugdir` outside `debugdir.txtar`).\n- New Go version support, dependency bumps, and CI tuning are routine recurring work.\n- garble rejects Go toolchains newer than it supports, including `devel` builds.\n  If the `go` in `$PATH` is too new, run tests via `GOTOOLCHAIN` with the latest\n  bugfix release of the newest supported major version, such as\n  `GOTOOLCHAIN=go1.27.0 go test -short` as of August 2026.\n\n## Bundled x/tools packages\n\n`bundled_xtools.go` holds modified copies of x/tools packages, needed so that\n`typeutil.Hasher` does not hash struct field tags, given that tags do not affect type\nidentity. typeutil imports the internal `typeparams` package, so that is bundled too,\nwith the import replaced by the bundled `typeparams_` names. Each package's code is\nprefixed with its name and introduced by a `NOTE(garble)` comment naming its origin.\n\nOur patches are marked `// NOTE(garble)`. They are applied by an agent following the\nsteps below, not regenerated by a tool. We also drop any API which is not reachable\nfrom `typeutil_Hasher`. Line 1 records the x/tools version the file was bundled from.\n\nBumping `golang.org/x/tools` requires re-syncing the file. Never overwrite it with\nraw `go tool bundle` output, as the pruning and patches would have to be redone.\nInstead:\n\n* `go build -o /tmp/bundle golang.org/x/tools/cmd/bundle` after the bump; use this\n  new binary throughout, as older ones fail to load packages of a newer Go release\n* bundle both packages at the old version via a throwaway module requiring it and\n  blank-importing them, e.g. `/tmp/bundle -o /tmp/old_typeutil.go\n  golang.org/x/tools/go/types/typeutil`, and at the new version from this repository\n* diff old against new to see what upstream changed; apply only the hunks that touch\n  code we still keep\n* diff `bundled_xtools.go` against the new bundles to confirm the only differences are\n  the removed API and our `NOTE(garble)` patches, then bump the version in line 1\n* `go build ./...` and check `staticcheck` reports no unused code\n\n## Commits\n\n- Subject: lowercase, imperative, no trailing period, concise. Optionally prefixed\n  with an area: `testdata:`, `CI:`, `internal/literals:`, `README:`, `scripts:`, `all:`.\n- Body explains *why*, not just what. For perf changes, include benchstat tables or\n  before/after timings. For bug fixes, paste the failing build/test output and end\n  with `Fixes #NNN.`. Credit external contributors by name when relevant.\n- Keep prose tight — say what matters and stop. No restating, no padding.\n\n## Bug-fix workflow\n\nSplit into two commits: first a regression test that passes against the broken code\n(asserting current wrong behavior or with a TODO), then the fix flipping the test to\nassert correct behavior. Skip this for panics or hangs.\n","isInternal":false,"tokens":1080,"sizeBytes":4264}],"systemPromptSnippet":"<yakaai_skills repo=\"burrowers/garble\">\n<!-- File: AGENTS.md (Tokens: ~1080 | Category: root-instruction) -->\n# garble\n\nObfuscates Go code by wrapping the Go toolchain via `go build -toolexec=garble`.\nThe top-level process does CLI/setup; sub-processes wrap each `compile`/`asm`/`link`\ncall to transform source before the real tool runs. Read `CONTRIBUTING.md` for the\narchitecture (toolexec model, caching, terminology) and `README.md` for design goals\n(deterministic, reproducible, reversible).\n\n## Layout\n\n- Top-level `*.go`: CLI (`main.go`), the AST/type transformer (`transformer.go`),\n  name hashing (`hash.go`), reflection handling (`reflect*.go`), caches\n  (`cache_*.go`), runtime/linker patching (`runtime_patch.go`).\n- `internal/`: `literals` (string obfuscation), `ctrlflow`, `linker`, `ssa2ast`,\n  `asthelper`.\n- `bundled_xtools.go`: patched copies of x/tools packages; see below before touching.\n- `go_std_tables.go` is generated by `scripts/gen_go_std_tables.go` (`go generate`).\n\n## Testing\n\n- `go test ./...` does real builds and is slow (30s+). Use `go test -short` and\n  `go test -run Script/<name>` to target one `testdata/script/<name>.txtar`.\n- Integration tests are testscript `.txtar` files under `testdata/script/`. Most\n  behavior is tested there, not in Go unit tests.\n- Every change that alters behavior (feature, flag, bug) needs a test.\n- Tests must be deterministic — avoid randomness so failures reproduce; prefer\n  fixed seeds/inputs.\n- Test cost matters: keep builds minimal (smallest package that triggers the bug,\n  reuse caches, avoid full std rebuilds and `-debugdir` outside `debugdir.txtar`).\n- New Go version support, dependency bumps, and CI tuning are routine recurring work.\n- garble rejects Go toolchains newer than it supports, including `devel` builds.\n  If the `go` in `$PATH` is too new, run tests via `GOTOOLCHAIN` with the latest\n  bugfix release of the newest supported major version, such as\n  `GOTOOLCHAIN=go1.27.0 go test -short` as of August 2026.\n\n## Bundled x/tools packages\n\n`bundled_xtools.go` holds modified copies of x/tools packages, needed so that\n`typeutil.Hasher` does not hash struct field tags, given that tags do not affect type\nidentity. typeutil imports the internal `typeparams` package, so that is bundled too,\nwith the import replaced by the bundled `typeparams_` names. Each package's code is\nprefixed with its name and introduced by a `NOTE(garble)` comment naming its origin.\n\nOur patches are marked `// NOTE(garble)`. They are applied by an agent following the\nsteps below, not regenerated by a tool. We also drop any API which is not reachable\nfrom `typeutil_Hasher`. Line 1 records the x/tools version the file was bundled from.\n\nBumping `golang.org/x/tools` requires re-syncing the file. Never overwrite it with\nraw `go tool bundle` output, as the pruning and patches would have to be redone.\nInstead:\n\n* `go build -o /tmp/bundle golang.org/x/tools/cmd/bundle` after the bump; use this\n  new binary throughout, as older ones fail to load packages of a newer Go release\n* bundle both packages at the old version via a throwaway module requiring it and\n  blank-importing them, e.g. `/tmp/bundle -o /tmp/old_typeutil.go\n  golang.org/x/tools/go/types/typeutil`, and at the new version from this repository\n* diff old against new to see what upstream changed; apply only the hunks that touch\n  code we still keep\n* diff `bundled_xtools.go` against the new bundles to confirm the only differences are\n  the removed API and our `NOTE(garble)` patches, then bump the version in line 1\n* `go build ./...` and check `staticcheck` reports no unused code\n\n## Commits\n\n- Subject: lowercase, imperative, no trailing period, concise. Optionally prefixed\n  with an area: `testdata:`, `CI:`, `internal/literals:`, `README:`, `scripts:`, `all:`.\n- Body explains *why*, not just what. For perf changes, include benchstat tables or\n  before/after timings. For bug fixes, paste the failing build/test output and end\n  with `Fixes #NNN.`. Credit external contributors by name when relevant.\n- Keep prose tight — say what matters and stop. No restating, no padding.\n\n## Bug-fix workflow\n\nSplit into two commits: first a regression test that passes against the broken code\n(asserting current wrong behavior or with a TODO), then the fix flipping the test to\nassert correct behavior. Skip this for panics or hangs.\n</yakaai_skills>"}