Skip to content

HolmesGPT standalone docs#497

Merged
pavangudiwada merged 123 commits intomasterfrom
holmes-mkdocs
Jul 16, 2025
Merged

HolmesGPT standalone docs#497
pavangudiwada merged 123 commits intomasterfrom
holmes-mkdocs

Conversation

@pavangudiwada
Copy link
Contributor

@pavangudiwada pavangudiwada commented Jun 7, 2025

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 7, 2025

Walkthrough

This update introduces a comprehensive overhaul and expansion of HolmesGPT's documentation. It adds new structured documentation files for installation, AI provider configuration, built-in and custom toolsets, development, evaluation, and troubleshooting. The update also introduces a MkDocs configuration for building and deploying the documentation site, replaces local links with hosted URLs, and removes outdated or redundant documentation.

Changes

Files/Paths Change Summary
.github/workflows/build-and-deploy-docs.yaml Added GitHub Actions workflow to build and deploy documentation using MkDocs.
mkdocs.yml New MkDocs configuration defining site structure, theme, plugins, and navigation for HolmesGPT documentation.
README.md Updated all documentation links to point to the hosted documentation site URLs.
docs/README.md Added detailed instructions for building, serving, and contributing to HolmesGPT documentation locally.
docs/index.md, docs/walkthrough/index.md Added main documentation landing page and a walkthrough for running the first HolmesGPT investigation.
docs/installation/*.md Added new installation guides for CLI, Kubernetes (Helm), UI, and Python SDK usage.
docs/ai-providers/*.md Added new documentation for configuring each supported AI provider (OpenAI, Azure, Anthropic, Gemini, etc.).
docs/data-sources/index.md, docs/data-sources/permissions.md, docs/data-sources/remote-mcp-servers.md Added high-level overviews and guides for data sources, permissions, and remote MCP server integration.
docs/data-sources/builtin-toolsets/*.md Added detailed documentation for each built-in toolset (e.g., Kubernetes, AWS, Datadog, GitHub, Prometheus, etc.).
docs/data-sources/custom-toolsets.md Added guide for creating and configuring custom toolsets, with examples and advanced usage.
docs/development/index.md, docs/development/evals/*.md Added developer guides, including evaluation framework documentation and instructions for writing and running evals.
docs/reference/helm-configuration.md, docs/reference/http-api.md, docs/reference/troubleshooting.md Added reference documentation for Helm chart configuration, HTTP API, and troubleshooting.
docs/snippets/*.md Added reusable documentation snippets for toolset configuration, capabilities, logging, and Helm upgrade commands.
docs/api-keys.md, docs/installation.md, docs/k9s.md, docs/evals-introduction.md, docs/python.md Deleted outdated or superseded documentation files.
docs/development/evals/reporting.md, docs/development/evals/writing.md Updated titles, links, image paths, and command examples for clarity and consistency.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Docs Site (MkDocs)
    participant GitHub Actions
    participant HolmesGPT

    User->>Docs Site (MkDocs): Access documentation via hosted URLs
    User->>Docs Site (MkDocs): Follow installation/configuration guides
    User->>HolmesGPT: Install/configure HolmesGPT as per docs
    GitHub Actions->>Docs Site (MkDocs): Build and deploy docs on master branch push
    Docs Site (MkDocs)-->>User: Serve up-to-date documentation
Loading

Possibly related PRs

  • #478: Improves cross-linking between existing evals documentation pages, related to evaluation documentation added here.
  • #471: Adds Azure OpenAI provider entry to README, related to AI provider documentation additions in this PR.

Suggested labels

enhancement

Suggested reviewers

  • aantn

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

aantn
aantn previously approved these changes Jul 16, 2025
Copy link
Collaborator

@aantn aantn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent work.

@pavangudiwada pavangudiwada marked this pull request as ready for review July 16, 2025 13:17
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

🔭 Outside diff range comments (1)
docs/development/evals/writing.md (1)

208-209: YAML key uses hyphen, examples above use underscore – pick one

Earlier examples use before_test / after_test; this snippet switches to before-test / after-test. The test harness reads the underscore version today – the dash form will be silently ignored.

Either rename here or document that both are supported.

🧹 Nitpick comments (70)
docs/snippets/enabled_by_default.md (1)

1-2: Minor wording tweak for readability (optional).

Breaking the long second sentence makes the admonition easier to scan.

-    This toolset is enabled by default. You do not need to configure it. You can disable it if you want to but doing so may negatively impact HolmesGPT's ability to investigate issues.
+    This toolset is enabled by default – no additional configuration required.
+    You can disable it if you really need to, but doing so may reduce HolmesGPT's ability to investigate issues.
docs/snippets/toolset_configuration_helm.md (1)

1-10: YAML indentation is Helm-friendly, but add a placeholder prefix (optional).

Readers may copy-paste; adding ... above holmes: prevents Helm from reading an incomplete fragment verbatim.

-    ```yaml
-    holmes:
+    ```yaml
+    # values.yaml
+    ...
+    holmes:
docs/snippets/helm_upgrade_command.md (1)

1-4: Include --install & quote the placeholder for safer copy-paste

Users often copy the snippet verbatim. Adding --install prevents failures on first-time installs, and wrapping <YOUR_CLUSTER_NAME> in quotes avoids issues with cluster names that contain dots or dashes.

-helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>
+helm upgrade --install robusta robusta/robusta \
+  --values=generated_values.yaml \
+  --set clusterName="<YOUR_CLUSTER_NAME>"
docs/snippets/disable_default_logging_toolset.md (1)

1-2: Minor wording tweak for clarity

“datasource” → “data source” is the spelling used elsewhere in the docs.

- a different datasource for logs
+ a different data source for logs
docs/snippets/toolset_configuration_cli.md (1)

5-11: Align YAML indentation with 2-space convention

Most examples in the repo use 2-space indents; keeping it consistent improves readability.

-    ```yaml
-    toolsets:
-        TOOLSET_NAME:
-            enabled: true
-            config:
-                CONFIGURATION_OPTIONS
-    ```
+```yaml
+toolsets:
+  TOOLSET_NAME:
+    enabled: true
+    config:
+      CONFIGURATION_OPTIONS
+```

</blockquote></details>
<details>
<summary>README.md (5)</summary><blockquote>

`65-66`: **Minor wording & link context**

> “For extra privacy, **[bring an API key]**”

Consider clarifying “bring **your own** API key” – some readers mis-parse *bring an*.  
No functional change needed.

---

`90-93`: **Grammar nit – “follow” → “following”**

> “one of the **follow** three methods”

```diff
-You can install HolmesGPT in one of the follow three methods:
+You can install HolmesGPT in one of the following three methods:

101-131: Repeated hard-coded docs links – extract a variable?

A dozen identical https://robusta-dev.github.io/holmesgpt/installation/cli-installation/ strings appear here.
If this URL changes, every instance must be edited. MkDocs supports variables (e.g. {{ base_url }}) or you can use relative paths (/installation/cli-installation/), reducing future churn.


185-221: Alt-text consistency

Many logos now link to the hosted docs but still use alt="OpenAI" etc. A few (e.g., Azure) include file names. Align all alt values with provider names for accessibility-tool parity.


231-237: Sentence reads awkwardly

“Also supported: … setup an LLM API key and ask Holmes a question”

“set up” is the verb; “setup” is the noun.

-setup an LLM API key
+set up an LLM API key
docs/development/evals/reporting.md (2)

5-6: Prefer link aliases over raw .md

MkDocs generates nice directory URLs. Linking to index.md / writing.md bypasses that and emits warnings in --strict mode. Use:

- [Evaluations Overview](../)
- [Writing Evaluations](writing/)

12-14: Grammar

“how Holmes perform over time” → “how Holmes performs over time”.

docs/snippets/toolset_configuration_tabs.md (2)

1-12: Code block placeholders could mislead copy-pastes

Using bare TOOLSET_NAME / CONFIGURATION_OPTIONS without back-ticks makes it easy for users to forget replacement. Consider wrapping them in angle brackets or adding an explicit note.

toolsets:
  <toolset_name>:
    enabled: true
    config:
      <option>: <value>

24-28: Helm upgrade command omits --namespace

Most users install Robusta in a dedicated namespace (docs default to robusta). Add --namespace robusta (or a variable) to avoid upgrading the wrong release.

.github/workflows/build-and-deploy-docs.yaml (2)

1-8: Trigger only on master – consider main or PR previews

If the default branch ever switches to main, docs will silently stop deploying. You can future-proof with:

push:
  branches: [ master, main ]

Optionally add pull_request: { paths: ['docs/**', 'mkdocs.yml'] } to validate builds in PRs.


20-24: Cache key is fine – but pip cache is missing

You cache MkDocs’ tarball downloads, but pip redownloads mkdocs-material every run. Adding:

- uses: actions/cache@v4
  with:
    path: ~/.cache/pip
    key: pip-${{ hashFiles('**/requirements-docs.txt') }}

