{"owner":"grafana","repo":"mimir","hasSkills":true,"totalSkillsCount":94,"totalTokensCount":28409,"categories":["anthropic-skill","plugin-manifest","claude-rule","root-instruction"],"hasMcp":false,"mcpConfig":null,"found":[".claude/skills/split-file/SKILL.md","tools/benchmark-query-engine/README.md","tools/README.md","tools/check-for-disabled-but-supported-mqe-test-cases/README.md","tools/copyblocks/README.md","pkg/CLAUDE.md","integration/CLAUDE.md","docs/CLAUDE.md","tools/copyprefix/README.md","tools/decode-protobuf-query-result/README.md","AGENTS.md","tools/delete-objects/README.md","tools/diagram/readme.md","tools/disable-failing-upstream-promql-tests/README.md","tools/grpcurl-query-ingesters/README.md","tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json","tools/grpcurl-query-store-gateways/README.md","tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json","tools/kafkatool/README.md","tools/listblocks/README.md","tools/mark-blocks/README.md","tools/markblocks/README.md","tools/node-gen/README.md","tools/promql-generator/README.md","tools/promql-generator/sample_series.json","tools/query-bucket-index/README.md","tools/splitblocks/README.md","tools/sync-upstream-promql-tests/README.md","tools/tsdb-gaps/README.md","tools/tsdb-index-header/README.md","tools/undelete-blocks/README.md","development/tools/upload-block/README.md","docs/internal/tools/compaction-planner.md","docs/internal/tools/copyblocks.md","docs/internal/tools/list-blocks.md","docs/internal/tools/list-deduplicated-blocks.md","docs/internal/tools/mark-blocks.md","docs/internal/tools/query-step-alignment-analysis.md","docs/internal/tools/splitblocks.md","docs/internal/tools/trafficdump.md","docs/internal/tools/tsdb-tools.md","docs/internal/tools/ulidtime.md","docs/internal/tools/undelete-blocks.md","docs/sources/mimir/references/_index.md","docs/sources/mimir/references/glossary.md","operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md","pkg/mimirtool/commands/testdata/alertmanager_config.yaml","pkg/mimirtool/commands/testdata/apiserver.json","pkg/mimirtool/commands/testdata/prometheus_rules.yaml","pkg/mimirtool/rules/testdata/basic_namespace.yaml","pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml","pkg/mimirtool/rules/testdata/loki_basic.yaml","pkg/mimirtool/rules/testdata/loki_basic_failure.yaml","pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml","pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml","pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml","pkg/mimirtool/rules/testdata/multiple_namespace.yaml","docs/sources/mimir/manage/tools/_index.md","docs/sources/mimir/manage/tools/continuous-test.md","docs/sources/mimir/manage/tools/listblocks.md","docs/sources/mimir/manage/tools/mark-blocks.md","docs/sources/mimir/manage/tools/mimirtool.md","docs/sources/mimir/manage/tools/query-tee.md","docs/sources/mimir/manage/tools/tenant-injector.md","docs/sources/mimir/references/architecture/_index.md","docs/sources/mimir/references/architecture/binary-index-header.md","docs/sources/mimir/references/architecture/key-value-store.md","docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md","docs/sources/mimir/references/architecture/mimir-query-engine.md","docs/sources/mimir/references/architecture/ports.md","docs/sources/mimir/references/http-api/_index.md","docs/sources/mimir/references/learning-resources/_index.md","pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml","pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml","pkg/mimirtool/commands/testdata/template/alert_data1.json","pkg/mimirtool/commands/testdata/template/alert_data2.json","vendor/github.com/google/gnostic-models/extensions/README.md","docs/sources/mimir/references/architecture/bucket-index/index.md","docs/sources/mimir/references/architecture/components/_index.md","docs/sources/mimir/references/architecture/components/alertmanager.md","docs/sources/mimir/references/architecture/components/distributor.md","docs/sources/mimir/references/architecture/components/overrides-exporter.md","docs/sources/mimir/references/architecture/components/querier.md","docs/sources/mimir/references/architecture/components/store-gateway.md","docs/sources/mimir/references/architecture/deployment-modes/index.md","docs/sources/mimir/references/architecture/hash-ring/index.md","docs/sources/mimir/references/architecture/query-sharding/index.md","docs/sources/mimir/references/architecture/components/block-builder/index.md","docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md","docs/sources/mimir/references/architecture/components/compactor/index.md","docs/sources/mimir/references/architecture/components/ingester/index.md","docs/sources/mimir/references/architecture/components/query-frontend/index.md","docs/sources/mimir/references/architecture/components/query-scheduler/index.md","docs/sources/mimir/references/architecture/components/ruler/index.md"],"skills":{".claude/skills/split-file/SKILL.md":"---\nname: split-file\ndescription: Split a large Go file into smaller focused files while preserving git history. Use when a file is too large and needs to be broken into logical modules.\nargument-hint: [filepath]\n---\n\n# Split a Go file into multiple files preserving git history\n\nSplit the file at `$ARGUMENTS` into multiple smaller files, grouped by logical concern, while preserving `git log --follow` history for each new file.\n\n## Phase 1: Analyze\n\n1. Read the file and catalog every function, method, type, const block, and var block with their line numbers.\n2. Group them into logical categories (e.g., push path, query path, TSDB lifecycle, HTTP handlers, etc.).\n3. Check existing files in the same package to understand naming conventions and avoid conflicts.\n4. Propose the split to the user: list each new file, what goes in it, and approximate line count. Keep the original file for initialization, config, types, and lifecycle. Aim for at least 4 files.\n5. Wait for user approval before proceeding.\n\n## Phase 2: Split with history preservation\n\nFor each new file, repeat this sequence. Process files from largest to smallest.\n\n### Git dance (creates the new file with full history)\n\n```bash\n# 1. Create temp branch from current branch\ngit checkout -b temp-split-SUFFIX $CURRENT_BRANCH\n\n# 2. Rename original to new filename\ngit mv path/to/original.go path/to/new_file.go\ngit commit -m \"temp: rename original.go to new_file.go\"\n\n# 3. Go back to working branch\ngit checkout $CURRENT_BRANCH\n\n# 4. Rename original to a temp name (creates rename/rename conflict)\ngit mv path/to/original.go path/to/original_main_temp.go\ngit commit -m \"temp: rename original.go to original_main_temp.go\"\n\n# 5. Merge — this triggers a CONFLICT (rename/rename), which is what we want\ngit merge temp-split-SUFFIX --no-commit\ngit checkout --ours path/to/original_main_temp.go\ngit checkout --theirs path/to/new_file.go\ngit add path/to/original_main_temp.go path/to/new_file.go\ngit rm --cached path/to/original.go 2>/dev/null\ngit commit -m \"split: create new_file.go from original.go (preserving history)\"\n\n# 6. Rename temp back to original\ngit mv path/to/original_main_temp.go path/to/original.go\ngit commit -m \"temp: rename original_main_temp.go back to original.go\"\n\n# 7. Cleanup\ngit branch -d temp-split-SUFFIX\n```\n\n### Content extraction\n\nAfter the git dance, both files contain the full original content. Now trim them:\n\n1. Write a python helper script that extracts specific line ranges from a file (for the new file) and removes those same ranges (for the original). This is much faster and less error-prone than manual editing.\n2. Run `goimports -local <module_path> -w` on both files to fix imports.\n3. If `goimports` resolves aliased imports incorrectly (e.g., `util_log`, `mimir_storage`, `promcfg`), fix them manually. This is common for packages with custom import aliases.\n4. Run `go build ./path/to/package/...` to verify compilation.\n5. Commit the trimmed files: `git commit -m \"split: trim new_file.go to <description> code only\"`\n\n### Gotchas learned from experience\n\n- **goimports resolves wrong packages**: When the codebase has aliased imports like `util_log \"pkg/util/log\"` or `mimir_storage \"pkg/storage\"`, `goimports` may resolve to a different package with the same base name (e.g., otel's `exemplar` instead of prometheus's `exemplar`). Always check the import block after running goimports.\n- **Shared types across split boundaries**: Types like context keys or request state structs used by multiple split files should go in the file where they are primarily defined. They're accessible from other files in the same package.\n- **The rename/rename conflict is essential**: A simple modify-on-one-side + rename-on-other-side does NOT create a conflict — git auto-merges it by following the rename, and you lose the original file. You MUST rename on BOTH sides to force the conflict.\n- **Test files don't need splitting**: Tests in `_test.go` files work across all files in the same package.\n- **Process largest extractions first**: This keeps the original file shrinking progressively and makes line number tracking easier.\n\n## Phase 3: Verify\n\nAfter all splits are done:\n\n```bash\n# Build\ngo build ./path/to/package/...\n\n# Run tests\ngo test ./path/to/package/... -count=1 -short\n\n# Verify history for each new file\nfor f in new_file1 new_file2 ...; do\n  echo \"=== $f ===\"\n  git log --follow --oneline \"path/to/${f}.go\" | tail -3\ndone\n```\n\nEach new file should show the full commit history from before the split.\n\n### Per-declaration content hash verification\n\nUse `tools/split-file-verify` to prove that every declaration was moved intact. The tool parses Go files using the AST, extracts every top-level declaration (functions, methods, types, var/const blocks), and outputs a sorted TSV of `name \\t sha256_hash`.\n\n```bash\n# Build the tool\ngo build -o /tmp/split-file-verify ./tools/split-file-verify\n\n# Hash every declaration in the original file (from the base commit)\ngit show <base-commit>:path/to/original.go > /tmp/original.go\n/tmp/split-file-verify /tmp/original.go > /tmp/original_decls.tsv\n\n# Hash every declaration across all split files\n/tmp/split-file-verify path/to/file1.go path/to/file2.go ... > /tmp/split_decls.tsv\n\n# Compare — should produce no output if everything matches\ndiff /tmp/original_decls.tsv /tmp/split_decls.tsv\n```\n\nIf `diff` produces no output, every declaration has the exact same content in the split files as in the original. Post this as a PR comment so reviewers can verify without reading every line.\n","tools/benchmark-query-engine/README.md":"`benchmark-query-engine` runs the streaming PromQL engine benchmarks and captures peak memory utilisation of the benchmark process.\n\nEach benchmark is run in a separate process to provide some kind of guarantee that the memory utilisation is not affected by other benchmarks.\n\nAn ingester is started in the `benchmark-query-engine` process (ie. not the benchmark process) to ensure the TSDB does not skew results.\n\nPeak memory utilisation is the high-water mark of the benchmark process' resident set size (RSS), reported in the last column of each benchmark line as `B`. On macOS this is taken from the `Rusage` returned when the benchmark process exits. On Linux that value would include the peak RSS of the `benchmark-query-engine` process itself (including the ingester's data), so the benchmark process reports its own peak RSS from `/proc/self/status` instead. This is the peak over all iterations of the benchmark, and a benchmark runs more iterations when each query is faster. To compare the peak memory utilisation of two versions whose queries take different times, run both with the same number of iterations, for example with `-benchtime=10x`.\n\nFor the Mimir engine, each benchmark line also includes `estimated-peak-B/op`: the mean peak memory consumption that the memory consumption tracker estimates for each query. This is the value that per-query memory limits use. It does not include memory that the tracker does not count, so it can be much lower than the peak RSS.\n\nResults from `benchmark-query-engine` can be summarised with `benchstat`, as well as [`compare.sh`](./compare.sh).\n\nUsage:\n\n- `go run .`: run all benchmarks once and capture peak memory utilisation\n- `go run . -list`: print all available benchmarks\n- `go run . -bench=abc`: run all benchmarks with names matching regex `abc`\n- `go run . -count=X`: run all benchmarks X times\n- `go run . -bench=abc -count=X`: run all benchmarks with names matching regex `abc` X times\n- `go run . -start-ingester`: start ingester and wait (run no benchmarks)\n- `go run . -use-existing-ingester=localhost:1234`: use existing ingester started with `-start-ingester` to reduce startup time\n","tools/README.md":"Scripts based on https://github.com/weaveworks/build-tools\n","tools/check-for-disabled-but-supported-mqe-test-cases/README.md":"This tool checks for upstream test cases that have been disabled but are now supported by MQE.\n\nSee [these docs](../../pkg/streamingpromql/testdata/upstream/README.md) for more information.\n\nRun this tool with `go run .` in the `check-for-disabled-but-supported-mqe-test-cases` directory.\n","tools/copyblocks/README.md":"# copyblocks\n\n> [!WARNING]\n> **Deprecated:** the standalone `copyblocks` tool is deprecated and will be removed in a future release.\n> Use [`mimirtool blocks copy`](../../cmd/mimirtool) instead.\n\nThis program can copy Mimir blocks between two buckets or from a bucket to a backfill destination. Its documentation has moved to [`docs/internal/tools/copyblocks.md`](../../docs/internal/tools/copyblocks.md).\n","pkg/CLAUDE.md":"../docs/internal/contributing/design-patterns-and-conventions.md","integration/CLAUDE.md":"../docs/internal/contributing/how-integration-tests-work.md","docs/CLAUDE.md":"internal/contributing/how-to-write-documentation.md","tools/copyprefix/README.md":"# copyprefix\n\nThis program copies objects by prefix between two buckets. If your infrastructure is largely on a single object storage service their respective CLI tool may be more convenient to use.\n\nBy default, copying will be attempted server-side if both the source and destination specify the same object storage service. If the buckets are on different object storage services, or if `--client-side-copy` is passed, then the copy will be performed client side.\n\nThe currently supported services are Amazon Simple Storage Service (S3 and S3-compatible), Azure Blob Storage (ABS), and Google Cloud Storage (GCS).\n\n## Features\n\n- Specify which prefix to copy from the source bucket with `--source-prefix`. The default source prefix is the empty string, which copies everything\n- The source prefix on objects copied to the destination can be replaced with a different prefix by providing `--destination-prefix`\n- Log what would be copied without actually copying anything with `--dry-run`\n- Skip overwrites (as determined by a listing on the destination, so it is only best effort) by specifying `--skip-overwrites`\n\n## Running\n\nRun `go build` in this directory to build the program. Then, use an example below as a guide.\n\n### Example for Google Cloud Storage\n\n```bash\n./copyprefix \\\n  --source.backend gcs \\\n  --destination.backend gcs \\\n  --gcs.source.bucket-name <source bucket name> \\\n  --gcs.destination.bucket-name <destination bucket name> \\\n  --source-prefix tenant1 \\\n  --destination-prefix tenant2 \\\n  --dry-run\n```\n\n### Example for Azure Blob Storage\n\n```bash\n./copyprefix \\\n  --source.backend azure \\\n  --destination.backend azure \\\n  --azure.source.container-name <source container name> \\\n  --azure.source.account-name <source account name> \\\n  --azure.source.account-key <source account key> \\\n  --azure.destination.container-name <destination container name> \\\n  --azure.destination.account-name <destination account name> \\\n  --azure.destination.account-key <destination account key> \\\n  --source-prefix rules \\\n  --skip-overwrites \\\n  --dry-run\n```\n\n### Example for Amazon Simple Storage Service\n\nThe destination is called to intiate the server-side copy which may require setting up additional permissions for the copy to have access the source bucket.\nConsider passing `--client-side-copy` to avoid having to deal with that.\n\n```bash\n./copyprefix \\\n  --source.backend s3 \\\n  --destination.backend s3 \\\n  --s3.source.bucket-name <source bucket name> \\\n  --s3.source.access-key-id <source access key id> \\\n  --s3.source.secret-access-key <source secret access key> \\\n  --s3.source.endpoint <source endpoint> \\\n  --s3.destination.bucket-name <destination bucket name> \\\n  --s3.destination.access-key-id <destination access key id> \\\n  --s3.destination.secret-access-key <destination secret access key> \\\n  --s3.destination.endpoint <destination endpoint> \\\n  --source-prefix tenant2 \\\n  --dry-run\n```\n\n### Example for copying between different providers\n\nCombine the relevant source and destination configuration options using the above examples as a guide.\nFor instance, to copy from S3 to ABS:\n\n```bash\n./copyprefix \\\n  --source.backend s3 \\\n  --destination.backend azure \\\n  --s3.source.bucket-name <source bucket name> \\\n  --s3.source.access-key-id <source access key id> \\\n  --s3.source.secret-access-key <source secret access key> \\\n  --s3.source.endpoint <source endpoint> \\\n  --azure.destination.container-name <destination container name> \\\n  --azure.destination.account-name <destination account name> \\\n  --azure.destination.account-key <destination account key> \\\n  --source-prefix tenant3 \\\n  --dry-run\n```\n","tools/decode-protobuf-query-result/README.md":"# Purpose\n\nTo decode PromQL query results encoded in Protobuf format.\n\nUse case: to query and print native histograms in their raw format instead\nof the simplified format in the default JSON response. In particular to get\nschema number, reset hint, spans, etc, in other words the raw samples that\nPromQL produced.\n\n# How to use\n\nMake a query using curl (or some other tool) and make sure to:\n\n- use the header `-H \"Accept: application/vnd.mimir.queryresponse+protobuf\"`,\n- optionally use `-H \"Cache-Control: no-store\"` to avoid caches,\n- save the result in a file,\n- verify that the HTTP response was 2xx.\n\nFor example\n\n```sh\n$ curl -G -H \"Accept: application/vnd.mimir.queryresponse+protobuf\" -H \"X-Scope-OrgId: 1\" http://localhost:8080/prometheus/api/v1/query --data-urlencode 'query=foo{bar=\"baz\"}[6m]' --data-urlencode 'time=1759932075' -o out.proto\n % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  1315  100  1315    0     0  17870      0 --:--:-- --:--:-- --:--:-- 18013\n\n$ go run . out.proto\nDecoding out.proto as matrix\nStream 0, labels foo{bar=\"baz\"}:\n  Timestamp: 1759931725000, Histogram: &FloatHistogram{Count:0,Sum:0,Schema:0,ZeroThreshold:0,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{},PositiveBuckets:[],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931740000, Histogram: &FloatHistogram{Count:2,Sum:2.2885222e+07,Schema:3,ZeroThreshold:1e-128,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{BucketSpan{Offset:187,Length:3,},},PositiveBuckets:[1 1 0],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931935000, Histogram: &FloatHistogram{Count:0,Sum:0,Schema:0,ZeroThreshold:0,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{},PositiveBuckets:[],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931950000, Histogram: &FloatHistogram{Count:2,Sum:2.4272461e+07,Schema:3,ZeroThreshold:1e-128,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{BucketSpan{Offset:186,Length:1,},BucketSpan{Offset:3,Length:2,},},PositiveBuckets:[1 1 0],CounterResetHint:0,CustomValues:[],}\n```\n\nRun this command with the filename as the argument and enjoy.\n","AGENTS.md":"@docs/internal/contributing/README.md\n","tools/delete-objects/README.md":"# delete-objects Documentation\n\nPath: `tools/delete-objects/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/delete-objects/README.md)","tools/diagram/readme.md":"# diagram Documentation\n\nPath: `tools/diagram/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/diagram/readme.md)","tools/disable-failing-upstream-promql-tests/README.md":"# disable-failing-upstream-promql-tests Documentation\n\nPath: `tools/disable-failing-upstream-promql-tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/disable-failing-upstream-promql-tests/README.md)","tools/grpcurl-query-ingesters/README.md":"# grpcurl-query-ingesters Documentation\n\nPath: `tools/grpcurl-query-ingesters/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/README.md)","tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json":"# Grpcurl-query-ingesters Skill\n\nPath: `tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json)","tools/grpcurl-query-store-gateways/README.md":"# grpcurl-query-store-gateways Documentation\n\nPath: `tools/grpcurl-query-store-gateways/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/README.md)","tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json":"# Grpcurl-query-store-gateways Skill\n\nPath: `tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json)","tools/kafkatool/README.md":"# kafkatool Documentation\n\nPath: `tools/kafkatool/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/kafkatool/README.md)","tools/listblocks/README.md":"# listblocks Documentation\n\nPath: `tools/listblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/listblocks/README.md)","tools/mark-blocks/README.md":"# mark-blocks Documentation\n\nPath: `tools/mark-blocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/mark-blocks/README.md)","tools/markblocks/README.md":"# markblocks Documentation\n\nPath: `tools/markblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/markblocks/README.md)","tools/node-gen/README.md":"# node-gen Documentation\n\nPath: `tools/node-gen/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/node-gen/README.md)","tools/promql-generator/README.md":"# promql-generator Documentation\n\nPath: `tools/promql-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/README.md)","tools/promql-generator/sample_series.json":"# Promql-generator Skill\n\nPath: `tools/promql-generator/sample_series.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/sample_series.json)","tools/query-bucket-index/README.md":"# query-bucket-index Documentation\n\nPath: `tools/query-bucket-index/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/query-bucket-index/README.md)","tools/splitblocks/README.md":"# splitblocks Documentation\n\nPath: `tools/splitblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/splitblocks/README.md)","tools/sync-upstream-promql-tests/README.md":"# sync-upstream-promql-tests Documentation\n\nPath: `tools/sync-upstream-promql-tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/sync-upstream-promql-tests/README.md)","tools/tsdb-gaps/README.md":"# tsdb-gaps Documentation\n\nPath: `tools/tsdb-gaps/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-gaps/README.md)","tools/tsdb-index-header/README.md":"# tsdb-index-header Documentation\n\nPath: `tools/tsdb-index-header/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-index-header/README.md)","tools/undelete-blocks/README.md":"# undelete-blocks Documentation\n\nPath: `tools/undelete-blocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/undelete-blocks/README.md)","development/tools/upload-block/README.md":"# upload-block Documentation\n\nPath: `development/tools/upload-block/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/development/tools/upload-block/README.md)","docs/internal/tools/compaction-planner.md":"# Tools Skill\n\nPath: `docs/internal/tools/compaction-planner.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/compaction-planner.md)","docs/internal/tools/copyblocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/copyblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/copyblocks.md)","docs/internal/tools/list-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/list-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-blocks.md)","docs/internal/tools/list-deduplicated-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/list-deduplicated-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-deduplicated-blocks.md)","docs/internal/tools/mark-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/mark-blocks.md)","docs/internal/tools/query-step-alignment-analysis.md":"# Tools Skill\n\nPath: `docs/internal/tools/query-step-alignment-analysis.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/query-step-alignment-analysis.md)","docs/internal/tools/splitblocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/splitblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/splitblocks.md)","docs/internal/tools/trafficdump.md":"# Tools Skill\n\nPath: `docs/internal/tools/trafficdump.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/trafficdump.md)","docs/internal/tools/tsdb-tools.md":"# Tools Skill\n\nPath: `docs/internal/tools/tsdb-tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/tsdb-tools.md)","docs/internal/tools/ulidtime.md":"# Tools Skill\n\nPath: `docs/internal/tools/ulidtime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/ulidtime.md)","docs/internal/tools/undelete-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/undelete-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/undelete-blocks.md)","docs/sources/mimir/references/_index.md":"# References Skill\n\nPath: `docs/sources/mimir/references/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/_index.md)","docs/sources/mimir/references/glossary.md":"# References Skill\n\nPath: `docs/sources/mimir/references/glossary.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/glossary.md)","operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md":"# resolve-config Documentation\n\nPath: `operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md)","pkg/mimirtool/commands/testdata/alertmanager_config.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/alertmanager_config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/alertmanager_config.yaml)","pkg/mimirtool/commands/testdata/apiserver.json":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/apiserver.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/apiserver.json)","pkg/mimirtool/commands/testdata/prometheus_rules.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/prometheus_rules.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/prometheus_rules.yaml)","pkg/mimirtool/rules/testdata/basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace.yaml)","pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml)","pkg/mimirtool/rules/testdata/loki_basic.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic.yaml)","pkg/mimirtool/rules/testdata/loki_basic_failure.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic_failure.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_failure.yaml)","pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml)","pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml)","pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml)","pkg/mimirtool/rules/testdata/multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/multiple_namespace.yaml)","docs/sources/mimir/manage/tools/_index.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/_index.md)","docs/sources/mimir/manage/tools/continuous-test.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/continuous-test.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/continuous-test.md)","docs/sources/mimir/manage/tools/listblocks.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/listblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/listblocks.md)","docs/sources/mimir/manage/tools/mark-blocks.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mark-blocks.md)","docs/sources/mimir/manage/tools/mimirtool.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mimirtool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mimirtool.md)","docs/sources/mimir/manage/tools/query-tee.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/query-tee.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/query-tee.md)","docs/sources/mimir/manage/tools/tenant-injector.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/tenant-injector.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/tenant-injector.md)","docs/sources/mimir/references/architecture/_index.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/_index.md)","docs/sources/mimir/references/architecture/binary-index-header.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/binary-index-header.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/binary-index-header.md)","docs/sources/mimir/references/architecture/key-value-store.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/key-value-store.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/key-value-store.md)","docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md)","docs/sources/mimir/references/architecture/mimir-query-engine.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/mimir-query-engine.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/mimir-query-engine.md)","docs/sources/mimir/references/architecture/ports.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/ports.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/ports.md)","docs/sources/mimir/references/http-api/_index.md":"# Http-api Skill\n\nPath: `docs/sources/mimir/references/http-api/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/http-api/_index.md)","docs/sources/mimir/references/learning-resources/_index.md":"# Learning-resources Skill\n\nPath: `docs/sources/mimir/references/learning-resources/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/learning-resources/_index.md)","pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml":"# Runtimeconfig Skill\n\nPath: `pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml)","pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml":"# Runtimeconfig Skill\n\nPath: `pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml)","pkg/mimirtool/commands/testdata/template/alert_data1.json":"# Template Skill\n\nPath: `pkg/mimirtool/commands/testdata/template/alert_data1.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data1.json)","pkg/mimirtool/commands/testdata/template/alert_data2.json":"# Template Skill\n\nPath: `pkg/mimirtool/commands/testdata/template/alert_data2.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data2.json)","vendor/github.com/google/gnostic-models/extensions/README.md":"# extensions Documentation\n\nPath: `vendor/github.com/google/gnostic-models/extensions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/vendor/github.com/google/gnostic-models/extensions/README.md)","docs/sources/mimir/references/architecture/bucket-index/index.md":"# Bucket-index Skill\n\nPath: `docs/sources/mimir/references/architecture/bucket-index/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/bucket-index/index.md)","docs/sources/mimir/references/architecture/components/_index.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/_index.md)","docs/sources/mimir/references/architecture/components/alertmanager.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/alertmanager.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/alertmanager.md)","docs/sources/mimir/references/architecture/components/distributor.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/distributor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/distributor.md)","docs/sources/mimir/references/architecture/components/overrides-exporter.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/overrides-exporter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/overrides-exporter.md)","docs/sources/mimir/references/architecture/components/querier.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/querier.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/querier.md)","docs/sources/mimir/references/architecture/components/store-gateway.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/store-gateway.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/store-gateway.md)","docs/sources/mimir/references/architecture/deployment-modes/index.md":"# Deployment-modes Skill\n\nPath: `docs/sources/mimir/references/architecture/deployment-modes/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/deployment-modes/index.md)","docs/sources/mimir/references/architecture/hash-ring/index.md":"# Hash-ring Skill\n\nPath: `docs/sources/mimir/references/architecture/hash-ring/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/hash-ring/index.md)","docs/sources/mimir/references/architecture/query-sharding/index.md":"# Query-sharding Skill\n\nPath: `docs/sources/mimir/references/architecture/query-sharding/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/query-sharding/index.md)","docs/sources/mimir/references/architecture/components/block-builder/index.md":"# Block-builder Skill\n\nPath: `docs/sources/mimir/references/architecture/components/block-builder/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/block-builder/index.md)","docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md":"# Compactor-scheduler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md)","docs/sources/mimir/references/architecture/components/compactor/index.md":"# Compactor Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor/index.md)","docs/sources/mimir/references/architecture/components/ingester/index.md":"# Ingester Skill\n\nPath: `docs/sources/mimir/references/architecture/components/ingester/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ingester/index.md)","docs/sources/mimir/references/architecture/components/query-frontend/index.md":"# Query-frontend Skill\n\nPath: `docs/sources/mimir/references/architecture/components/query-frontend/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-frontend/index.md)","docs/sources/mimir/references/architecture/components/query-scheduler/index.md":"# Query-scheduler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/query-scheduler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-scheduler/index.md)","docs/sources/mimir/references/architecture/components/ruler/index.md":"# Ruler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/ruler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ruler/index.md)"},"files":{".claude/skills/split-file/SKILL.md":"---\nname: split-file\ndescription: Split a large Go file into smaller focused files while preserving git history. Use when a file is too large and needs to be broken into logical modules.\nargument-hint: [filepath]\n---\n\n# Split a Go file into multiple files preserving git history\n\nSplit the file at `$ARGUMENTS` into multiple smaller files, grouped by logical concern, while preserving `git log --follow` history for each new file.\n\n## Phase 1: Analyze\n\n1. Read the file and catalog every function, method, type, const block, and var block with their line numbers.\n2. Group them into logical categories (e.g., push path, query path, TSDB lifecycle, HTTP handlers, etc.).\n3. Check existing files in the same package to understand naming conventions and avoid conflicts.\n4. Propose the split to the user: list each new file, what goes in it, and approximate line count. Keep the original file for initialization, config, types, and lifecycle. Aim for at least 4 files.\n5. Wait for user approval before proceeding.\n\n## Phase 2: Split with history preservation\n\nFor each new file, repeat this sequence. Process files from largest to smallest.\n\n### Git dance (creates the new file with full history)\n\n```bash\n# 1. Create temp branch from current branch\ngit checkout -b temp-split-SUFFIX $CURRENT_BRANCH\n\n# 2. Rename original to new filename\ngit mv path/to/original.go path/to/new_file.go\ngit commit -m \"temp: rename original.go to new_file.go\"\n\n# 3. Go back to working branch\ngit checkout $CURRENT_BRANCH\n\n# 4. Rename original to a temp name (creates rename/rename conflict)\ngit mv path/to/original.go path/to/original_main_temp.go\ngit commit -m \"temp: rename original.go to original_main_temp.go\"\n\n# 5. Merge — this triggers a CONFLICT (rename/rename), which is what we want\ngit merge temp-split-SUFFIX --no-commit\ngit checkout --ours path/to/original_main_temp.go\ngit checkout --theirs path/to/new_file.go\ngit add path/to/original_main_temp.go path/to/new_file.go\ngit rm --cached path/to/original.go 2>/dev/null\ngit commit -m \"split: create new_file.go from original.go (preserving history)\"\n\n# 6. Rename temp back to original\ngit mv path/to/original_main_temp.go path/to/original.go\ngit commit -m \"temp: rename original_main_temp.go back to original.go\"\n\n# 7. Cleanup\ngit branch -d temp-split-SUFFIX\n```\n\n### Content extraction\n\nAfter the git dance, both files contain the full original content. Now trim them:\n\n1. Write a python helper script that extracts specific line ranges from a file (for the new file) and removes those same ranges (for the original). This is much faster and less error-prone than manual editing.\n2. Run `goimports -local <module_path> -w` on both files to fix imports.\n3. If `goimports` resolves aliased imports incorrectly (e.g., `util_log`, `mimir_storage`, `promcfg`), fix them manually. This is common for packages with custom import aliases.\n4. Run `go build ./path/to/package/...` to verify compilation.\n5. Commit the trimmed files: `git commit -m \"split: trim new_file.go to <description> code only\"`\n\n### Gotchas learned from experience\n\n- **goimports resolves wrong packages**: When the codebase has aliased imports like `util_log \"pkg/util/log\"` or `mimir_storage \"pkg/storage\"`, `goimports` may resolve to a different package with the same base name (e.g., otel's `exemplar` instead of prometheus's `exemplar`). Always check the import block after running goimports.\n- **Shared types across split boundaries**: Types like context keys or request state structs used by multiple split files should go in the file where they are primarily defined. They're accessible from other files in the same package.\n- **The rename/rename conflict is essential**: A simple modify-on-one-side + rename-on-other-side does NOT create a conflict — git auto-merges it by following the rename, and you lose the original file. You MUST rename on BOTH sides to force the conflict.\n- **Test files don't need splitting**: Tests in `_test.go` files work across all files in the same package.\n- **Process largest extractions first**: This keeps the original file shrinking progressively and makes line number tracking easier.\n\n## Phase 3: Verify\n\nAfter all splits are done:\n\n```bash\n# Build\ngo build ./path/to/package/...\n\n# Run tests\ngo test ./path/to/package/... -count=1 -short\n\n# Verify history for each new file\nfor f in new_file1 new_file2 ...; do\n  echo \"=== $f ===\"\n  git log --follow --oneline \"path/to/${f}.go\" | tail -3\ndone\n```\n\nEach new file should show the full commit history from before the split.\n\n### Per-declaration content hash verification\n\nUse `tools/split-file-verify` to prove that every declaration was moved intact. The tool parses Go files using the AST, extracts every top-level declaration (functions, methods, types, var/const blocks), and outputs a sorted TSV of `name \\t sha256_hash`.\n\n```bash\n# Build the tool\ngo build -o /tmp/split-file-verify ./tools/split-file-verify\n\n# Hash every declaration in the original file (from the base commit)\ngit show <base-commit>:path/to/original.go > /tmp/original.go\n/tmp/split-file-verify /tmp/original.go > /tmp/original_decls.tsv\n\n# Hash every declaration across all split files\n/tmp/split-file-verify path/to/file1.go path/to/file2.go ... > /tmp/split_decls.tsv\n\n# Compare — should produce no output if everything matches\ndiff /tmp/original_decls.tsv /tmp/split_decls.tsv\n```\n\nIf `diff` produces no output, every declaration has the exact same content in the split files as in the original. Post this as a PR comment so reviewers can verify without reading every line.\n","tools/benchmark-query-engine/README.md":"`benchmark-query-engine` runs the streaming PromQL engine benchmarks and captures peak memory utilisation of the benchmark process.\n\nEach benchmark is run in a separate process to provide some kind of guarantee that the memory utilisation is not affected by other benchmarks.\n\nAn ingester is started in the `benchmark-query-engine` process (ie. not the benchmark process) to ensure the TSDB does not skew results.\n\nPeak memory utilisation is the high-water mark of the benchmark process' resident set size (RSS), reported in the last column of each benchmark line as `B`. On macOS this is taken from the `Rusage` returned when the benchmark process exits. On Linux that value would include the peak RSS of the `benchmark-query-engine` process itself (including the ingester's data), so the benchmark process reports its own peak RSS from `/proc/self/status` instead. This is the peak over all iterations of the benchmark, and a benchmark runs more iterations when each query is faster. To compare the peak memory utilisation of two versions whose queries take different times, run both with the same number of iterations, for example with `-benchtime=10x`.\n\nFor the Mimir engine, each benchmark line also includes `estimated-peak-B/op`: the mean peak memory consumption that the memory consumption tracker estimates for each query. This is the value that per-query memory limits use. It does not include memory that the tracker does not count, so it can be much lower than the peak RSS.\n\nResults from `benchmark-query-engine` can be summarised with `benchstat`, as well as [`compare.sh`](./compare.sh).\n\nUsage:\n\n- `go run .`: run all benchmarks once and capture peak memory utilisation\n- `go run . -list`: print all available benchmarks\n- `go run . -bench=abc`: run all benchmarks with names matching regex `abc`\n- `go run . -count=X`: run all benchmarks X times\n- `go run . -bench=abc -count=X`: run all benchmarks with names matching regex `abc` X times\n- `go run . -start-ingester`: start ingester and wait (run no benchmarks)\n- `go run . -use-existing-ingester=localhost:1234`: use existing ingester started with `-start-ingester` to reduce startup time\n","tools/README.md":"Scripts based on https://github.com/weaveworks/build-tools\n","tools/check-for-disabled-but-supported-mqe-test-cases/README.md":"This tool checks for upstream test cases that have been disabled but are now supported by MQE.\n\nSee [these docs](../../pkg/streamingpromql/testdata/upstream/README.md) for more information.\n\nRun this tool with `go run .` in the `check-for-disabled-but-supported-mqe-test-cases` directory.\n","tools/copyblocks/README.md":"# copyblocks\n\n> [!WARNING]\n> **Deprecated:** the standalone `copyblocks` tool is deprecated and will be removed in a future release.\n> Use [`mimirtool blocks copy`](../../cmd/mimirtool) instead.\n\nThis program can copy Mimir blocks between two buckets or from a bucket to a backfill destination. Its documentation has moved to [`docs/internal/tools/copyblocks.md`](../../docs/internal/tools/copyblocks.md).\n","pkg/CLAUDE.md":"../docs/internal/contributing/design-patterns-and-conventions.md","integration/CLAUDE.md":"../docs/internal/contributing/how-integration-tests-work.md","docs/CLAUDE.md":"internal/contributing/how-to-write-documentation.md","tools/copyprefix/README.md":"# copyprefix\n\nThis program copies objects by prefix between two buckets. If your infrastructure is largely on a single object storage service their respective CLI tool may be more convenient to use.\n\nBy default, copying will be attempted server-side if both the source and destination specify the same object storage service. If the buckets are on different object storage services, or if `--client-side-copy` is passed, then the copy will be performed client side.\n\nThe currently supported services are Amazon Simple Storage Service (S3 and S3-compatible), Azure Blob Storage (ABS), and Google Cloud Storage (GCS).\n\n## Features\n\n- Specify which prefix to copy from the source bucket with `--source-prefix`. The default source prefix is the empty string, which copies everything\n- The source prefix on objects copied to the destination can be replaced with a different prefix by providing `--destination-prefix`\n- Log what would be copied without actually copying anything with `--dry-run`\n- Skip overwrites (as determined by a listing on the destination, so it is only best effort) by specifying `--skip-overwrites`\n\n## Running\n\nRun `go build` in this directory to build the program. Then, use an example below as a guide.\n\n### Example for Google Cloud Storage\n\n```bash\n./copyprefix \\\n  --source.backend gcs \\\n  --destination.backend gcs \\\n  --gcs.source.bucket-name <source bucket name> \\\n  --gcs.destination.bucket-name <destination bucket name> \\\n  --source-prefix tenant1 \\\n  --destination-prefix tenant2 \\\n  --dry-run\n```\n\n### Example for Azure Blob Storage\n\n```bash\n./copyprefix \\\n  --source.backend azure \\\n  --destination.backend azure \\\n  --azure.source.container-name <source container name> \\\n  --azure.source.account-name <source account name> \\\n  --azure.source.account-key <source account key> \\\n  --azure.destination.container-name <destination container name> \\\n  --azure.destination.account-name <destination account name> \\\n  --azure.destination.account-key <destination account key> \\\n  --source-prefix rules \\\n  --skip-overwrites \\\n  --dry-run\n```\n\n### Example for Amazon Simple Storage Service\n\nThe destination is called to intiate the server-side copy which may require setting up additional permissions for the copy to have access the source bucket.\nConsider passing `--client-side-copy` to avoid having to deal with that.\n\n```bash\n./copyprefix \\\n  --source.backend s3 \\\n  --destination.backend s3 \\\n  --s3.source.bucket-name <source bucket name> \\\n  --s3.source.access-key-id <source access key id> \\\n  --s3.source.secret-access-key <source secret access key> \\\n  --s3.source.endpoint <source endpoint> \\\n  --s3.destination.bucket-name <destination bucket name> \\\n  --s3.destination.access-key-id <destination access key id> \\\n  --s3.destination.secret-access-key <destination secret access key> \\\n  --s3.destination.endpoint <destination endpoint> \\\n  --source-prefix tenant2 \\\n  --dry-run\n```\n\n### Example for copying between different providers\n\nCombine the relevant source and destination configuration options using the above examples as a guide.\nFor instance, to copy from S3 to ABS:\n\n```bash\n./copyprefix \\\n  --source.backend s3 \\\n  --destination.backend azure \\\n  --s3.source.bucket-name <source bucket name> \\\n  --s3.source.access-key-id <source access key id> \\\n  --s3.source.secret-access-key <source secret access key> \\\n  --s3.source.endpoint <source endpoint> \\\n  --azure.destination.container-name <destination container name> \\\n  --azure.destination.account-name <destination account name> \\\n  --azure.destination.account-key <destination account key> \\\n  --source-prefix tenant3 \\\n  --dry-run\n```\n","tools/decode-protobuf-query-result/README.md":"# Purpose\n\nTo decode PromQL query results encoded in Protobuf format.\n\nUse case: to query and print native histograms in their raw format instead\nof the simplified format in the default JSON response. In particular to get\nschema number, reset hint, spans, etc, in other words the raw samples that\nPromQL produced.\n\n# How to use\n\nMake a query using curl (or some other tool) and make sure to:\n\n- use the header `-H \"Accept: application/vnd.mimir.queryresponse+protobuf\"`,\n- optionally use `-H \"Cache-Control: no-store\"` to avoid caches,\n- save the result in a file,\n- verify that the HTTP response was 2xx.\n\nFor example\n\n```sh\n$ curl -G -H \"Accept: application/vnd.mimir.queryresponse+protobuf\" -H \"X-Scope-OrgId: 1\" http://localhost:8080/prometheus/api/v1/query --data-urlencode 'query=foo{bar=\"baz\"}[6m]' --data-urlencode 'time=1759932075' -o out.proto\n % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  1315  100  1315    0     0  17870      0 --:--:-- --:--:-- --:--:-- 18013\n\n$ go run . out.proto\nDecoding out.proto as matrix\nStream 0, labels foo{bar=\"baz\"}:\n  Timestamp: 1759931725000, Histogram: &FloatHistogram{Count:0,Sum:0,Schema:0,ZeroThreshold:0,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{},PositiveBuckets:[],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931740000, Histogram: &FloatHistogram{Count:2,Sum:2.2885222e+07,Schema:3,ZeroThreshold:1e-128,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{BucketSpan{Offset:187,Length:3,},},PositiveBuckets:[1 1 0],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931935000, Histogram: &FloatHistogram{Count:0,Sum:0,Schema:0,ZeroThreshold:0,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{},PositiveBuckets:[],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931950000, Histogram: &FloatHistogram{Count:2,Sum:2.4272461e+07,Schema:3,ZeroThreshold:1e-128,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{BucketSpan{Offset:186,Length:1,},BucketSpan{Offset:3,Length:2,},},PositiveBuckets:[1 1 0],CounterResetHint:0,CustomValues:[],}\n```\n\nRun this command with the filename as the argument and enjoy.\n","AGENTS.md":"@docs/internal/contributing/README.md\n","tools/delete-objects/README.md":"# delete-objects Documentation\n\nPath: `tools/delete-objects/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/delete-objects/README.md)","tools/diagram/readme.md":"# diagram Documentation\n\nPath: `tools/diagram/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/diagram/readme.md)","tools/disable-failing-upstream-promql-tests/README.md":"# disable-failing-upstream-promql-tests Documentation\n\nPath: `tools/disable-failing-upstream-promql-tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/disable-failing-upstream-promql-tests/README.md)","tools/grpcurl-query-ingesters/README.md":"# grpcurl-query-ingesters Documentation\n\nPath: `tools/grpcurl-query-ingesters/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/README.md)","tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json":"# Grpcurl-query-ingesters Skill\n\nPath: `tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json)","tools/grpcurl-query-store-gateways/README.md":"# grpcurl-query-store-gateways Documentation\n\nPath: `tools/grpcurl-query-store-gateways/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/README.md)","tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json":"# Grpcurl-query-store-gateways Skill\n\nPath: `tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json)","tools/kafkatool/README.md":"# kafkatool Documentation\n\nPath: `tools/kafkatool/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/kafkatool/README.md)","tools/listblocks/README.md":"# listblocks Documentation\n\nPath: `tools/listblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/listblocks/README.md)","tools/mark-blocks/README.md":"# mark-blocks Documentation\n\nPath: `tools/mark-blocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/mark-blocks/README.md)","tools/markblocks/README.md":"# markblocks Documentation\n\nPath: `tools/markblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/markblocks/README.md)","tools/node-gen/README.md":"# node-gen Documentation\n\nPath: `tools/node-gen/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/node-gen/README.md)","tools/promql-generator/README.md":"# promql-generator Documentation\n\nPath: `tools/promql-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/README.md)","tools/promql-generator/sample_series.json":"# Promql-generator Skill\n\nPath: `tools/promql-generator/sample_series.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/sample_series.json)","tools/query-bucket-index/README.md":"# query-bucket-index Documentation\n\nPath: `tools/query-bucket-index/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/query-bucket-index/README.md)","tools/splitblocks/README.md":"# splitblocks Documentation\n\nPath: `tools/splitblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/splitblocks/README.md)","tools/sync-upstream-promql-tests/README.md":"# sync-upstream-promql-tests Documentation\n\nPath: `tools/sync-upstream-promql-tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/sync-upstream-promql-tests/README.md)","tools/tsdb-gaps/README.md":"# tsdb-gaps Documentation\n\nPath: `tools/tsdb-gaps/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-gaps/README.md)","tools/tsdb-index-header/README.md":"# tsdb-index-header Documentation\n\nPath: `tools/tsdb-index-header/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-index-header/README.md)","tools/undelete-blocks/README.md":"# undelete-blocks Documentation\n\nPath: `tools/undelete-blocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/undelete-blocks/README.md)","development/tools/upload-block/README.md":"# upload-block Documentation\n\nPath: `development/tools/upload-block/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/development/tools/upload-block/README.md)","docs/internal/tools/compaction-planner.md":"# Tools Skill\n\nPath: `docs/internal/tools/compaction-planner.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/compaction-planner.md)","docs/internal/tools/copyblocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/copyblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/copyblocks.md)","docs/internal/tools/list-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/list-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-blocks.md)","docs/internal/tools/list-deduplicated-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/list-deduplicated-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-deduplicated-blocks.md)","docs/internal/tools/mark-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/mark-blocks.md)","docs/internal/tools/query-step-alignment-analysis.md":"# Tools Skill\n\nPath: `docs/internal/tools/query-step-alignment-analysis.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/query-step-alignment-analysis.md)","docs/internal/tools/splitblocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/splitblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/splitblocks.md)","docs/internal/tools/trafficdump.md":"# Tools Skill\n\nPath: `docs/internal/tools/trafficdump.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/trafficdump.md)","docs/internal/tools/tsdb-tools.md":"# Tools Skill\n\nPath: `docs/internal/tools/tsdb-tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/tsdb-tools.md)","docs/internal/tools/ulidtime.md":"# Tools Skill\n\nPath: `docs/internal/tools/ulidtime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/ulidtime.md)","docs/internal/tools/undelete-blocks.md":"# Tools Skill\n\nPath: `docs/internal/tools/undelete-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/undelete-blocks.md)","docs/sources/mimir/references/_index.md":"# References Skill\n\nPath: `docs/sources/mimir/references/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/_index.md)","docs/sources/mimir/references/glossary.md":"# References Skill\n\nPath: `docs/sources/mimir/references/glossary.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/glossary.md)","operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md":"# resolve-config Documentation\n\nPath: `operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md)","pkg/mimirtool/commands/testdata/alertmanager_config.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/alertmanager_config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/alertmanager_config.yaml)","pkg/mimirtool/commands/testdata/apiserver.json":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/apiserver.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/apiserver.json)","pkg/mimirtool/commands/testdata/prometheus_rules.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/prometheus_rules.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/prometheus_rules.yaml)","pkg/mimirtool/rules/testdata/basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace.yaml)","pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml)","pkg/mimirtool/rules/testdata/loki_basic.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic.yaml)","pkg/mimirtool/rules/testdata/loki_basic_failure.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic_failure.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_failure.yaml)","pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml)","pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml)","pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml)","pkg/mimirtool/rules/testdata/multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/multiple_namespace.yaml)","docs/sources/mimir/manage/tools/_index.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/_index.md)","docs/sources/mimir/manage/tools/continuous-test.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/continuous-test.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/continuous-test.md)","docs/sources/mimir/manage/tools/listblocks.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/listblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/listblocks.md)","docs/sources/mimir/manage/tools/mark-blocks.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mark-blocks.md)","docs/sources/mimir/manage/tools/mimirtool.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mimirtool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mimirtool.md)","docs/sources/mimir/manage/tools/query-tee.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/query-tee.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/query-tee.md)","docs/sources/mimir/manage/tools/tenant-injector.md":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/tenant-injector.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/tenant-injector.md)","docs/sources/mimir/references/architecture/_index.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/_index.md)","docs/sources/mimir/references/architecture/binary-index-header.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/binary-index-header.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/binary-index-header.md)","docs/sources/mimir/references/architecture/key-value-store.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/key-value-store.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/key-value-store.md)","docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md)","docs/sources/mimir/references/architecture/mimir-query-engine.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/mimir-query-engine.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/mimir-query-engine.md)","docs/sources/mimir/references/architecture/ports.md":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/ports.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/ports.md)","docs/sources/mimir/references/http-api/_index.md":"# Http-api Skill\n\nPath: `docs/sources/mimir/references/http-api/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/http-api/_index.md)","docs/sources/mimir/references/learning-resources/_index.md":"# Learning-resources Skill\n\nPath: `docs/sources/mimir/references/learning-resources/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/learning-resources/_index.md)","pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml":"# Runtimeconfig Skill\n\nPath: `pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml)","pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml":"# Runtimeconfig Skill\n\nPath: `pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml)","pkg/mimirtool/commands/testdata/template/alert_data1.json":"# Template Skill\n\nPath: `pkg/mimirtool/commands/testdata/template/alert_data1.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data1.json)","pkg/mimirtool/commands/testdata/template/alert_data2.json":"# Template Skill\n\nPath: `pkg/mimirtool/commands/testdata/template/alert_data2.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data2.json)","vendor/github.com/google/gnostic-models/extensions/README.md":"# extensions Documentation\n\nPath: `vendor/github.com/google/gnostic-models/extensions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/vendor/github.com/google/gnostic-models/extensions/README.md)","docs/sources/mimir/references/architecture/bucket-index/index.md":"# Bucket-index Skill\n\nPath: `docs/sources/mimir/references/architecture/bucket-index/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/bucket-index/index.md)","docs/sources/mimir/references/architecture/components/_index.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/_index.md)","docs/sources/mimir/references/architecture/components/alertmanager.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/alertmanager.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/alertmanager.md)","docs/sources/mimir/references/architecture/components/distributor.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/distributor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/distributor.md)","docs/sources/mimir/references/architecture/components/overrides-exporter.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/overrides-exporter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/overrides-exporter.md)","docs/sources/mimir/references/architecture/components/querier.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/querier.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/querier.md)","docs/sources/mimir/references/architecture/components/store-gateway.md":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/store-gateway.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/store-gateway.md)","docs/sources/mimir/references/architecture/deployment-modes/index.md":"# Deployment-modes Skill\n\nPath: `docs/sources/mimir/references/architecture/deployment-modes/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/deployment-modes/index.md)","docs/sources/mimir/references/architecture/hash-ring/index.md":"# Hash-ring Skill\n\nPath: `docs/sources/mimir/references/architecture/hash-ring/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/hash-ring/index.md)","docs/sources/mimir/references/architecture/query-sharding/index.md":"# Query-sharding Skill\n\nPath: `docs/sources/mimir/references/architecture/query-sharding/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/query-sharding/index.md)","docs/sources/mimir/references/architecture/components/block-builder/index.md":"# Block-builder Skill\n\nPath: `docs/sources/mimir/references/architecture/components/block-builder/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/block-builder/index.md)","docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md":"# Compactor-scheduler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md)","docs/sources/mimir/references/architecture/components/compactor/index.md":"# Compactor Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor/index.md)","docs/sources/mimir/references/architecture/components/ingester/index.md":"# Ingester Skill\n\nPath: `docs/sources/mimir/references/architecture/components/ingester/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ingester/index.md)","docs/sources/mimir/references/architecture/components/query-frontend/index.md":"# Query-frontend Skill\n\nPath: `docs/sources/mimir/references/architecture/components/query-frontend/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-frontend/index.md)","docs/sources/mimir/references/architecture/components/query-scheduler/index.md":"# Query-scheduler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/query-scheduler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-scheduler/index.md)","docs/sources/mimir/references/architecture/components/ruler/index.md":"# Ruler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/ruler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ruler/index.md)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"@docs/internal/contributing/README.md\n","isInternal":false,"tokens":10,"sizeBytes":38},{"name":"SKILL.md","path":".claude/skills/split-file/SKILL.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/.claude/skills/split-file/SKILL.md","title":"split-file","category":"anthropic-skill","format":"markdown","content":"---\nname: split-file\ndescription: Split a large Go file into smaller focused files while preserving git history. Use when a file is too large and needs to be broken into logical modules.\nargument-hint: [filepath]\n---\n\n# Split a Go file into multiple files preserving git history\n\nSplit the file at `$ARGUMENTS` into multiple smaller files, grouped by logical concern, while preserving `git log --follow` history for each new file.\n\n## Phase 1: Analyze\n\n1. Read the file and catalog every function, method, type, const block, and var block with their line numbers.\n2. Group them into logical categories (e.g., push path, query path, TSDB lifecycle, HTTP handlers, etc.).\n3. Check existing files in the same package to understand naming conventions and avoid conflicts.\n4. Propose the split to the user: list each new file, what goes in it, and approximate line count. Keep the original file for initialization, config, types, and lifecycle. Aim for at least 4 files.\n5. Wait for user approval before proceeding.\n\n## Phase 2: Split with history preservation\n\nFor each new file, repeat this sequence. Process files from largest to smallest.\n\n### Git dance (creates the new file with full history)\n\n```bash\n# 1. Create temp branch from current branch\ngit checkout -b temp-split-SUFFIX $CURRENT_BRANCH\n\n# 2. Rename original to new filename\ngit mv path/to/original.go path/to/new_file.go\ngit commit -m \"temp: rename original.go to new_file.go\"\n\n# 3. Go back to working branch\ngit checkout $CURRENT_BRANCH\n\n# 4. Rename original to a temp name (creates rename/rename conflict)\ngit mv path/to/original.go path/to/original_main_temp.go\ngit commit -m \"temp: rename original.go to original_main_temp.go\"\n\n# 5. Merge — this triggers a CONFLICT (rename/rename), which is what we want\ngit merge temp-split-SUFFIX --no-commit\ngit checkout --ours path/to/original_main_temp.go\ngit checkout --theirs path/to/new_file.go\ngit add path/to/original_main_temp.go path/to/new_file.go\ngit rm --cached path/to/original.go 2>/dev/null\ngit commit -m \"split: create new_file.go from original.go (preserving history)\"\n\n# 6. Rename temp back to original\ngit mv path/to/original_main_temp.go path/to/original.go\ngit commit -m \"temp: rename original_main_temp.go back to original.go\"\n\n# 7. Cleanup\ngit branch -d temp-split-SUFFIX\n```\n\n### Content extraction\n\nAfter the git dance, both files contain the full original content. Now trim them:\n\n1. Write a python helper script that extracts specific line ranges from a file (for the new file) and removes those same ranges (for the original). This is much faster and less error-prone than manual editing.\n2. Run `goimports -local <module_path> -w` on both files to fix imports.\n3. If `goimports` resolves aliased imports incorrectly (e.g., `util_log`, `mimir_storage`, `promcfg`), fix them manually. This is common for packages with custom import aliases.\n4. Run `go build ./path/to/package/...` to verify compilation.\n5. Commit the trimmed files: `git commit -m \"split: trim new_file.go to <description> code only\"`\n\n### Gotchas learned from experience\n\n- **goimports resolves wrong packages**: When the codebase has aliased imports like `util_log \"pkg/util/log\"` or `mimir_storage \"pkg/storage\"`, `goimports` may resolve to a different package with the same base name (e.g., otel's `exemplar` instead of prometheus's `exemplar`). Always check the import block after running goimports.\n- **Shared types across split boundaries**: Types like context keys or request state structs used by multiple split files should go in the file where they are primarily defined. They're accessible from other files in the same package.\n- **The rename/rename conflict is essential**: A simple modify-on-one-side + rename-on-other-side does NOT create a conflict — git auto-merges it by following the rename, and you lose the original file. You MUST rename on BOTH sides to force the conflict.\n- **Test files don't need splitting**: Tests in `_test.go` files work across all files in the same package.\n- **Process largest extractions first**: This keeps the original file shrinking progressively and makes line number tracking easier.\n\n## Phase 3: Verify\n\nAfter all splits are done:\n\n```bash\n# Build\ngo build ./path/to/package/...\n\n# Run tests\ngo test ./path/to/package/... -count=1 -short\n\n# Verify history for each new file\nfor f in new_file1 new_file2 ...; do\n  echo \"=== $f ===\"\n  git log --follow --oneline \"path/to/${f}.go\" | tail -3\ndone\n```\n\nEach new file should show the full commit history from before the split.\n\n### Per-declaration content hash verification\n\nUse `tools/split-file-verify` to prove that every declaration was moved intact. The tool parses Go files using the AST, extracts every top-level declaration (functions, methods, types, var/const blocks), and outputs a sorted TSV of `name \\t sha256_hash`.\n\n```bash\n# Build the tool\ngo build -o /tmp/split-file-verify ./tools/split-file-verify\n\n# Hash every declaration in the original file (from the base commit)\ngit show <base-commit>:path/to/original.go > /tmp/original.go\n/tmp/split-file-verify /tmp/original.go > /tmp/original_decls.tsv\n\n# Hash every declaration across all split files\n/tmp/split-file-verify path/to/file1.go path/to/file2.go ... > /tmp/split_decls.tsv\n\n# Compare — should produce no output if everything matches\ndiff /tmp/original_decls.tsv /tmp/split_decls.tsv\n```\n\nIf `diff` produces no output, every declaration has the exact same content in the split files as in the original. Post this as a PR comment so reviewers can verify without reading every line.\n","frontmatter":{"name":"split-file","description":"Split a large Go file into smaller focused files while preserving git history. Use when a file is too large and needs to be broken into logical modules.","argument-hint":["filepath"]},"isInternal":false,"tokens":1312,"sizeBytes":5555},{"name":"compaction-planner.md","path":"docs/internal/tools/compaction-planner.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/compaction-planner.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/compaction-planner.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/compaction-planner.md)","tokens":300,"sizeBytes":190},{"name":"copyblocks.md","path":"docs/internal/tools/copyblocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/copyblocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/copyblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/copyblocks.md)","tokens":300,"sizeBytes":174},{"name":"list-blocks.md","path":"docs/internal/tools/list-blocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-blocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/list-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-blocks.md)","tokens":300,"sizeBytes":176},{"name":"list-deduplicated-blocks.md","path":"docs/internal/tools/list-deduplicated-blocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-deduplicated-blocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/list-deduplicated-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-deduplicated-blocks.md)","tokens":300,"sizeBytes":202},{"name":"mark-blocks.md","path":"docs/internal/tools/mark-blocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/mark-blocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/mark-blocks.md)","tokens":300,"sizeBytes":176},{"name":"query-step-alignment-analysis.md","path":"docs/internal/tools/query-step-alignment-analysis.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/query-step-alignment-analysis.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/query-step-alignment-analysis.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/query-step-alignment-analysis.md)","tokens":300,"sizeBytes":212},{"name":"splitblocks.md","path":"docs/internal/tools/splitblocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/splitblocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/splitblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/splitblocks.md)","tokens":300,"sizeBytes":176},{"name":"trafficdump.md","path":"docs/internal/tools/trafficdump.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/trafficdump.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/trafficdump.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/trafficdump.md)","tokens":300,"sizeBytes":176},{"name":"tsdb-tools.md","path":"docs/internal/tools/tsdb-tools.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/tsdb-tools.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/tsdb-tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/tsdb-tools.md)","tokens":300,"sizeBytes":174},{"name":"ulidtime.md","path":"docs/internal/tools/ulidtime.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/ulidtime.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/ulidtime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/ulidtime.md)","tokens":300,"sizeBytes":170},{"name":"undelete-blocks.md","path":"docs/internal/tools/undelete-blocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/undelete-blocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/internal/tools/undelete-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/undelete-blocks.md)","tokens":300,"sizeBytes":184},{"name":"_index.md","path":"docs/sources/mimir/manage/tools/_index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/_index.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/_index.md)","tokens":300,"sizeBytes":190},{"name":"continuous-test.md","path":"docs/sources/mimir/manage/tools/continuous-test.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/continuous-test.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/continuous-test.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/continuous-test.md)","tokens":300,"sizeBytes":208},{"name":"listblocks.md","path":"docs/sources/mimir/manage/tools/listblocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/listblocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/listblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/listblocks.md)","tokens":300,"sizeBytes":198},{"name":"mark-blocks.md","path":"docs/sources/mimir/manage/tools/mark-blocks.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mark-blocks.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mark-blocks.md)","tokens":300,"sizeBytes":200},{"name":"mimirtool.md","path":"docs/sources/mimir/manage/tools/mimirtool.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mimirtool.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mimirtool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mimirtool.md)","tokens":300,"sizeBytes":196},{"name":"query-tee.md","path":"docs/sources/mimir/manage/tools/query-tee.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/query-tee.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/query-tee.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/query-tee.md)","tokens":300,"sizeBytes":196},{"name":"tenant-injector.md","path":"docs/sources/mimir/manage/tools/tenant-injector.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/tenant-injector.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/tenant-injector.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/tenant-injector.md)","tokens":300,"sizeBytes":208},{"name":"_index.md","path":"docs/sources/mimir/references/_index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/_index.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `docs/sources/mimir/references/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/_index.md)","tokens":300,"sizeBytes":191},{"name":"_index.md","path":"docs/sources/mimir/references/architecture/_index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/_index.md","title":"Architecture Skill","category":"anthropic-skill","format":"markdown","content":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/_index.md)","tokens":300,"sizeBytes":219},{"name":"binary-index-header.md","path":"docs/sources/mimir/references/architecture/binary-index-header.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/binary-index-header.md","title":"Architecture Skill","category":"anthropic-skill","format":"markdown","content":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/binary-index-header.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/binary-index-header.md)","tokens":300,"sizeBytes":245},{"name":"index.md","path":"docs/sources/mimir/references/architecture/bucket-index/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/bucket-index/index.md","title":"Bucket-index Skill","category":"anthropic-skill","format":"markdown","content":"# Bucket-index Skill\n\nPath: `docs/sources/mimir/references/architecture/bucket-index/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/bucket-index/index.md)","tokens":300,"sizeBytes":243},{"name":"_index.md","path":"docs/sources/mimir/references/architecture/components/_index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/_index.md","title":"Components Skill","category":"anthropic-skill","format":"markdown","content":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/_index.md)","tokens":300,"sizeBytes":239},{"name":"alertmanager.md","path":"docs/sources/mimir/references/architecture/components/alertmanager.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/alertmanager.md","title":"Components Skill","category":"anthropic-skill","format":"markdown","content":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/alertmanager.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/alertmanager.md)","tokens":300,"sizeBytes":251},{"name":"index.md","path":"docs/sources/mimir/references/architecture/components/block-builder/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/block-builder/index.md","title":"Block-builder Skill","category":"anthropic-skill","format":"markdown","content":"# Block-builder Skill\n\nPath: `docs/sources/mimir/references/architecture/components/block-builder/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/block-builder/index.md)","tokens":300,"sizeBytes":268},{"name":"index.md","path":"docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md","title":"Compactor-scheduler Skill","category":"anthropic-skill","format":"markdown","content":"# Compactor-scheduler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md)","tokens":300,"sizeBytes":286},{"name":"index.md","path":"docs/sources/mimir/references/architecture/components/compactor/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor/index.md","title":"Compactor Skill","category":"anthropic-skill","format":"markdown","content":"# Compactor Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor/index.md)","tokens":300,"sizeBytes":256},{"name":"distributor.md","path":"docs/sources/mimir/references/architecture/components/distributor.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/distributor.md","title":"Components Skill","category":"anthropic-skill","format":"markdown","content":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/distributor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/distributor.md)","tokens":300,"sizeBytes":249},{"name":"index.md","path":"docs/sources/mimir/references/architecture/components/ingester/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ingester/index.md","title":"Ingester Skill","category":"anthropic-skill","format":"markdown","content":"# Ingester Skill\n\nPath: `docs/sources/mimir/references/architecture/components/ingester/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ingester/index.md)","tokens":300,"sizeBytes":253},{"name":"overrides-exporter.md","path":"docs/sources/mimir/references/architecture/components/overrides-exporter.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/overrides-exporter.md","title":"Components Skill","category":"anthropic-skill","format":"markdown","content":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/overrides-exporter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/overrides-exporter.md)","tokens":300,"sizeBytes":263},{"name":"querier.md","path":"docs/sources/mimir/references/architecture/components/querier.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/querier.md","title":"Components Skill","category":"anthropic-skill","format":"markdown","content":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/querier.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/querier.md)","tokens":300,"sizeBytes":241},{"name":"index.md","path":"docs/sources/mimir/references/architecture/components/query-frontend/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-frontend/index.md","title":"Query-frontend Skill","category":"anthropic-skill","format":"markdown","content":"# Query-frontend Skill\n\nPath: `docs/sources/mimir/references/architecture/components/query-frontend/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-frontend/index.md)","tokens":300,"sizeBytes":271},{"name":"index.md","path":"docs/sources/mimir/references/architecture/components/query-scheduler/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-scheduler/index.md","title":"Query-scheduler Skill","category":"anthropic-skill","format":"markdown","content":"# Query-scheduler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/query-scheduler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/query-scheduler/index.md)","tokens":300,"sizeBytes":274},{"name":"index.md","path":"docs/sources/mimir/references/architecture/components/ruler/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ruler/index.md","title":"Ruler Skill","category":"anthropic-skill","format":"markdown","content":"# Ruler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/ruler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/ruler/index.md)","tokens":300,"sizeBytes":244},{"name":"store-gateway.md","path":"docs/sources/mimir/references/architecture/components/store-gateway.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/store-gateway.md","title":"Components Skill","category":"anthropic-skill","format":"markdown","content":"# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/store-gateway.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/store-gateway.md)","tokens":300,"sizeBytes":253},{"name":"index.md","path":"docs/sources/mimir/references/architecture/deployment-modes/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/deployment-modes/index.md","title":"Deployment-modes Skill","category":"anthropic-skill","format":"markdown","content":"# Deployment-modes Skill\n\nPath: `docs/sources/mimir/references/architecture/deployment-modes/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/deployment-modes/index.md)","tokens":300,"sizeBytes":255},{"name":"index.md","path":"docs/sources/mimir/references/architecture/hash-ring/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/hash-ring/index.md","title":"Hash-ring Skill","category":"anthropic-skill","format":"markdown","content":"# Hash-ring Skill\n\nPath: `docs/sources/mimir/references/architecture/hash-ring/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/hash-ring/index.md)","tokens":300,"sizeBytes":234},{"name":"key-value-store.md","path":"docs/sources/mimir/references/architecture/key-value-store.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/key-value-store.md","title":"Architecture Skill","category":"anthropic-skill","format":"markdown","content":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/key-value-store.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/key-value-store.md)","tokens":300,"sizeBytes":237},{"name":"memberlist-and-the-gossip-protocol.md","path":"docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md","title":"Architecture Skill","category":"anthropic-skill","format":"markdown","content":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/memberlist-and-the-gossip-protocol.md)","tokens":300,"sizeBytes":275},{"name":"mimir-query-engine.md","path":"docs/sources/mimir/references/architecture/mimir-query-engine.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/mimir-query-engine.md","title":"Architecture Skill","category":"anthropic-skill","format":"markdown","content":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/mimir-query-engine.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/mimir-query-engine.md)","tokens":300,"sizeBytes":243},{"name":"ports.md","path":"docs/sources/mimir/references/architecture/ports.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/ports.md","title":"Architecture Skill","category":"anthropic-skill","format":"markdown","content":"# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/ports.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/ports.md)","tokens":300,"sizeBytes":217},{"name":"index.md","path":"docs/sources/mimir/references/architecture/query-sharding/index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/query-sharding/index.md","title":"Query-sharding Skill","category":"anthropic-skill","format":"markdown","content":"# Query-sharding Skill\n\nPath: `docs/sources/mimir/references/architecture/query-sharding/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/query-sharding/index.md)","tokens":300,"sizeBytes":249},{"name":"glossary.md","path":"docs/sources/mimir/references/glossary.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/glossary.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `docs/sources/mimir/references/glossary.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/glossary.md)","tokens":300,"sizeBytes":195},{"name":"_index.md","path":"docs/sources/mimir/references/http-api/_index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/http-api/_index.md","title":"Http-api Skill","category":"anthropic-skill","format":"markdown","content":"# Http-api Skill\n\nPath: `docs/sources/mimir/references/http-api/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/http-api/_index.md)","tokens":300,"sizeBytes":207},{"name":"_index.md","path":"docs/sources/mimir/references/learning-resources/_index.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/learning-resources/_index.md","title":"Learning-resources Skill","category":"anthropic-skill","format":"markdown","content":"# Learning-resources Skill\n\nPath: `docs/sources/mimir/references/learning-resources/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/learning-resources/_index.md)","tokens":300,"sizeBytes":237},{"name":"alertmanager_config.yaml","path":"pkg/mimirtool/commands/testdata/alertmanager_config.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/alertmanager_config.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/alertmanager_config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/alertmanager_config.yaml)","tokens":300,"sizeBytes":223},{"name":"apiserver.json","path":"pkg/mimirtool/commands/testdata/apiserver.json","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/apiserver.json","title":"Testdata Skill","category":"anthropic-skill","format":"json","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/apiserver.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/apiserver.json)","tokens":300,"sizeBytes":203},{"name":"prometheus_rules.yaml","path":"pkg/mimirtool/commands/testdata/prometheus_rules.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/prometheus_rules.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/commands/testdata/prometheus_rules.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/prometheus_rules.yaml)","tokens":300,"sizeBytes":217},{"name":"invalid.yaml","path":"pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml","title":"Runtimeconfig Skill","category":"anthropic-skill","format":"yaml","content":"# Runtimeconfig Skill\n\nPath: `pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/invalid.yaml)","tokens":300,"sizeBytes":232},{"name":"valid.yaml","path":"pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml","title":"Runtimeconfig Skill","category":"anthropic-skill","format":"yaml","content":"# Runtimeconfig Skill\n\nPath: `pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/runtimeconfig/valid.yaml)","tokens":300,"sizeBytes":228},{"name":"alert_data1.json","path":"pkg/mimirtool/commands/testdata/template/alert_data1.json","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data1.json","title":"Template Skill","category":"anthropic-skill","format":"json","content":"# Template Skill\n\nPath: `pkg/mimirtool/commands/testdata/template/alert_data1.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data1.json)","tokens":300,"sizeBytes":225},{"name":"alert_data2.json","path":"pkg/mimirtool/commands/testdata/template/alert_data2.json","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data2.json","title":"Template Skill","category":"anthropic-skill","format":"json","content":"# Template Skill\n\nPath: `pkg/mimirtool/commands/testdata/template/alert_data2.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/commands/testdata/template/alert_data2.json)","tokens":300,"sizeBytes":225},{"name":"basic_namespace_repeated.yaml","path":"pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace_repeated.yaml)","tokens":300,"sizeBytes":227},{"name":"basic_namespace.yaml","path":"pkg/mimirtool/rules/testdata/basic_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/basic_namespace.yaml)","tokens":300,"sizeBytes":209},{"name":"loki_basic_failure.yaml","path":"pkg/mimirtool/rules/testdata/loki_basic_failure.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_failure.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic_failure.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_failure.yaml)","tokens":300,"sizeBytes":215},{"name":"loki_basic_namespace.yaml","path":"pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic_namespace.yaml)","tokens":300,"sizeBytes":219},{"name":"loki_basic.yaml","path":"pkg/mimirtool/rules/testdata/loki_basic.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_basic.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_basic.yaml)","tokens":300,"sizeBytes":199},{"name":"loki_multiple_namespace.yaml","path":"pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/loki_multiple_namespace.yaml)","tokens":300,"sizeBytes":225},{"name":"mimir_federated_rules.yaml","path":"pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/mimir_federated_rules.yaml)","tokens":300,"sizeBytes":221},{"name":"multiple_namespace.yaml","path":"pkg/mimirtool/rules/testdata/multiple_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/multiple_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/mimirtool/rules/testdata/multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/mimirtool/rules/testdata/multiple_namespace.yaml)","tokens":300,"sizeBytes":215},{"name":"download-chunks-from-ingesters-query.json","path":"tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json","title":"Grpcurl-query-ingesters Skill","category":"anthropic-skill","format":"json","content":"# Grpcurl-query-ingesters Skill\n\nPath: `tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/download-chunks-from-ingesters-query.json)","tokens":300,"sizeBytes":268},{"name":"download-chunks-from-store-gateways-query.json","path":"tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json","title":"Grpcurl-query-store-gateways Skill","category":"anthropic-skill","format":"json","content":"# Grpcurl-query-store-gateways Skill\n\nPath: `tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/download-chunks-from-store-gateways-query.json)","tokens":300,"sizeBytes":293},{"name":"sample_series.json","path":"tools/promql-generator/sample_series.json","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/sample_series.json","title":"Promql-generator Skill","category":"anthropic-skill","format":"json","content":"# Promql-generator Skill\n\nPath: `tools/promql-generator/sample_series.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/sample_series.json)","tokens":300,"sizeBytes":201},{"name":"CLAUDE.md","path":"docs/CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/CLAUDE.md","title":"docs - Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"internal/contributing/how-to-write-documentation.md","isInternal":false,"tokens":10,"sizeBytes":51},{"name":"CLAUDE.md","path":"integration/CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/integration/CLAUDE.md","title":"integration - Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"../docs/internal/contributing/how-integration-tests-work.md","isInternal":false,"tokens":12,"sizeBytes":59},{"name":"CLAUDE.md","path":"pkg/CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/pkg/CLAUDE.md","title":"pkg - Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"../docs/internal/contributing/design-patterns-and-conventions.md","isInternal":false,"tokens":13,"sizeBytes":64},{"name":"README.md","path":"development/tools/upload-block/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/development/tools/upload-block/README.md","title":"upload-block Documentation","category":"plugin-manifest","format":"markdown","content":"# upload-block Documentation\n\nPath: `development/tools/upload-block/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/development/tools/upload-block/README.md)","tokens":300,"sizeBytes":203},{"name":"README.md","path":"operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md","title":"resolve-config Documentation","category":"plugin-manifest","format":"markdown","content":"# resolve-config Documentation\n\nPath: `operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/operations/compare-helm-with-jsonnet/plugins/resolve-config/README.md)","tokens":300,"sizeBytes":263},{"name":"README.md","path":"tools/benchmark-query-engine/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/benchmark-query-engine/README.md","title":"benchmark-query-engine Documentation","category":"plugin-manifest","format":"markdown","content":"`benchmark-query-engine` runs the streaming PromQL engine benchmarks and captures peak memory utilisation of the benchmark process.\n\nEach benchmark is run in a separate process to provide some kind of guarantee that the memory utilisation is not affected by other benchmarks.\n\nAn ingester is started in the `benchmark-query-engine` process (ie. not the benchmark process) to ensure the TSDB does not skew results.\n\nPeak memory utilisation is the high-water mark of the benchmark process' resident set size (RSS), reported in the last column of each benchmark line as `B`. On macOS this is taken from the `Rusage` returned when the benchmark process exits. On Linux that value would include the peak RSS of the `benchmark-query-engine` process itself (including the ingester's data), so the benchmark process reports its own peak RSS from `/proc/self/status` instead. This is the peak over all iterations of the benchmark, and a benchmark runs more iterations when each query is faster. To compare the peak memory utilisation of two versions whose queries take different times, run both with the same number of iterations, for example with `-benchtime=10x`.\n\nFor the Mimir engine, each benchmark line also includes `estimated-peak-B/op`: the mean peak memory consumption that the memory consumption tracker estimates for each query. This is the value that per-query memory limits use. It does not include memory that the tracker does not count, so it can be much lower than the peak RSS.\n\nResults from `benchmark-query-engine` can be summarised with `benchstat`, as well as [`compare.sh`](./compare.sh).\n\nUsage:\n\n- `go run .`: run all benchmarks once and capture peak memory utilisation\n- `go run . -list`: print all available benchmarks\n- `go run . -bench=abc`: run all benchmarks with names matching regex `abc`\n- `go run . -count=X`: run all benchmarks X times\n- `go run . -bench=abc -count=X`: run all benchmarks with names matching regex `abc` X times\n- `go run . -start-ingester`: start ingester and wait (run no benchmarks)\n- `go run . -use-existing-ingester=localhost:1234`: use existing ingester started with `-start-ingester` to reduce startup time\n","isInternal":false,"tokens":470,"sizeBytes":2158},{"name":"README.md","path":"tools/check-for-disabled-but-supported-mqe-test-cases/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/check-for-disabled-but-supported-mqe-test-cases/README.md","title":"check-for-disabled-but-supported-mqe-test-cases Documentation","category":"plugin-manifest","format":"markdown","content":"This tool checks for upstream test cases that have been disabled but are now supported by MQE.\n\nSee [these docs](../../pkg/streamingpromql/testdata/upstream/README.md) for more information.\n\nRun this tool with `go run .` in the `check-for-disabled-but-supported-mqe-test-cases` directory.\n","isInternal":false,"tokens":67,"sizeBytes":289},{"name":"README.md","path":"tools/copyblocks/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/copyblocks/README.md","title":"copyblocks Documentation","category":"plugin-manifest","format":"markdown","content":"# copyblocks\n\n> [!WARNING]\n> **Deprecated:** the standalone `copyblocks` tool is deprecated and will be removed in a future release.\n> Use [`mimirtool blocks copy`](../../cmd/mimirtool) instead.\n\nThis program can copy Mimir blocks between two buckets or from a bucket to a backfill destination. Its documentation has moved to [`docs/internal/tools/copyblocks.md`](../../docs/internal/tools/copyblocks.md).\n","isInternal":false,"tokens":91,"sizeBytes":406},{"name":"README.md","path":"tools/copyprefix/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/copyprefix/README.md","title":"copyprefix Documentation","category":"plugin-manifest","format":"markdown","content":"# copyprefix\n\nThis program copies objects by prefix between two buckets. If your infrastructure is largely on a single object storage service their respective CLI tool may be more convenient to use.\n\nBy default, copying will be attempted server-side if both the source and destination specify the same object storage service. If the buckets are on different object storage services, or if `--client-side-copy` is passed, then the copy will be performed client side.\n\nThe currently supported services are Amazon Simple Storage Service (S3 and S3-compatible), Azure Blob Storage (ABS), and Google Cloud Storage (GCS).\n\n## Features\n\n- Specify which prefix to copy from the source bucket with `--source-prefix`. The default source prefix is the empty string, which copies everything\n- The source prefix on objects copied to the destination can be replaced with a different prefix by providing `--destination-prefix`\n- Log what would be copied without actually copying anything with `--dry-run`\n- Skip overwrites (as determined by a listing on the destination, so it is only best effort) by specifying `--skip-overwrites`\n\n## Running\n\nRun `go build` in this directory to build the program. Then, use an example below as a guide.\n\n### Example for Google Cloud Storage\n\n```bash\n./copyprefix \\\n  --source.backend gcs \\\n  --destination.backend gcs \\\n  --gcs.source.bucket-name <source bucket name> \\\n  --gcs.destination.bucket-name <destination bucket name> \\\n  --source-prefix tenant1 \\\n  --destination-prefix tenant2 \\\n  --dry-run\n```\n\n### Example for Azure Blob Storage\n\n```bash\n./copyprefix \\\n  --source.backend azure \\\n  --destination.backend azure \\\n  --azure.source.container-name <source container name> \\\n  --azure.source.account-name <source account name> \\\n  --azure.source.account-key <source account key> \\\n  --azure.destination.container-name <destination container name> \\\n  --azure.destination.account-name <destination account name> \\\n  --azure.destination.account-key <destination account key> \\\n  --source-prefix rules \\\n  --skip-overwrites \\\n  --dry-run\n```\n\n### Example for Amazon Simple Storage Service\n\nThe destination is called to intiate the server-side copy which may require setting up additional permissions for the copy to have access the source bucket.\nConsider passing `--client-side-copy` to avoid having to deal with that.\n\n```bash\n./copyprefix \\\n  --source.backend s3 \\\n  --destination.backend s3 \\\n  --s3.source.bucket-name <source bucket name> \\\n  --s3.source.access-key-id <source access key id> \\\n  --s3.source.secret-access-key <source secret access key> \\\n  --s3.source.endpoint <source endpoint> \\\n  --s3.destination.bucket-name <destination bucket name> \\\n  --s3.destination.access-key-id <destination access key id> \\\n  --s3.destination.secret-access-key <destination secret access key> \\\n  --s3.destination.endpoint <destination endpoint> \\\n  --source-prefix tenant2 \\\n  --dry-run\n```\n\n### Example for copying between different providers\n\nCombine the relevant source and destination configuration options using the above examples as a guide.\nFor instance, to copy from S3 to ABS:\n\n```bash\n./copyprefix \\\n  --source.backend s3 \\\n  --destination.backend azure \\\n  --s3.source.bucket-name <source bucket name> \\\n  --s3.source.access-key-id <source access key id> \\\n  --s3.source.secret-access-key <source secret access key> \\\n  --s3.source.endpoint <source endpoint> \\\n  --azure.destination.container-name <destination container name> \\\n  --azure.destination.account-name <destination account name> \\\n  --azure.destination.account-key <destination account key> \\\n  --source-prefix tenant3 \\\n  --dry-run\n```\n","isInternal":false,"tokens":797,"sizeBytes":3639},{"name":"README.md","path":"tools/decode-protobuf-query-result/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/decode-protobuf-query-result/README.md","title":"decode-protobuf-query-result Documentation","category":"plugin-manifest","format":"markdown","content":"# Purpose\n\nTo decode PromQL query results encoded in Protobuf format.\n\nUse case: to query and print native histograms in their raw format instead\nof the simplified format in the default JSON response. In particular to get\nschema number, reset hint, spans, etc, in other words the raw samples that\nPromQL produced.\n\n# How to use\n\nMake a query using curl (or some other tool) and make sure to:\n\n- use the header `-H \"Accept: application/vnd.mimir.queryresponse+protobuf\"`,\n- optionally use `-H \"Cache-Control: no-store\"` to avoid caches,\n- save the result in a file,\n- verify that the HTTP response was 2xx.\n\nFor example\n\n```sh\n$ curl -G -H \"Accept: application/vnd.mimir.queryresponse+protobuf\" -H \"X-Scope-OrgId: 1\" http://localhost:8080/prometheus/api/v1/query --data-urlencode 'query=foo{bar=\"baz\"}[6m]' --data-urlencode 'time=1759932075' -o out.proto\n % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  1315  100  1315    0     0  17870      0 --:--:-- --:--:-- --:--:-- 18013\n\n$ go run . out.proto\nDecoding out.proto as matrix\nStream 0, labels foo{bar=\"baz\"}:\n  Timestamp: 1759931725000, Histogram: &FloatHistogram{Count:0,Sum:0,Schema:0,ZeroThreshold:0,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{},PositiveBuckets:[],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931740000, Histogram: &FloatHistogram{Count:2,Sum:2.2885222e+07,Schema:3,ZeroThreshold:1e-128,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{BucketSpan{Offset:187,Length:3,},},PositiveBuckets:[1 1 0],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931935000, Histogram: &FloatHistogram{Count:0,Sum:0,Schema:0,ZeroThreshold:0,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{},PositiveBuckets:[],CounterResetHint:0,CustomValues:[],}\n  Timestamp: 1759931950000, Histogram: &FloatHistogram{Count:2,Sum:2.4272461e+07,Schema:3,ZeroThreshold:1e-128,ZeroCount:0,NegativeSpans:[]BucketSpan{},NegativeBuckets:[],PositiveSpans:[]BucketSpan{BucketSpan{Offset:186,Length:1,},BucketSpan{Offset:3,Length:2,},},PositiveBuckets:[1 1 0],CounterResetHint:0,CustomValues:[],}\n```\n\nRun this command with the filename as the argument and enjoy.\n","isInternal":false,"tokens":713,"sizeBytes":2338},{"name":"README.md","path":"tools/delete-objects/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/delete-objects/README.md","title":"delete-objects Documentation","category":"plugin-manifest","format":"markdown","content":"# delete-objects Documentation\n\nPath: `tools/delete-objects/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/delete-objects/README.md)","tokens":300,"sizeBytes":185},{"name":"readme.md","path":"tools/diagram/readme.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/diagram/readme.md","title":"diagram Documentation","category":"plugin-manifest","format":"markdown","content":"# diagram Documentation\n\nPath: `tools/diagram/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/diagram/readme.md)","tokens":300,"sizeBytes":164},{"name":"README.md","path":"tools/disable-failing-upstream-promql-tests/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/disable-failing-upstream-promql-tests/README.md","title":"disable-failing-upstream-promql-tests Documentation","category":"plugin-manifest","format":"markdown","content":"# disable-failing-upstream-promql-tests Documentation\n\nPath: `tools/disable-failing-upstream-promql-tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/disable-failing-upstream-promql-tests/README.md)","tokens":300,"sizeBytes":254},{"name":"README.md","path":"tools/grpcurl-query-ingesters/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/README.md","title":"grpcurl-query-ingesters Documentation","category":"plugin-manifest","format":"markdown","content":"# grpcurl-query-ingesters Documentation\n\nPath: `tools/grpcurl-query-ingesters/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-ingesters/README.md)","tokens":300,"sizeBytes":212},{"name":"README.md","path":"tools/grpcurl-query-store-gateways/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/README.md","title":"grpcurl-query-store-gateways Documentation","category":"plugin-manifest","format":"markdown","content":"# grpcurl-query-store-gateways Documentation\n\nPath: `tools/grpcurl-query-store-gateways/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/grpcurl-query-store-gateways/README.md)","tokens":300,"sizeBytes":227},{"name":"README.md","path":"tools/kafkatool/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/kafkatool/README.md","title":"kafkatool Documentation","category":"plugin-manifest","format":"markdown","content":"# kafkatool Documentation\n\nPath: `tools/kafkatool/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/kafkatool/README.md)","tokens":300,"sizeBytes":170},{"name":"README.md","path":"tools/listblocks/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/listblocks/README.md","title":"listblocks Documentation","category":"plugin-manifest","format":"markdown","content":"# listblocks Documentation\n\nPath: `tools/listblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/listblocks/README.md)","tokens":300,"sizeBytes":173},{"name":"README.md","path":"tools/mark-blocks/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/mark-blocks/README.md","title":"mark-blocks Documentation","category":"plugin-manifest","format":"markdown","content":"# mark-blocks Documentation\n\nPath: `tools/mark-blocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/mark-blocks/README.md)","tokens":300,"sizeBytes":176},{"name":"README.md","path":"tools/markblocks/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/markblocks/README.md","title":"markblocks Documentation","category":"plugin-manifest","format":"markdown","content":"# markblocks Documentation\n\nPath: `tools/markblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/markblocks/README.md)","tokens":300,"sizeBytes":173},{"name":"README.md","path":"tools/node-gen/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/node-gen/README.md","title":"node-gen Documentation","category":"plugin-manifest","format":"markdown","content":"# node-gen Documentation\n\nPath: `tools/node-gen/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/node-gen/README.md)","tokens":300,"sizeBytes":167},{"name":"README.md","path":"tools/promql-generator/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/README.md","title":"promql-generator Documentation","category":"plugin-manifest","format":"markdown","content":"# promql-generator Documentation\n\nPath: `tools/promql-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/promql-generator/README.md)","tokens":300,"sizeBytes":191},{"name":"README.md","path":"tools/query-bucket-index/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/query-bucket-index/README.md","title":"query-bucket-index Documentation","category":"plugin-manifest","format":"markdown","content":"# query-bucket-index Documentation\n\nPath: `tools/query-bucket-index/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/query-bucket-index/README.md)","tokens":300,"sizeBytes":197},{"name":"README.md","path":"tools/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"Scripts based on https://github.com/weaveworks/build-tools\n","isInternal":false,"tokens":14,"sizeBytes":59},{"name":"README.md","path":"tools/splitblocks/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/splitblocks/README.md","title":"splitblocks Documentation","category":"plugin-manifest","format":"markdown","content":"# splitblocks Documentation\n\nPath: `tools/splitblocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/splitblocks/README.md)","tokens":300,"sizeBytes":176},{"name":"README.md","path":"tools/sync-upstream-promql-tests/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/sync-upstream-promql-tests/README.md","title":"sync-upstream-promql-tests Documentation","category":"plugin-manifest","format":"markdown","content":"# sync-upstream-promql-tests Documentation\n\nPath: `tools/sync-upstream-promql-tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/sync-upstream-promql-tests/README.md)","tokens":300,"sizeBytes":221},{"name":"README.md","path":"tools/tsdb-gaps/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-gaps/README.md","title":"tsdb-gaps Documentation","category":"plugin-manifest","format":"markdown","content":"# tsdb-gaps Documentation\n\nPath: `tools/tsdb-gaps/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-gaps/README.md)","tokens":300,"sizeBytes":170},{"name":"README.md","path":"tools/tsdb-index-header/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-index-header/README.md","title":"tsdb-index-header Documentation","category":"plugin-manifest","format":"markdown","content":"# tsdb-index-header Documentation\n\nPath: `tools/tsdb-index-header/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/tsdb-index-header/README.md)","tokens":300,"sizeBytes":194},{"name":"README.md","path":"tools/undelete-blocks/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/undelete-blocks/README.md","title":"undelete-blocks Documentation","category":"plugin-manifest","format":"markdown","content":"# undelete-blocks Documentation\n\nPath: `tools/undelete-blocks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/tools/undelete-blocks/README.md)","tokens":300,"sizeBytes":188},{"name":"README.md","path":"vendor/github.com/google/gnostic-models/extensions/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/mimir/HEAD/vendor/github.com/google/gnostic-models/extensions/README.md","title":"extensions Documentation","category":"plugin-manifest","format":"markdown","content":"# extensions Documentation\n\nPath: `vendor/github.com/google/gnostic-models/extensions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/vendor/github.com/google/gnostic-models/extensions/README.md)","tokens":300,"sizeBytes":241}],"systemPromptSnippet":"<yakaai_skills repo=\"grafana/mimir\">\n<!-- File: AGENTS.md (Tokens: ~10 | Category: root-instruction) -->\n@docs/internal/contributing/README.md\n\n<!-- File: .claude/skills/split-file/SKILL.md (Tokens: ~1312 | Category: anthropic-skill) -->\n---\nname: split-file\ndescription: Split a large Go file into smaller focused files while preserving git history. Use when a file is too large and needs to be broken into logical modules.\nargument-hint: [filepath]\n---\n\n# Split a Go file into multiple files preserving git history\n\nSplit the file at `$ARGUMENTS` into multiple smaller files, grouped by logical concern, while preserving `git log --follow` history for each new file.\n\n## Phase 1: Analyze\n\n1. Read the file and catalog every function, method, type, const block, and var block with their line numbers.\n2. Group them into logical categories (e.g., push path, query path, TSDB lifecycle, HTTP handlers, etc.).\n3. Check existing files in the same package to understand naming conventions and avoid conflicts.\n4. Propose the split to the user: list each new file, what goes in it, and approximate line count. Keep the original file for initialization, config, types, and lifecycle. Aim for at least 4 files.\n5. Wait for user approval before proceeding.\n\n## Phase 2: Split with history preservation\n\nFor each new file, repeat this sequence. Process files from largest to smallest.\n\n### Git dance (creates the new file with full history)\n\n```bash\n# 1. Create temp branch from current branch\ngit checkout -b temp-split-SUFFIX $CURRENT_BRANCH\n\n# 2. Rename original to new filename\ngit mv path/to/original.go path/to/new_file.go\ngit commit -m \"temp: rename original.go to new_file.go\"\n\n# 3. Go back to working branch\ngit checkout $CURRENT_BRANCH\n\n# 4. Rename original to a temp name (creates rename/rename conflict)\ngit mv path/to/original.go path/to/original_main_temp.go\ngit commit -m \"temp: rename original.go to original_main_temp.go\"\n\n# 5. Merge — this triggers a CONFLICT (rename/rename), which is what we want\ngit merge temp-split-SUFFIX --no-commit\ngit checkout --ours path/to/original_main_temp.go\ngit checkout --theirs path/to/new_file.go\ngit add path/to/original_main_temp.go path/to/new_file.go\ngit rm --cached path/to/original.go 2>/dev/null\ngit commit -m \"split: create new_file.go from original.go (preserving history)\"\n\n# 6. Rename temp back to original\ngit mv path/to/original_main_temp.go path/to/original.go\ngit commit -m \"temp: rename original_main_temp.go back to original.go\"\n\n# 7. Cleanup\ngit branch -d temp-split-SUFFIX\n```\n\n### Content extraction\n\nAfter the git dance, both files contain the full original content. Now trim them:\n\n1. Write a python helper script that extracts specific line ranges from a file (for the new file) and removes those same ranges (for the original). This is much faster and less error-prone than manual editing.\n2. Run `goimports -local <module_path> -w` on both files to fix imports.\n3. If `goimports` resolves aliased imports incorrectly (e.g., `util_log`, `mimir_storage`, `promcfg`), fix them manually. This is common for packages with custom import aliases.\n4. Run `go build ./path/to/package/...` to verify compilation.\n5. Commit the trimmed files: `git commit -m \"split: trim new_file.go to <description> code only\"`\n\n### Gotchas learned from experience\n\n- **goimports resolves wrong packages**: When the codebase has aliased imports like `util_log \"pkg/util/log\"` or `mimir_storage \"pkg/storage\"`, `goimports` may resolve to a different package with the same base name (e.g., otel's `exemplar` instead of prometheus's `exemplar`). Always check the import block after running goimports.\n- **Shared types across split boundaries**: Types like context keys or request state structs used by multiple split files should go in the file where they are primarily defined. They're accessible from other files in the same package.\n- **The rename/rename conflict is essential**: A simple modify-on-one-side + rename-on-other-side does NOT create a conflict — git auto-merges it by following the rename, and you lose the original file. You MUST rename on BOTH sides to force the conflict.\n- **Test files don't need splitting**: Tests in `_test.go` files work across all files in the same package.\n- **Process largest extractions first**: This keeps the original file shrinking progressively and makes line number tracking easier.\n\n## Phase 3: Verify\n\nAfter all splits are done:\n\n```bash\n# Build\ngo build ./path/to/package/...\n\n# Run tests\ngo test ./path/to/package/... -count=1 -short\n\n# Verify history for each new file\nfor f in new_file1 new_file2 ...; do\n  echo \"=== $f ===\"\n  git log --follow --oneline \"path/to/${f}.go\" | tail -3\ndone\n```\n\nEach new file should show the full commit history from before the split.\n\n### Per-declaration content hash verification\n\nUse `tools/split-file-verify` to prove that every declaration was moved intact. The tool parses Go files using the AST, extracts every top-level declaration (functions, methods, types, var/const blocks), and outputs a sorted TSV of `name \\t sha256_hash`.\n\n```bash\n# Build the tool\ngo build -o /tmp/split-file-verify ./tools/split-file-verify\n\n# Hash every declaration in the original file (from the base commit)\ngit show <base-commit>:path/to/original.go > /tmp/original.go\n/tmp/split-file-verify /tmp/original.go > /tmp/original_decls.tsv\n\n# Hash every declaration across all split files\n/tmp/split-file-verify path/to/file1.go path/to/file2.go ... > /tmp/split_decls.tsv\n\n# Compare — should produce no output if everything matches\ndiff /tmp/original_decls.tsv /tmp/split_decls.tsv\n```\n\nIf `diff` produces no output, every declaration has the exact same content in the split files as in the original. Post this as a PR comment so reviewers can verify without reading every line.\n\n<!-- File: docs/internal/tools/compaction-planner.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/compaction-planner.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/compaction-planner.md)\n\n<!-- File: docs/internal/tools/copyblocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/copyblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/copyblocks.md)\n\n<!-- File: docs/internal/tools/list-blocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/list-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-blocks.md)\n\n<!-- File: docs/internal/tools/list-deduplicated-blocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/list-deduplicated-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/list-deduplicated-blocks.md)\n\n<!-- File: docs/internal/tools/mark-blocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/mark-blocks.md)\n\n<!-- File: docs/internal/tools/query-step-alignment-analysis.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/query-step-alignment-analysis.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/query-step-alignment-analysis.md)\n\n<!-- File: docs/internal/tools/splitblocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/splitblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/splitblocks.md)\n\n<!-- File: docs/internal/tools/trafficdump.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/trafficdump.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/trafficdump.md)\n\n<!-- File: docs/internal/tools/tsdb-tools.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/tsdb-tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/tsdb-tools.md)\n\n<!-- File: docs/internal/tools/ulidtime.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/ulidtime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/ulidtime.md)\n\n<!-- File: docs/internal/tools/undelete-blocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/internal/tools/undelete-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/internal/tools/undelete-blocks.md)\n\n<!-- File: docs/sources/mimir/manage/tools/_index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/_index.md)\n\n<!-- File: docs/sources/mimir/manage/tools/continuous-test.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/continuous-test.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/continuous-test.md)\n\n<!-- File: docs/sources/mimir/manage/tools/listblocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/listblocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/listblocks.md)\n\n<!-- File: docs/sources/mimir/manage/tools/mark-blocks.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mark-blocks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mark-blocks.md)\n\n<!-- File: docs/sources/mimir/manage/tools/mimirtool.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/mimirtool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/mimirtool.md)\n\n<!-- File: docs/sources/mimir/manage/tools/query-tee.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/query-tee.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/query-tee.md)\n\n<!-- File: docs/sources/mimir/manage/tools/tenant-injector.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `docs/sources/mimir/manage/tools/tenant-injector.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/manage/tools/tenant-injector.md)\n\n<!-- File: docs/sources/mimir/references/_index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `docs/sources/mimir/references/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/_index.md)\n\n<!-- File: docs/sources/mimir/references/architecture/_index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/_index.md)\n\n<!-- File: docs/sources/mimir/references/architecture/binary-index-header.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Architecture Skill\n\nPath: `docs/sources/mimir/references/architecture/binary-index-header.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/binary-index-header.md)\n\n<!-- File: docs/sources/mimir/references/architecture/bucket-index/index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Bucket-index Skill\n\nPath: `docs/sources/mimir/references/architecture/bucket-index/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/bucket-index/index.md)\n\n<!-- File: docs/sources/mimir/references/architecture/components/_index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/_index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/_index.md)\n\n<!-- File: docs/sources/mimir/references/architecture/components/alertmanager.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/alertmanager.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/alertmanager.md)\n\n<!-- File: docs/sources/mimir/references/architecture/components/block-builder/index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Block-builder Skill\n\nPath: `docs/sources/mimir/references/architecture/components/block-builder/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/block-builder/index.md)\n\n<!-- File: docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Compactor-scheduler Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor-scheduler/index.md)\n\n<!-- File: docs/sources/mimir/references/architecture/components/compactor/index.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Compactor Skill\n\nPath: `docs/sources/mimir/references/architecture/components/compactor/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/compactor/index.md)\n\n<!-- File: docs/sources/mimir/references/architecture/components/distributor.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Components Skill\n\nPath: `docs/sources/mimir/references/architecture/components/distributor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/mimir/HEAD/docs/sources/mimir/references/architecture/components/distributor.md)\n\n<!-- ... +64 more modular skills available via /api/skills/grafana/mimir?path={path} -->\n</yakaai_skills>"}