Skip to content

[DOCS] Tool naming convention: AGENTS.md and .gemini/styleguide.md disagreeΒ #943

Description

@kingpanther13

πŸ“š Documentation Issue

Where is the issue?

Other β€” contributor documentation (AGENTS.md and .gemini/styleguide.md)

What's wrong or unclear?

AGENTS.md and .gemini/styleguide.md give incongruent rules for MCP tool naming, which causes two concrete problems:

  1. A contributor who follows one doc will be flagged by Gemini Code Assist when the other runs on their PR.
  2. Neither doc matches the actual tool surface. A significant fraction of current tools don't fit the stated rule, and the rule's own examples contradict the rule's pattern line.

Specific incongruences:

AGENTS.md β†’ Writing MCP Tools β†’ Naming Convention:

  • States the pattern is ha_<verb>_<noun>.
  • Lists 7 verbs: get, list, search, set, delete, remove, call.
  • But the examples for set, delete, and remove all show a ha_config_<verb>_<noun> form (ha_config_set_helper, ha_config_delete_dashboard, ha_config_remove_area) β€” i.e., config sits in the verb slot, which doesn't match the opening pattern line. So the rule line and its own examples disagree about whether a ha_config_* namespace prefix is allowed.

.gemini/styleguide.md β†’ Tool Naming Convention:

  • Says tools MUST follow ha_<verb>_<noun>.
  • Lists only 6 verbs: get, list, search, set, delete, call. remove is missing.
  • Flags MEDIUM severity if tools don't follow the pattern.
  • Doesn't mention the ha_config_* namespace variant at all.

Result: any tool named ha_remove_* or ha_config_remove_* follows AGENTS.md but will be flagged MEDIUM by Gemini Code Assist. Any tool in the ha_config_<verb>_* family strictly violates both docs' opening pattern line but is blessed by AGENTS.md's examples.

Current state of the tool surface (86 tools audited):

  • 34 strictly conforming to ha_<verb>_<noun> (e.g., ha_get_state, ha_set_entity, ha_call_service, ha_set_config_entry_helper).
  • 34 in the ha_config_<verb>_<noun> family (e.g., ha_config_set_helper, ha_config_set_automation, ha_config_remove_area). Blessed by AGENTS.md examples; not by the pattern line; not mentioned in the gemini styleguide.
  • ~18 exceptions using verbs outside the approved list (backup_create, backup_restore, check_config, eval_template, hacs_*, import_blueprint, install_mcp_tools, read_file, reload_core, report_issue, restart, update_device, write_file, deep_search, bulk_control). Some of these (like ha_restart, ha_reload_core, ha_report_issue) are one-off operations where forcing a get/set/call verb would read worse than the current name; those should probably stay as-is and be documented as accepted exceptions.

How should it be fixed?

Pick one of these two directions and make both docs internally consistent with each other and with the tool surface:

Option A β€” Update the docs to match reality. Keep the current tool names. Rewrite AGENTS.md so the rule line explicitly permits the ha_[config_]<verb>_<noun> shape (or documents ha_config_* as an accepted namespace prefix for config-management tools). Add remove to the gemini styleguide. Document a short list of accepted one-off exceptions (ha_restart, ha_reload_core, ha_report_issue, etc.) so they stop being violations-that-aren't. This is the low-churn option and probably the right one.

Option B β€” Update the tool names to match the rule. Rename the 34-tool ha_config_* family to strictly follow ha_<verb>_<noun> (e.g., ha_config_set_helper β†’ ha_set_helper, ha_config_set_automation β†’ ha_set_automation, etc.). High churn, touches every client, every doc, every test, and collides with ha_set_config_entry_helper's existing name.

Either way, after the fix:

  • AGENTS.md's rule line and its examples should agree.
  • AGENTS.md and .gemini/styleguide.md should use the same verb list and the same pattern.
  • Accepted exceptions should be listed explicitly so Gemini Code Assist and contributors stop flagging them.

Additional context

This came up while working on #942 (hardening ha_config_set_yaml's description). The investigation exposed that ha_config_set_helper doesn't accept helper_type="template" while ha_set_config_entry_helper does β€” which is a separate (semantic) issue, but the naming inconsistency between the two tools made the confusion worse. This issue is specifically about the documentation vs. tool-surface drift; the helper-tool-merge question is deliberately out of scope here.

One-off tools like ha_restart, ha_reload_core, ha_report_issue, ha_check_config, and similar should be explicitly allowed as exceptions rather than renamed β€” those names are clearer as-is than forcing them into a ha_call_<noun> or ha_get_<noun> shape.

Additionally I'd like to add "manage" as a verb, OR alternatively add into the agents/styleguide that we can add new verbs if no other verb fits when adding new types of tools.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationtriaged

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions