Pewarta Proxy

📋 Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

⚙️ Pengaturan Proxy Target

Skip to content

feat(droid): add --no-model-invocation integration option - #5116

Open
echarrod wants to merge 3 commits into
github:mainfrom
echarrod:feat/2654-droid-no-model-invocation
Open

echarrod wants to merge 3 commits into
github:mainfrom
echarrod:feat/2654-droid-no-model-invocation

Conversation

@echarrod

@echarrod echarrod commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Description

Refs #2654. Follow-up to #4919 (Claude), as proposed there for Droid.

Adds a Droid-only integration option:

specify init my-project --integration droid --integration-options="--no-model-invocation"
  • It writes disable-model-invocation: true on the core speckit-* command skills, including preset overrides of them. Factory's skills docs say this "prevents Droid from invoking the skill automatically. Users can still invoke it directly." The default is unchanged.
  • Extension skills stay model-invocable, because mandatory hooks such as git's speckit.git.feature need the model to invoke them.
  • The option persists through integration.json, so specify integration upgrade droid reapplies it.

Differences from Claude:

  • The Factory docs do not say whether a skill with this flag keeps its description out of Droid's context, so the new docs section only claims that Droid will not invoke the skills automatically. The context-budget benefit that motivated Allow opting out of model invocation for installed skills (large monorepo skill-budget pain) #2654 is unverified for Droid.
  • Droid is multi_install_safe like Claude, so the lifecycle caveats (preset add/remove/update, bundles, integration use, switch when not default, upgrade --force) carry over unchanged.
  • Droid has no other integration options, so the docs line "There are no integration-specific setup options" now names this one.

Only the Droid package, its tests and docs/integrations/droid.md change; no shared base.py change.

AI Disclosure

  • I did not use AI assistance for this contribution
  • I did use AI assistance (fill in the disclosure below)

AI disclosure: Written for @echarrod by Claude Code (claude-sonnet-5-5) running autonomously. It wrote the code, tests and docs, ran the test suite and an automated /code-review medium. @echarrod reviewed it before marking it ready.

