mirror of
https://github.com/github/spec-kit.git
synced 2026-08-03 06:26:30 +08:00
* feat(integrations): add Grok Build skills-based integration Add first-class support for xAI Grok Build via SkillsIntegration, installing speckit skills under .grok/skills and wiring init/invocation/catalog surfaces. Assisted-by: Grok Build (model: grok-4, supervised) * test+docs: address Copilot review on Grok multi-install and next steps Assert init next-steps guidance for Grok (.grok/skills, /speckit-*) and clarify that multi-install safety is path/manifest isolation, not agent-context defaults such as shared AGENTS.md. * fix(integrations): Grok headless --always-approve and isolation paths Document Grok multi-install isolation as .grok/skills and .grok/rules. Override build_exec_args to pass --always-approve so non-interactive dispatch is not blocked at tool permission gates. * docs(integrations): list only managed .grok/skills for Grok isolation Multi-install isolation documents Spec Kit-managed paths; Grok only writes .grok/skills, so drop the read-only .grok/rules entry. * fix(integrations): always-slash Grok hooks and refresh catalog date Move grok to ALWAYS_SLASH_AGENTS so hooks never emit /speckit.plan when ai_skills is missing/false. Update slash-format tests, persist ai_skills on init, and bump catalog updated_at for the Grok entry. --------- Co-authored-by: Nate Chadwick <1232206+natechadwick@users.noreply.github.com> Co-authored-by: test <test@example.com>
60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
"""Agent invocation-style constants and helpers.
|
|
|
|
Agents that scaffold skills (``speckit-<name>/SKILL.md``) use different
|
|
slash-command invocation formats depending on the agent. This module
|
|
centralises the mapping so that ``HookExecutor._render_hook_invocation``
|
|
and ``specify init``'s next-steps output stay consistent.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
# Agents that render $speckit-<name> (chat invocation) when in skills mode.
|
|
DOLLAR_SKILLS_AGENTS: frozenset[str] = frozenset({"codex", "zcode"})
|
|
|
|
# Agents that always render /speckit-<name>, regardless of ai_skills.
|
|
ALWAYS_SLASH_AGENTS: frozenset[str] = frozenset({"devin", "grok", "trae", "zed"})
|
|
|
|
# Agents that render /speckit-<name> only when ai_skills is enabled.
|
|
CONDITIONAL_SLASH_AGENTS: frozenset[str] = frozenset(
|
|
{
|
|
"agy",
|
|
"claude",
|
|
"copilot",
|
|
"cursor-agent",
|
|
"hermes",
|
|
"lingma",
|
|
"rovodev",
|
|
"vibe",
|
|
}
|
|
)
|
|
|
|
|
|
def is_dollar_skills_agent(selected_ai: str | None, ai_skills_enabled: bool) -> bool:
|
|
"""Return ``True`` if *selected_ai* uses ``$speckit-<name>`` invocations.
|
|
|
|
Agents in `DOLLAR_SKILLS_AGENTS` (e.g. ``codex``, ``zcode``) render
|
|
``$speckit-<name>`` chat invocations when installed in skills mode.
|
|
"""
|
|
if not isinstance(selected_ai, str):
|
|
return False
|
|
return selected_ai in DOLLAR_SKILLS_AGENTS and ai_skills_enabled
|
|
|
|
|
|
def is_slash_skills_agent(selected_ai: str | None, ai_skills_enabled: bool) -> bool:
|
|
"""Return ``True`` if *selected_ai* uses ``/speckit-<name>`` invocations.
|
|
|
|
The decision is based on the agent sets defined in this module:
|
|
|
|
* Agents in `ALWAYS_SLASH_AGENTS` always use slash invocations.
|
|
* Agents in `CONDITIONAL_SLASH_AGENTS` only use them when
|
|
*ai_skills_enabled* is ``True``.
|
|
* All other agents return ``False``.
|
|
"""
|
|
if selected_ai is None:
|
|
return False
|
|
if not isinstance(selected_ai, str):
|
|
return False
|
|
return selected_ai in ALWAYS_SLASH_AGENTS or (
|
|
selected_ai in CONDITIONAL_SLASH_AGENTS and ai_skills_enabled
|
|
)
|