will cut minutes off CI.

docs/development/evals/writing.md (2)

55-58: Fix typos & unclear sentence in expectations section

preent is miss-spelled and the sentence “HolmesGPT's answer is score 0 is any …” is grammatically broken, making the evaluation criteria hard to follow.

- This `expected_output` will be compared against HolmesGPT's answer and evaluated by a LLM ('LLM as judge'). The resulting score is called `correctness` and is a binary score with a value of either `0` or `1`. HolmesGPT's answer is score `0` is any of the expected element is not present in the answer, `1` if all expected elements are preent in the answer.
+ HolmesGPT’s answer is evaluated by an LLM (“LLM-as-judge”) against the `expected_output`.  
+ The result – `correctness` – is binary:  
+ * `1` if **all** expected elements are present in the answer  
+ * `0` if **any** expected element is missing

279-284: Shell snippets: add -s only when needed & avoid repetition

pytest -v -s … is great for debugging, but -s streams stdout/stderr which slows CI runs. Maybe add a note: “omit -s in CI for faster output”.

Minor, feel free to ignore.

docs/ai-providers/ollama.md (1)

18-27: Duplicate command block – consider removing one

Blocks at lines 18-19 and 25-27 show the exact same invocation. Perhaps keep only one and move the second under a “Quick example” caption to avoid vertical scroll.

docs/ai-providers/openai.md (1)

30-35: Clarify “mini” model caveat

“Results are not as accurate” is subjective. Maybe phrase as “may be less accurate for complex queries” or link to OpenAI’s own guidance.

docs/index.md (1)

5-5: Add alt text for accessibility

The header GIF lacks alt text. Screen-reader users will miss context.

-![HolmesGPT Investigation](assets/HolmesInvestigation.gif)
+![Animated screenshot of HolmesGPT diagnosing an issue](assets/HolmesInvestigation.gif)
docs/data-sources/builtin-toolsets/internet.md (1)

1-1: Remove the check-mark from the heading for consistency across toolset docs

Other built-in toolset pages use plain titles like “# Coralogix logs”, “# Slab”, etc. The lone “✓” in “# Internet ✓” introduces an inconsistent naming pattern and can break generated anchors.
Consider dropping the glyph:

-# Internet ✓
+# Internet
docs/snippets/toolset_config_template.md (1)

8-14: Clarify placeholder syntax to prevent copy-paste errors

TOOLSET_PATH and CUSTOM_CONFIG are currently bare identifiers. Readers may mistake them for literal keys. Wrapping them in angle brackets or back-ticks improves affordance:

-    toolsets:
-        TOOLSET_PATH:
+    toolsets:
+        <TOOLSET_PATH>:
...
-                CUSTOM_CONFIG
+                <CUSTOM_CONFIG>
docs/data-sources/builtin-toolsets/slab.md (1)

41-43: Polish the sample holmes command

Minor wording + typo: “crashloopbackoff” ➜ “CrashLoopBackOff”, and splitting the sentence improves readability.

-holmes ask "Why is my pod failing, if it's a crashloopbackoff use the runbooks from Slab"
+holmes ask "Why is my pod failing? If it's in a CrashLoopBackOff state, use the runbooks from Slab."
docs/data-sources/index.md (1)

1-3: Minor phrasing improvement

“connects to your monitoring and observability tools” → “connects to monitoring and observability tools” (drop the second your for cleaner docs tone).

docs/data-sources/builtin-toolsets/datetime.md (2)

15-20: YAML sample: indent with 2 spaces for consistency

HolmesGPT docs use 2-space indents everywhere else. The snippet here is 4-space. Consider:

-holmes:
-    toolsets:
-        datetime:
-            enabled: true
+holmes:
+  toolsets:
+    datetime:
+      enabled: true

24-26: Table column width spills on mobile

Long description text (“Return current time information…”) wraps oddly on narrow screens. Shorten or split for responsiveness (MkDocs Material auto-wrap is limited inside tables).

docs/ai-providers/azure-openai.md (1)

24-25: Avoid passing secrets on the command line

Shell history will retain --api-key. Recommend env-var or stdin prompt instead; at least add a security note.

docs/data-sources/builtin-toolsets/opensearch-status.md (2)

18-30: Examples mix list-style hosts formats

First snippet lists plain host strings, later snippets use objects { host, port }. Make a note that both are valid per opensearch-py, or standardise to one style to avoid confusion.

hosts:
  - host: host1.com
    port: 9200

60-68: Highlight secret management best practices

Plain-text OPENSEARCH_BEARER_TOKEN env var is fine for local dev, but add a warning box recommending Kubernetes secrets or a password manager for production.

docs/ai-providers/google-vertex-ai.md (1)

25-27: --api-key flag may mislead users of service-account JSON

Vertex AI auth typically relies on a JSON key file, not a short API key string. If HolmesGPT really expects the full JSON via --api-key, clarify this explicitly (size, quoting, security caveats) or rename the flag (e.g. --credentials-file) to avoid confusion.

docs/data-sources/builtin-toolsets/docker.md (1)

6-6: Turn the loose sentence into a clear “Prerequisites” section

-Read access to Docker resources.
+### Prerequisites
+
+Ensure the user running HolmesGPT has read-only access to the Docker daemon  
+(e.g. by being in the `docker` group or using a rootless socket).
docs/data-sources/builtin-toolsets/helm.md (1)

1-1: Heading suffix breaks some MkDocs slug generators

A few Markdown renderers strip or URL-encode the check-mark, producing awkward anchor links.
Consider dropping the symbol for portability.

docs/development/index.md (1)

44-47: Duplicate link – drop one occurrence

Contributing Guidelines is linked twice (lines 7–8 and again here). Keeping both adds noise without benefit.

-1. **[Contributing Guidelines](https://github.com/robusta-dev/holmesgpt/blob/master/CONTRIBUTING.md){:target="_blank"}** - Understand the development process
-2. **[Evaluations Overview](evals/index.md)** - Learn about the evaluation framework
+1. **[Evaluations Overview](evals/index.md)** - Learn about the evaluation framework
docs/data-sources/builtin-toolsets/opensearch-logs.md (2)

14-30: YAML fences trigger MD046 – switch to indented blocks or disable the rule

markdownlint complains because fenced blocks are used instead of indented ones. Either:

  1. Convert fenced YAML to an indented block, or
  2. Add a rule override in .markdownlint.yaml/front-matter to disable MD046.

Consistency with other docs is key; pick one style and apply it repo-wide.


42-45: Use neutral placeholders – avoid leaking random hostnames

skdjasid.europe-west1.gcp.cloud.es.io is clearly a throw-away value but can confuse readers.

-          opensearch_url: https://skdjasid.europe-west1.gcp.cloud.es.io:443 # The URL to your opensearch cluster.
+          opensearch_url: https://<your-opensearch-cluster>:443  # The URL to your OpenSearch cluster
docs/data-sources/builtin-toolsets/robusta.md (1)

1-1: Header slug contains a Unicode check-mark – breaks predictable anchors

# Robusta ✓ produces an anchor like robusta-✓, which is hard to type and link to. Drop the symbol for cleaner URLs.

-# Robusta ✓
+# Robusta
docs/data-sources/builtin-toolsets/confluence.md (1)

13-17: Add a secret-based alternative for shell examples.

The Bash snippet only shows exporting credentials directly. Including a short comment (as you did in the Helm section) demonstrating how to source these from a secret keeps parity with the Helm example and discourages leaking API keys in shell history.

docs/data-sources/builtin-toolsets/rabbitmq.md (2)

5-9: Minor grammar & clarity fix.

  1. “detect partition” → “detect partitions”
  2. “The nodes and partitioning status is obtained” → “The node and partition status are obtained”
-By enabling this toolset, HolmesGPT will be able to detect RabbitMQ partitions, memory alerts, and disk alerts and suggest mitigations.
-
-This toolset follows a two-step process to detect partition:
+By enabling this toolset, HolmesGPT can detect RabbitMQ partitions, memory alerts, and disk alerts, then suggest mitigations.
+
+This toolset follows a two-step process to detect partitions:
@@
-1. The nodes and partitioning status is obtained by fetching information from the configured `management_url`.
+1. Node and partition status are obtained by fetching information from the configured `management_url`.

51-60: Consider silencing MD046 or switching to indented code blocks.

markdownlint-cli2 flags fenced blocks inside a fenced block list (MD046). If the rule is enforced in CI you can either:

  1. Disable MD046 for this file (<!-- markdownlint-disable MD046 -->)
  2. Replace the fenced YAML with an indented block.

No action needed if MD046 isn’t part of required checks.

docs/installation/kubernetes-installation.md (1)

112-124: Shell snippet: quote JSON for portability.

Some shells misinterpret single quotes inside the JSON. Safer to use a here-document or escape quotes:

curl -X POST http://localhost:8080/api/chat \
  -H 'Content-Type: application/json' \
  -d '{"ask":"list pods in namespace default?"}'
docs/data-sources/builtin-toolsets/aks-node-health.md (1)

50-64: Avoid duplicating unchanged YAML in the advanced-config example

Lines 55-62 repeat the entire basic configuration and only add two extra keys (health_check_interval, max_unhealthy_nodes). Re-listing all fields obscures what actually changed and increases maintenance cost if defaults evolve.

Diff showing a more concise “patch-style” example:

 toolsets:
   aks/node-health:
     enabled: true
     config:
-      subscription_id: "<your Azure subscription ID>"
-      resource_group: "<your AKS resource group>"
-      cluster_name: "<your AKS cluster name>"
+      # …previous mandatory keys …
+      health_check_interval: 300        # seconds
+      max_unhealthy_nodes: 3            # threshold

That makes the delta crystal-clear and reduces copy-paste churn.

docs/data-sources/builtin-toolsets/index.md (1)

9-36: Consider alphabetical ordering for quicker scanning

The grid currently mixes cloud, observability and misc toolsets in a semi-random order. Sorting the bullet list alphabetically (or grouping by domain) would let users locate a toolset instantly without reading every line. It’s a one-line win for UX.

docs/data-sources/builtin-toolsets/grafanaloki.md (2)

39-56: Markdown-lint MD046 noise – switch to indented code blocks inside tab sets

markdownlint-cli2 flags these fenced blocks ( ```yaml) because they sit inside an indented “tabs” section. Converting them to indented code blocks (four-space prefix, no back-ticks) silences MD046 and matches Material-for-MkDocs’ recommendation:

-```yaml
-toolsets:
-  grafana/loki:
-    enabled: true
-    config:
-      api_key: <your grafana API key>
-
-```
+    toolsets:
+      grafana/loki:
+        enabled: true
+        config:
+          api_key: <your grafana API key>
+

Same applies to the Helm and advanced-config tabs further down.


70-72: Redundant comment – move to central snippet

The “HolmesGPT’s default logging mechanism MUST be disabled” comment is repeated four times in this file. Consider extracting it to a single include (e.g. snippets/disable_default_logging.md) just like you already do for toolset_refresh_warning.md.

docs/data-sources/builtin-toolsets/github.md (1)

52-64: Same MD046 warning as Loki doc

The fenced YAML block inside the advanced-config section causes markdownlint noise. Use an indented block or disable MD046 for this repo.

-```yaml
-toolsets:
-  git/github:
-    enabled: true
-    config:
-      default_branch: "main"
-      max_file_size: 1048576
-      timeout: 30
-```
+    toolsets:
+      git/github:
+        enabled: true
+        config:
+          default_branch: "main"
+          max_file_size: 1_048_576   # 1 MB
+          timeout: 30
docs/data-sources/builtin-toolsets/aws.md (1)

43-43: Prefer “who” when referring to people

... along with the users that called them

Replace “that” with “who” for grammatical correctness.

-| aws_cloudtrail_event_lookup | Fetches events of a specified type from AWS CloudTrail along with the users that called them |
+| aws_cloudtrail_event_lookup | Fetches events of a specified type from AWS CloudTrail along with the users who called them |
docs/walkthrough/index.md (1)

56-66: Tighten the wording of the outcome section

The bullets mix informal wording (“it's stuck”, “Saved investigation time”) with the otherwise formal tone of the docs. Consider:

- Holmes will analyze the pod, identify that it's stuck in "Pending" state due to an invalid node selector, and suggest specific remediation steps - all without you needing to manually run `kubectl describe`, check events, or dig through logs.
+ Holmes analyzes the pod, identifies that it is stuck in the “Pending” state because of an invalid node selector, and suggests concrete remediation steps — without any manual `kubectl describe`, event inspection, or log digging.
docs/ai-providers/openai-compatible.md (1)

22-24: Port mismatch between quick-start and LocalAI example

The quick-start sets OPENAI_API_BASE to localhost:8000, whereas the LocalAI example below runs on port 8080. New users may assume 8000 is always correct and hit a connection error.

Either change the quick-start to 8080 or add an explicit note that the port must match the server you run.

docs/data-sources/remote-mcp-servers.md (2)

49-49: Spelling: “supergateway”

supergatway is missing an “e”.

-Check out supergatway docs to find out other useful flags.
+Check out Supergateway docs to discover additional useful flags.

54-56: Add alt text for accessibility

The embedded GIF lacks alt text, which hurts accessibility and violates MD045.

-<img style="max-width:300px;" src="https://cdn.loom.com/sessions/thumbnails/1b290511b79942c7b1d672a2a4cde105-ed4eed3f9d70b125-full-play.gif">
+<img style="max-width:300px;" src="https://cdn.loom.com/sessions/thumbnails/1b290511b79942c7b1d672a2a4cde105-ed4eed3f9d70b125-full-play.gif" alt="Demo of running Dynatrace MCP via Supergateway">
docs/data-sources/builtin-toolsets/kubernetes.md (1)

12-17: YAML indentation deviates from other examples

Most docs indent two spaces under holmes:; this snippet uses four. Standardising indentation aids copy-paste and avoids Helm lint warnings in strict mode.

 holmes:
-    toolsets:
-        kubernetes/core:
-            enabled: true
+  toolsets:
+    kubernetes/core:
+      enabled: true
docs/installation/ui-installation.md (1)

17-24: Update internal link to be MkDocs-friendly

MkDocs converts “pretty” links only when they start with / or are relative to the file’s parent path.
[CLI Installation Guide](cli-installation.md) works locally but will break once the docs are served from /installation/ui-installation/ because the generated URL becomes /installation/ui-installation/cli-installation/.

Add one leading ../ so the link resolves to /installation/cli-installation/ in both local and published builds.

-1. **Install HolmesGPT CLI and set API key** - Follow the [CLI Installation Guide](cli-installation.md) …
+1. **Install HolmesGPT CLI and set API key** - Follow the [CLI Installation Guide](../installation/cli-installation.md) …
docs/data-sources/builtin-toolsets/datadog.md (1)

61-68: Fix Markdown-lint MD046 violation inside tabbed block

markdownlint flags fenced code-blocks inside tabbed content; indenting them by four spaces satisfies the rule and keeps the rendering identical.

-```bash
-holmes ask "show me recent application errors"
-```
+    ```bash
+    holmes ask "show me recent application errors"
+    ```
docs/installation/cli-installation.md (1)

31-37: Pin pipx install to a release tag instead of master.zip

Installing from a moving HEAD breaks reproducibility and prevents caching by pipx.

-pipx install "https://github.com/robusta-dev/holmesgpt/archive/refs/heads/master.zip"
+pipx install "https://github.com/robusta-dev/holmesgpt/archive/refs/tags/v<latest>.zip"

Replace <latest> with the current release tag whenever you cut a new version.

docs/data-sources/builtin-toolsets/grafanatempo.md (1)

18-26: Use proper headings instead of bold text

markdownlint flags **Getting Grafana URL** / **Obtaining the datasource UID** as emphasis-as-heading.
Converting to ### headings improves accessibility and ToC generation.

-**Getting Grafana URL**
+### Getting Grafana URL

Repeat for the Obtaining the datasource UID section.

docs/README.md (1)

70-81: Add language identifier to directory-tree code block

Explicit language hints silence markdown-lint (MD040) and improve syntax highlighting.

-```
+```text
 docs/
 ├── index.md                    # Homepage
 ...
 └── assets/                    # Images and static files
-```
+```
docs/installation/python-installation.md (1)

66-75: Avoid hard-coding dummy API keys in docs

Replacing your-api-key-here with an environment-variable example discourages accidental commits of real keys and demonstrates best practice.

-    api_key = os.getenv("OPENAI_API_KEY", "your-api-key-here")
+    # TIP: prefer environment variables over literals
+    api_key = os.getenv("OPENAI_API_KEY")
docs/data-sources/builtin-toolsets/prometheus.md (1)

68-76: Use proper sub-headings instead of bold paragraphs

MD036 is triggered by using emphasis for headings. Converting Option 1 / Option 2 to #### keeps navigation consistent and avoids linter noise.

-**Option 1: Simple method (port-forwarding)**
+#### Option 1: Simple method (port-forwarding)
 ...
-**Option 2: Advanced method (get full cluster DNS URL)**
+#### Option 2: Advanced method (get full cluster DNS URL)
docs/data-sources/builtin-toolsets/azure-sql.md (1)

94-108: Add language identifiers to ASCII-diagram code blocks

These fenced blocks miss a language spec (MD040). Use text to suppress warnings while preserving formatting.

-```
+```text
 Azure Level (RBAC):
 ├── Monitoring Reader (subscription)
 ├── SQL DB Contributor (resource group)
 ...
-```
+```

```diff
-```
+```text
 Database Level (SQL permissions):
 ├── CREATE USER [holmes-service-principal] FROM EXTERNAL PROVIDER
 ...
-```
+```
docs/reference/troubleshooting.md (1)

25-29: Label error-output code block as text

Adding text removes MD040 and avoids mis-highlighting.

-```
+```text
 pods is forbidden: User "system:serviceaccount:default:holmesgpt" cannot get resource "pods"
-```
+```
docs/reference/helm-configuration.md (2)

33-46: Remove duplicated “Toolset Configuration” section

The Toolset Configuration snippet appears twice (lines 33-46 and again at 130-146). Keeping a single, canonical example avoids bloating the page and eliminates the risk that the two diverge over time.

Also applies to: 130-146


19-24: Grammar / wording nit

“Enabled/disable/customize specific toolsets” → “Enable/disable/customize specific toolsets”.

docs/data-sources/builtin-toolsets/mongodb-atlas.md (1)

84-90: Minor naming consistency

All other built-in toolsets follow <provider>/<topic> naming conventions (e.g. prometheus/metrics).
Consider renaming tools from atlas_return_* to mongodb_atlas/… for uniformity.
Not blocking, but consistency helps future discoverability.

docs/development/evals/index.md (1)

76-78: Wording tweak for conciseness

“A lot of cases” → “many cases” reads better.

- In a lot of cases this can cause the eval to fail
+ In many cases this can cause the eval to fail
docs/data-sources/custom-toolsets.md (1)

345-363: markdownlint MD046 – fenced vs indented code blocks

Project markdown elsewhere consistently uses fenced blocks, so ignoring MD046 is acceptable.
If you want a clean lint run, disable rule MD046 or switch these three YAML/Dockerfile examples to indented blocks.

Also applies to: 398-412, 416-429

docs/data-sources/builtin-toolsets/newrelic.md (4)

5-6: Verify snippet include path to avoid MkDocs build warnings

Past builds raised warnings whenever an --8<-- include pointed at a non-existent file. Double-check that snippets/toolsets_that_provide_logging.md is present in docs/snippets/ (or adjust the relative path) so the generated site doesn’t emit “file not found” warnings.


18-30: Avoid hard-coding secrets in examples

Storing the API key directly in ~/.holmes/config.yaml encourages insecure practices. Consider showing an environment-variable based example instead, e.g.:

-          nr_api_key: "<your New Relic API key>"
+          nr_api_key: "${NEWRELIC_API_KEY}"

…and note that users can export NEWRELIC_API_KEY=... before running Holmes.


36-47: YAML indentation looks off under the Helm tab

Because the code block is already indented four spaces (inside the tab block), every line in the YAML now has two different indentation levels, which can be pasted incorrectly. Remove the leading four spaces inside the fenced block:

-    holmes:
-      toolsets:
-        newrelic:
+holmes:
+  toolsets:
+    newrelic:

This keeps the example copy-pasteable without manual fixes.


52-54: Elaborate on input parameters for each capability

Readers may not know what “duration threshold” means in newrelic_get_traces. Add a brief column (or footnote) specifying required/optional parameters (e.g. service, min_duration_ms, trace_id). This aligns with other toolset docs.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
docs/reference/helm-configuration.md (1)

8-9: Fix 404 – use main in GitHub URL

The repo’s default branch is main, so links that hard-code blob/master/… 404.
Update both occurrences to blob/main/….

-https://github.com/robusta-dev/holmesgpt/blob/master/helm/holmes/values.yaml
+https://github.com/robusta-dev/holmesgpt/blob/main/helm/holmes/values.yaml
docs/reference/http-api.md (1)

21-34: Replace bold text with real headings (MD036)

Using **Example** / **Example Response** as pseudo-headings violates markdownlint rule MD036 and breaks anchor generation. Convert to proper #### headings here and for every other occurrence (lines 33, 68, 83, 115, 130, 179, 196, 230, 241, 277, 294, 312, 317).

-**Example**
+#### Example
...
-**Example Response**
+#### Example Response
🧹 Nitpick comments (2)
docs/reference/helm-configuration.md (2)

33-41: Minor wording – use the imperative “Enable/disable/customize”

Nit: “Enabled/disable/customize specific toolsets” mixes tenses.
Rephrase for clarity.

-# Enabled/disable/customize specific toolsets
+# Enable/disable/customize specific toolsets

130-146: Duplicate “Toolset Configuration” section

Lines 130-146 repeat the toolset block already shown at 86-98 without adding new information. Consider removing one copy to keep the doc concise.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 23d3b6f and 29fe69c.

📒 Files selected for processing (6)
  • README.md (8 hunks)
  • docs/ai-providers/aws-bedrock.md (1 hunks)
  • docs/ai-providers/azure-openai.md (1 hunks)
  • docs/installation/cli-installation.md (1 hunks)
  • docs/reference/helm-configuration.md (1 hunks)
  • docs/reference/http-api.md (18 hunks)
✅ Files skipped from review due to trivial changes (1)
  • docs/installation/cli-installation.md
🚧 Files skipped from review as they are similar to previous changes (3)
  • docs/ai-providers/azure-openai.md
  • README.md
  • docs/ai-providers/aws-bedrock.md
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: nherment
PR: robusta-dev/holmesgpt#436
File: tests/llm/utils/mock_utils.py:240-249
Timestamp: 2025-06-05T12:23:27.634Z
Learning: The holmesgpt project uses Python >= 3.10 and prefers modern type hint syntax like `list[str]`, `dict[str, int]` over importing equivalent types from the typing module like `List[str]`, `Dict[str, int]`.
docs/reference/helm-configuration.md (2)
Learnt from: Sheeproid
PR: robusta-dev/holmesgpt#586
File: tests/llm/fixtures/test_ask_holmes/03_what_is_the_command_to_port_forward/test_case.yaml:4-4
Timestamp: 2025-07-02T10:27:17.231Z
Learning: In LLM-as-judge test cases for HolmesGPT, expected outputs should be descriptive rather than prescriptive when testing for flexible responses like port numbers. Using specific values in expected outputs can cause unnecessary test failures when the AI generates different but equally valid responses.
Learnt from: nherment
PR: robusta-dev/holmesgpt#610
File: .github/workflows/llm-evaluation.yaml:39-42
Timestamp: 2025-07-08T08:45:41.069Z
Learning: The robusta-dev/holmesgpt codebase has comprehensive existing validation for Azure environment variables (AZURE_API_BASE, AZURE_API_KEY, AZURE_API_VERSION) and MODEL in tests/llm/utils/classifiers.py, tests/llm/conftest.py, and holmes/core/llm.py. Don't suggest adding redundant validation logic.
docs/reference/http-api.md (1)
Learnt from: Sheeproid
PR: robusta-dev/holmesgpt#586
File: tests/llm/fixtures/test_ask_holmes/03_what_is_the_command_to_port_forward/test_case.yaml:4-4
Timestamp: 2025-07-02T10:27:17.231Z
Learning: In LLM-as-judge test cases for HolmesGPT, expected outputs should be descriptive rather than prescriptive when testing for flexible responses like port numbers. Using specific values in expected outputs can cause unnecessary test failures when the AI generates different but equally valid responses.
🪛 LanguageTool
docs/reference/helm-configuration.md

[style] ~48-~48: Consider shortening or rephrasing this to strengthen your wording.
Context: ...bled: true ... ``` > Note: After making changes to your configuration, run `holmes toolset...

(MAKE_CHANGES)

🪛 markdownlint-cli2 (0.17.2)
docs/reference/http-api.md

21-21: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


33-33: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


68-68: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


115-115: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


179-179: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


230-230: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


277-277: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


312-312: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: llm_evals
  • GitHub Check: Pre-commit checks
  • GitHub Check: Pre-commit checks

@pavangudiwada pavangudiwada requested a review from aantn July 16, 2025 13:57
@github-actions
Copy link
Contributor

Results of HolmesGPT evals

  • ask_holmes: 45/65 test cases were successful, 1 regressions

  • investigate: 14/16 test cases were successful, 0 regressions

Test suite Test case Status
ask_holmes 01_how_many_pods
ask_holmes 02_what_is_wrong_with_pod
ask_holmes 03_what_is_the_command_to_port_forward
ask_holmes 04_related_k8s_events
ask_holmes 05_image_version
ask_holmes 06_explain_issue
ask_holmes 07_high_latency
ask_holmes 08_sock_shop_frontend ⚠️
ask_holmes 09_crashpod
ask_holmes 10_image_pull_backoff
ask_holmes 11_init_containers
ask_holmes 12_job_crashing
ask_holmes 13_pending_node_selector
ask_holmes 14_pending_resources
ask_holmes 15_failed_readiness_probe
ask_holmes 16_failed_no_toolset_found
ask_holmes 17_oom_kill
ask_holmes 18_crash_looping_v2
ask_holmes 19_detect_missing_app_details
ask_holmes 20_long_log_file_search
ask_holmes 21_job_fail_curl_no_svc_account ⚠️
ask_holmes 22_high_latency_dbi_down ⚠️
ask_holmes 23_app_error_in_current_logs
ask_holmes 24_misconfigured_pvc
ask_holmes 25_misconfigured_ingress_class
ask_holmes 26_multi_container_logs
ask_holmes 27_permissions_error_no_helm_tools
ask_holmes 28_permissions_error_helm_tools_enabled
ask_holmes 29_events_from_alert_manager
ask_holmes 30_basic_promql_graph_cluster_memory
ask_holmes 31_basic_promql_graph_pod_memory
ask_holmes 32_basic_promql_graph_pod_cpu
ask_holmes 33_http_latency_graph
ask_holmes 34_memory_graph
ask_holmes 35_tempo
ask_holmes 36_argocd_find_resource
ask_holmes 37_argocd_wrong_namespace ⚠️
ask_holmes 38_rabbitmq_split_head
ask_holmes 39_failed_toolset
ask_holmes 40_disabled_toolset
ask_holmes 41_setup_argo
ask_holmes 42_dns_issues_result_all_tools ⚠️
ask_holmes 42_dns_issues_result_new_tools ⚠️
ask_holmes 42_dns_issues_result_old_tools ⚠️
ask_holmes 42_dns_issues_steps_new_all_tools ⚠️
ask_holmes 42_dns_issues_steps_new_tools ⚠️
ask_holmes 42_dns_issues_steps_old_tools ⚠️
ask_holmes 43_slack_deployment_logs
ask_holmes 44_slack_statefulset_logs ⚠️
ask_holmes 45_fetch_deployment_logs_simple
ask_holmes 46_job_crashing_no_longer_exists ⚠️
ask_holmes 47_truncated_logs_context_window ⚠️
ask_holmes 48_logs_since_thursday ⚠️
ask_holmes 49_logs_since_last_week ⚠️
ask_holmes 50_logs_since_specific_date ⚠️
ask_holmes 51_logs_summarize_errors
ask_holmes 52_logs_login_issues ⚠️
ask_holmes 53_logs_find_term
ask_holmes 54_not_truncated_when_getting_pods
ask_holmes 55_kafka_runbook ⚠️
ask_holmes 56_kafka_runbook_no_tool
ask_holmes 58_counting_pods_by_status ⚠️
ask_holmes 59_label_based_counting
ask_holmes 60_time_based_filtering
ask_holmes 61_exact_match_counting
investigate 01_oom_kill
investigate 02_crashloop_backoff
investigate 03_cpu_throttling
investigate 04_image_pull_backoff
investigate 05_crashpod
investigate 06_job_failure
investigate 07_job_syntax_error
investigate 08_memory_pressure
investigate 09_high_latency
investigate 10_KubeDeploymentReplicasMismatch
investigate 11_KubePodCrashLooping
investigate 12_KubePodNotReady
investigate 13_Watchdog
investigate 14_tempo
investigate 15_dns_resolution ⚠️
investigate 16_dns_resolution_no_tool ⚠️

Legend

  • ✅ the test was successful
  • ⚠️ the test failed but is known to be flakky or known to fail
  • ❌ the test failed and should be fixed before merging the PR

@pavangudiwada pavangudiwada merged commit 436a0d8 into master Jul 16, 2025
11 checks passed
@pavangudiwada pavangudiwada deleted the holmes-mkdocs branch July 16, 2025 17:25
@github-project-automation github-project-automation bot moved this from In progress to Done in DEPRECATED - HolmesGPT Roadmap Jul 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments