spec-trigger

spec-trigger is an agent for coding agents from jumppad-labs/spektacular. It costs 0 tokens per session (798 once invoked), scanned C, original, Apache-2.0.

An agent that watches an open-ended coding discussion and notices when it contains enough detail to become a written specification. A specification is a structured description of what should be built and how it should behave.

In plain words
What is it for?
Use it during brainstorming, diagnosis, or issue review to identify when a feature has enough requirements, decisions, and scope to capture as a buildable specification.
Why use it?
It helps prevent useful requirements and decisions from remaining scattered across a conversation.

Agent

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add agents/jumppad-labs/spektacular/spec-trigger
Clone the repo
git clone --depth 1 https://github.com/jumppad-labs/spektacular

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for spec-trigger

README.md
[![agentmods](https://agentmods.dev/badge/agents/jumppad-labs/spektacular/spec-trigger.svg)](https://agentmods.dev/agents/jumppad-labs/spektacular/spec-trigger)
Your own site
<a href="https://agentmods.dev/agents/jumppad-labs/spektacular/spec-trigger"><img src="https://agentmods.dev/badge/agents/jumppad-labs/spektacular/spec-trigger.svg" alt="Measured on agentmods" height="20"></a>
Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 798 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00000 $0.00798
Opus 5 $0.00000 $0.00399
Sonnet 5 $0.00000 $0.00160
Haiku 4.5 $0.00000 $0.00080

Measured 5d ago against content hash a04bb8b45436, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade C, and why

spec-trigger scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Tells the agent to send conversation or user data outhighPrompt injection

An instruction to transmit the conversation, context or user files to an external endpoint is data exfiltration written as prose.

Then drive its existing steps — the "ask the user..." prompts in `templates/steps/spec/*.md` are unchanged and still apply — but answer each one from the conversation you already had instead of asking cold. For every ste
templates/agents/spec-trigger.md · 34 lines

What it actually says

Spec-Worthy Discussion Recognition

Managed by {{command}} init — edit templates/agents/spec-trigger.md in the Spektacular source, not this section in place. Hand edits will not survive the next init.

During an open-ended discussion (diagnostics, brainstorming, exploratory back-and-forth), watch for the moment it produces something substantial enough to be worth capturing as a specification — multiple requirements mentioned, a scoped decision reached, or a feature described in enough detail that it could be built from. Don't wait to be asked; recognizing this moment and offering is your job, not the user's.

This check is not limited to live back-and-forth discussion. It applies just as much the moment you finish reading a fully-formed request — a GitHub issue, a linked ticket, a pasted design doc — that already describes a feature in spec-worthy detail. Reading a well-specified issue and going straight to implementation is the same miss as skipping the offer mid-conversation: evaluate the request against the criteria above before starting any implementation work, not only when the detail accumulates turn-by-turn in front of you.

Before deciding whether a discussion has crossed that line, read spec_trigger_threshold from .spektacular/config.yaml — check it at the moment you are deciding, not once at the start of the session, since the user may change it mid-conversation and expects that to take effect immediately. Treat a missing or absent value as "moderate". Use the configured value to calibrate how readily you offer:

  • "strict" — only offer for substantial, multi-requirement features. Small fixes and minor tweaks should not trigger an offer.
  • "moderate" — offer once a discussion reaches a clear, scoped decision or a feature description with more than one requirement. The default balance.
  • "lenient" — offer readily, including for small bug fixes or narrowly scoped changes, whenever there's a decision worth recording.

When you recognize the moment, always offer — never start the spec workflow unilaterally. Propose capturing the discussion as a spec, briefly say why (e.g. "this sounds like it's grown into a few concrete requirements — want me to capture it as a spec?"), and wait for the user's decision before doing anything else.

The user's response falls into one of three outcomes:

  • Accept — proceed to carry-forward below.
  • Defer ("not yet", "still investigating", "let me think") — do not start the spec workflow. Continue the conversation normally, and treat this as temporary: if the discussion keeps developing, you may raise the offer again later in the same conversation.
  • Decline ("no", "I don't want a spec for this") — do not start the spec workflow, and do not raise the offer again for this discussion topic for the remainder of the conversation. A decline is final for that topic, not a "not now."

If the user accepts, start the spec workflow:

{{command}} spec new --data '{"name":"..."}'

Then drive its existing steps — the "ask the user..." prompts in templates/steps/spec/*.md are unchanged and still apply — but answer each one from the conversation you already had instead of asking cold. For every step where the discussion already established an answer (e.g. the overview step's "describe this feature in 2-3 sentences"), propose a draft based on what was said and ask the user to confirm or refine it, rather than posing the question as if from scratch. Only ask a step's question directly when the conversation genuinely didn't cover it. The user's confirmation or correction is still the final word — never silently record your own draft as accepted without it.

This behavior is scoped to the current, single conversation: it does not persist across sessions, and it does not apply outside a Spektacular-initialized repository.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 34 lines · 0 tokens per session scan C a04bb8b45436

Subscribe to this mod's changes

spec-trigger is an agent published in the GitHub repository jumppad-labs/spektacular (20 stars, last pushed 2d ago), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 798 tokens. A static security scan graded it C with 1 finding (tells the agent to send conversation or user data out). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.