Droid skills are always written with `disable-model-invocation: false`.
`specify init --integration droid --integration-options="--no-model-invocation"`
now writes `true` for the core command skills (and preset overrides of
them) so Droid does not invoke them automatically; they stay available as
`/speckit-<command>`. The default is unchanged (github#2654).

Mirrors the Claude option from github#4919: setup() records the option, and
post_process_skill_content() applies it only to `speckit-<core>` skills in
CORE_COMMAND_NAMES, so extension skills stay model-invocable for mandatory
hooks. The option persists in .specify/integration.json and is reapplied by
`specify integration upgrade droid`. Commands that rewrite skills without
calling setup() (preset add/remove/update, integration use/switch) keep the
default; the docs say so and point at `upgrade droid --force`.

Assisted-by: Claude Code (model: claude-sonnet-5-5, autonomous)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J3taepmtmjGTxTn4W1xb7q
@echarrod
echarrod marked this pull request as ready for review October 25, 2026 18:32
@echarrod
echarrod requested a review from mnriem as a code owner October 25, 2026 18:32
@mnriem mnriem added the triage-nice-to-have Verdict: evidence-backed fix or greenlit feature — land after review label Oct 25, 2026
@mnriem
mnriem requested a max review from Copilot October 26, 2026 14:09

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The narrowly scoped change preserves default behavior and includes targeted lifecycle coverage, with only a non-blocking documentation nit remaining.

1 open issue
What changed in this PR

Adds an opt-in Droid setting that makes core Spec Kit skills user-invocable only, following the existing Claude option while preserving default behavior.

Changes:

  • Apply --no-model-invocation to core skills while keeping extension skills model-invocable.
  • Add coverage for option persistence, upgrades, resets, preset overrides, and extension hooks.
  • Document usage and lifecycle limitations.
File Description
tests/​integrations/​test_integration_droid.py Tests enabled/default behavior and lifecycle handling.
src/​specify_cli/​integrations/​droid/​__init__.py Declares the option and controls core-skill frontmatter.
docs/​integrations/​droid.md Explains usage, persistence, and reapplication caveats.

Review effort: Max

@mnriem

mnriem commented Oct 26, 2026

Copy link
Copy Markdown
Collaborator

Please address Copilot feedback

@mnriem mnriem added the author-awaiting Waiting on author response label Oct 26, 2026
The post_process_skill_content() docstring said skills are always both
user- and Droid-invocable, which is no longer true once
--no-model-invocation is set.

Assisted-by: Claude Code (model: claude-opus-5-5, autonomous)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015w5WirGUspLsYEpCkaHWxV
@echarrod

Copy link
Copy Markdown
Contributor Author

@mnriem Addressed the Copilot feedback in 90170de: the post_process_skill_content() docstring in src/specify_cli/integrations/droid/__init__.py now says skills are user- and Droid-invocable "by default", which matches docs/integrations/droid.md. That was the only open item. It is a docstring change only, with no change in behaviour.

Tests: tests/integrations/test_integration_droid.py 59 passed, 1 skipped; full suite 12813 passed, 434 skipped.

Disclosure: posted on behalf of @echarrod by Claude Code (model: claude-opus-5-5, autonomous mode). The agent made the change, ran the tests and wrote this comment.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

One or more reviewer sessions failed, leaving the review evidence incomplete.

No open issues 🎉

1 resolved since last review

Review effort: Max

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The opt-in Droid feature depends on unverified Factory runtime behavior for context-budget effects and workflow dispatch with disable-model-invocation: true, with no manual Droid validation evidence provided.

No open issues 🎉

Review effort: Max

@mnriem

mnriem commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator

Thanks for documenting the limitations. The option appears to fit within the integration boundary, but could you provide manual Droid validation showing that explicit user invocation and Spec Kit workflow dispatch still work with --no-model-invocation enabled? The context-budget benefit can remain unverified, as documented; the remaining concern before merging is whether the option preserves those supported execution paths.

AI disclosure: Drafted with GitHub Copilot assistance.

Validated against Droid 1.0.0: flagged core skills drop out of the model's
skill listing, /speckit-<command> and workflow dispatch still run them, and
the model can still invoke them via its Skill tool when a prompt names one.

Assisted-by: Claude Code (model: claude-opus-5-5, autonomous)
@echarrod

Copy link
Copy Markdown
Contributor Author

@mnriem Validation results for --no-model-invocation against a real Droid CLI. Both supported paths still work with the option on. In Droid 1.0.0 the flag also hides the skills from the model's skill listing, but it does not hard-block the model's Skill tool. I have updated docs/integrations/droid.md to say so in fc26130.

Setup:

  • Factory Droid 1.0.0 (darwin-arm64), headless droid exec.
  • Model: BYOK anthropic/claude-haiku-5.5 via OpenRouter (generic-chat-completion-api), with --auto high. The account has no Factory subscription, and every run reported factory_credits: 0.
  • Two projects initialised from this branch with --integration droid. One used --integration-options="--no-model-invocation" and has disable-model-invocation: true on all 10 core skills. The control used no options and has the flag on none.
Check Option on Control
droid exec "/speckit-specify a page that shows the current time" skill ran, specs/001-current-time-page/spec.md written same
specify workflow run with a one-step speckit.specify workflow (integration: droid) status: completed, specs/002-days-of-week-page/spec.md written same
Asked the model to list its available skills (no tools) no speckit-* skills listed all 10 speckit-* skills listed
droid exec "Use the speckit-specify skill to write a feature specification for a page that shows a random quote." model called Skill, the call succeeded, spec written same

For the workflow run, SPECKIT_INTEGRATION_DROID_EXTRA_ARGS was set to --settings <byok.json> -m custom:anthropic/claude-haiku-5.5 --auto high. With the option on, Droid expanded the slash invocation as user-selected:

The user has selected the following skill for immediate execution by typing /speckit-specify in their message; that token invokes the skill and is not a path or part of the request.

In the prose-named case, the model's tool call with the option on was {"toolName":"Skill","parameters":{"skill":"speckit-specify"}}. Droid returned "isError":false, Skill "speckit-specify" is now active.

Limits of this check:

  • The skill listing comes from the model's own report, not from inspecting the prompt. It suggests, but does not prove, that the descriptions are kept out of context.
  • Only the headless path was exercised. The interactive TUI was not.
  • One model, one Droid version.

Disclosure: posted for @echarrod by Claude Code (model: claude-opus-5-5, autonomous mode). The agent installed Droid, ran every check above, and wrote this comment and the docs change. @echarrod only authenticated the Droid CLI and did not test anything himself.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

No active review issues remain for the Droid-specific option to disable model invocation of core skills.

No open issues 🎉

Review effort: Balanced (auto)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author-awaiting Waiting on author response triage-nice-to-have Verdict: evidence-backed fix or greenlit feature — land after review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants