Agent Specification
ruvnet/ruflo
Agent skill for specification - invoke with $agent-specification
Run a structured discovery session to build an Allium specification through conversation.
$ npx skills add DataDog/datadog-agent --skill elicit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install DataDog/datadog-agent elicit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/DataDog/datadog-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/allium/skills/elicit .claude/skills/elicit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "elicit" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/allium/skills/elicit into .claude/skills/elicit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "elicit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/allium/skills/elicitType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add DataDog/datadog-agent --skill elicit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install DataDog/datadog-agent elicit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DataDog/datadog-agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/allium/skills/elicit .agents/skills/elicit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "elicit" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/allium/skills/elicit into .agents/skills/elicit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "elicit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add DataDog/datadog-agent --skill elicit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install DataDog/datadog-agent elicit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DataDog/datadog-agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/allium/skills/elicit .cursor/skills/elicit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "elicit" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/allium/skills/elicit into .cursor/skills/elicit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "elicit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/DataDog/datadog-agent.git --path .agents/skills/allium/skills/elicit--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add DataDog/datadog-agent --skill elicit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install DataDog/datadog-agent elicit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DataDog/datadog-agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/allium/skills/elicit .gemini/skills/elicit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "elicit" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/allium/skills/elicit into .gemini/skills/elicit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "elicit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install DataDog/datadog-agent elicitInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add DataDog/datadog-agent --skill elicit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/DataDog/datadog-agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/allium/skills/elicit .github/skills/elicit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "elicit" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/allium/skills/elicit into .github/skills/elicit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "elicit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add DataDog/datadog-agent --skill elicit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install DataDog/datadog-agent elicit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DataDog/datadog-agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/allium/skills/elicit .opencode/skills/elicit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "elicit" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/allium/skills/elicit into .opencode/skills/elicit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "elicit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
elicitRun a structured discovery session to build an Allium specification through conversation.
Elicit is an agent skill from DataDog/datadog-agent, published by the product's own GitHub organization. Run a structured discovery session to build an Allium specification through conversation. Use when the user wants to create a new spec from scratch, elicit or gather requirements, capture domain behaviour, specify a feature or system, define what a system should do, or is describing functionality and needs help shaping it into a specification.
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/library-spec-signals.md`).
The repository describes itself as: Main repository for Datadog Agent. The licence is Apache-2.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 20eff25. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Elicit loads about 3.7k tokens when it runs, and up to ~4.9k if it reads all its reference files. Until then it costs about 88 tokens; SKILL.md has 1,900 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from DataDog/datadog-agent at commit 20eff25, republished under its Apache-2.0 licence (© DataDog). 1,900 words, ~3,715 tokens.
.claude/skills/elicit/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.This skill guides you through building Allium specifications by conversation. The goal is to surface ambiguities and produce a specification that captures what the software does without prescribing implementation.
The same principles apply to distillation. Whether you are hearing a stakeholder describe a feature or reading code that implements it, the challenge is identical: finding the right level of abstraction.
Before diving into details, establish what you are specifying. Not everything needs to be in one spec.
"What's the boundary of this specification?" A complete system? A single feature area? One service in a larger system? Be explicit about what is in and out of scope.
"Are there areas we should deliberately exclude?" Third-party integrations might be library specs. Legacy features might not be worth specifying. Some features might belong in separate specs.
"Is this a new system or does code already exist?" If code exists, you are doing distillation with elicitation. Existing code constrains what is realistic to specify.
Capture scope at the start of every spec:
-- allium: 3
-- interview-scheduling.allium
-- Scope: Interview scheduling for the hiring pipeline
-- Includes: Candidacy, Interview, Slot management, Invitations, Feedback
-- Excludes:
-- - Authentication (use oauth library spec)
-- - Payments (not applicable)
-- - Reporting dashboards (separate spec)
-- Dependencies: User entity defined in core.alliumThe version marker (-- allium: N) must be the first line of every .allium file. Use the current language version number.
The hardest part of specification is choosing what to include and what to leave out. Too concrete and you are specifying implementation. Too abstract and you are not saying anything useful.
For every detail, ask: "Why does the stakeholder care about this?"
| Detail | Why? | Include? |
|---|---|---|
| "Users log in with Google OAuth" | They need to authenticate | Maybe not, "Users authenticate" might be sufficient |
| "We support Google and Microsoft OAuth" | Users choose their provider | Yes, the choice is domain-level |
| "Sessions expire after 24 hours" | Security/UX decision | Yes, affects user experience |
| "Sessions are stored in Redis" | Performance | No, implementation detail |
| "Passwords must be 12+ characters" | Security policy | Yes, affects users |
| "Passwords are hashed with bcrypt" | Security implementation | No, how not what |
Ask: "Could this be implemented differently while still being the same system?"
Examples:
Notification.created(channel: ...).Is this a category of thing, or a specific instance?
| Instance (implementation) | Template (domain-level) |
|---|---|
| Google OAuth | Authentication provider |
| Slack | Notification channel |
| 15 minutes | Link expiry duration (configurable) |
| Greenhouse ATS | External candidate source |
Sometimes the instance IS the domain concern. "We specifically integrate with Salesforce" might be a competitive feature. "We support exactly these three OAuth providers" might be design scope.
When in doubt, ask the stakeholder: "If we changed this, would it be a different system or just a different implementation?"
Too abstract: "Users can do things"
|
Product level: "Candidates can accept or decline interview invitations"
|
Too concrete: "Candidates click a button that POST to /api/invitations/:id/accept"Signs you are too abstract. The spec could describe almost any system. No testable assertions. Product owner says "but that doesn't capture..."
Signs you are too concrete. You are mentioning technologies, frameworks or APIs. You are describing UI elements (buttons, pages, forms). The implementation team says "why are you dictating how we build this?"
When you encounter a specific value (3 hours, 7 days, etc.), ask:
-- Hardcoded design decision
rule InvitationExpires {
when: invitation: Invitation.created_at + 7.days <= now
...
}
-- Configurable
config {
invitation_expiry: Duration = 7.days
}
rule InvitationExpires {
when: invitation: Invitation.created_at + config.invitation_expiry <= now
...
}Some logic is important but belongs at a different level:
-- Black box: we know it exists and what it considers, but not how
ensures: Suggestion.created(
interviewers: InterviewerMatching.suggest(
considering: {
role.required_skills,
Interviewer.skills,
Interviewer.availability,
Interviewer.recent_load
}
)
)The spec says there is a matching algorithm, that it considers these inputs and that it produces interviewer suggestions. The spec does not say how matching works, what weights are used or the specific algorithm.
This is the right level when the algorithm is complex and evolving, when product owners care about inputs and outputs rather than internals, and when a separate detailed spec could cover it if needed.
Goal: Understand what we are specifying and where the boundaries are.
Questions to ask:
Outputs: List of actors and roles. List of core entities. Boundary decisions (what is external). One-sentence description.
Watch for: Scope creep ("and it also does X, Y, Z", gently refocus). Assumed knowledge ("obviously it handles auth", make explicit).
Goal: Trace the main journey from start to finish.
Questions to ask:
Technique: Follow one entity through its lifecycle.
Candidacy:
pending_scheduling -> scheduling_in_progress -> scheduled ->
interview_complete -> feedback_collected -> decidedOutputs: State machines for key entities. Main triggers and their outcomes. Communication touchpoints.
Watch for: Jumping to edge cases too early ("but what if...", note it and stay on happy path). Implementation details creeping in ("the API endpoint...", redirect to outcomes).
Goal: Discover what can go wrong and how the system handles it.
Questions to ask:
Technique: For each rule, ask "what are all the ways requires could fail?"
Outputs: Timeout and deadline rules. Retry and escalation logic. Error states. Recovery paths.
Watch for: Infinite loops ("then it retries, then retries again...", need terminal states). Missing escalation, because eventually a human needs to know.
When stakeholders state system-wide properties ("balance never goes negative", "no two interviews overlap for the same candidate"), these are candidates for top-level invariants. Capture them as invariant Name { expression } declarations.
Goal: Clean up the specification and identify gaps.
Questions to ask:
Technique: Read back the spec and ask "does this match your mental model?"
Outputs: Complete entity definitions. Open questions documented. Deferred specifications identified. External boundaries confirmed.
When the same obligation pattern (e.g. a serialisation contract, a deterministic evaluation requirement) appears across multiple surfaces, suggest extracting it as a contract declaration for reuse.
Bad: "What entities do you have, and what states can they be in, and who can modify them?"
Good: "What are the main things this system manages?" Then: "Let's take [Candidacy]. What states can it be in?" Then: "Who can change a candidacy's state?"
When a choice arises, do not just accept the first answer. Explore consequences.
"You said invitations expire after 48 hours. What happens then?" "And if the candidate still hasn't responded after we retry?" "What if they never respond, is this candidacy stuck forever?"
This surfaces decisions they have not made yet.
When you hear implementation language, redirect:
| They say | You redirect |
|---|---|
| "The API returns a 404" | "So the user is informed it's not found?" |
| "We store it in Postgres" | "What information is captured?" |
| "The frontend shows a modal" | "The user is prompted to confirm?" |
| "We use a cron job" | "This happens on a schedule, how often?" |
Better to record an open question than assume.
"I'm not sure whether declining should return the candidate to the pool or remove them entirely. Let me note that as an open question."
open question "When candidate declines, do they return to pool or exit?"Abstract discussions get stuck. Ground them.
"Let's say Alice is a candidate for the Senior Engineer role. She's been sent an invitation with three slots. Walk me through what happens when she clicks on Tuesday 2pm."
It is normal to revise earlier decisions.
"Earlier we said all admins see all notifications. But now you're describing role-specific dashboards. Should we revisit that?"
Not everything needs to be specified now.
"This is getting into how the matching algorithm works. Should we defer that to a detailed spec?"
"We've covered the main flow. The reporting dashboard sounds like a separate specification."
When someone says "obviously" or "of course", probe. "You said obviously the admin approves. Is there ever a case where they don't need to? Could this be automated later?"
Some people want to cover every edge case immediately. "Let's capture that as an open question and stay on the main flow for now. We'll come back to edge cases."
Engineers especially jump to solutions. "I hear you saying we need real-time updates. At the domain level, what does the user need to see and when?"
Do not accept "yes" without specifics. "You said yes, candidates can reschedule. How many times? Is there a limit? What happens after that?"
Watch for actions without clear actors. "You said 'the slots are released'. Who or what releases them? Is it automatic, or does someone trigger it?"
When you hear two terms for the same concept, from different stakeholders, existing code or related specs, stop and resolve it before continuing.
"You said 'Purchase' but earlier we called this an 'Order'. Which term should we use?"
A comment noting that two terms are equivalent is not a resolution. It guarantees both will appear in the implementation. Pick one term, cross-reference related specs and update all references. Do not leave the old term anywhere, not even in "see also" notes.
Opening (5 min). Explain Allium briefly: "We're capturing what the software does, not how it's built." Set expectations: "I'll ask lots of questions, some obvious-seeming." Agree on scope for this session.
Scope definition (10-15 min). Identify actors, entities, boundaries. Get the one-sentence description.
Happy path (20-30 min). Trace main flow start to finish. Capture states, triggers, outcomes. Note communications.
Edge cases (15-20 min). Timeouts and deadlines. Failure modes. Escalation paths.
Wrap-up (5-10 min). Read back key decisions. List open questions. Identify next session scope if needed.
After session. Write up specification draft. Send for review. Note questions for next session.
For targeted changes where you already know what you want, use the tend agent. For substantial additions that need structured discovery (new feature areas, complex entity relationships, unclear requirements), elicit is still the right tool even if a spec already exists. Checking alignment between specs and implementation belongs to the weed agent.
© DataDog, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in .agents/skills/allium/skills/elicit of DataDog/datadog-agent.
Open the folder on GitHubat commit 20eff25
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in DataDog/datadog-agent, which our catalogue first saw on October 8, 2026.
Elicit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Elicit this skillDataDog/datadog-agent | 3.8k | 1 repos | ~3.7k | Automated safety check: Pass | Apache-2.0 | |
| Agent Specificationruvnet/ruflo | 74k | 3 repos | ~1.8k | Automated safety check: Pass | MIT | |
| Specificity Managementthedaviddias/Front-End-Checklist | 74k | — | ~477 | Automated safety check: Pass | MIT | |
| Create Specificationgithub/awesome-copilot | 40k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Update Specificationgithub/awesome-copilot | 40k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| PPTX Slide Specificationwshobson/agents | 40k | — | ~489 | Automated safety check: Pass | MIT |
ruvnet/ruflo
Agent skill for specification - invoke with $agent-specification
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Keep CSS specificity low and flat.
github/awesome-copilot
Create a new specification file for the solution, optimized for Generative AI consumption.
github/awesome-copilot
Update an existing specification file for the solution, optimized for Generative AI consumption based on new requirements or updates to any existing code.
wshobson/agents
A skill your agent uses when authoring or repairing a coordinate-explicit JSON specification for an editable PPTX deck.
github/awesome-copilot
Create GitHub Issue for feature request from specification file using featurerequest.yml template.
DataDog/datadog-agent
Classify a failed CI as either caused by an active incident, flakiness, or a true code regression.
DataDog/datadog-agent
Monitor the current PR's GitLab pipeline to completion, then report success, auto-fix, or investigate a failure.
DataDog/datadog-agent
A skill your agent uses when an engineer or manager asks to recap, summarize, or post an update on a Jira Epic — a progress update for an in-progress Epic (how far along it is, what's shipped so…
DataDog/datadog-agent
Explains a lading.yaml config file from the regression test suite, using the lading Rust source as ground truth for field meanings and defaults.
DataDog/datadog-agent
Extract an Allium specification from an existing codebase. An agent skill from DataDog/datadog-agent.
DataDog/datadog-agent
Run one already-written new-e2e test locally and triage the setup failures that stop it — "run the containers e2e tests", "my e2e run fails before any test starts".
Run a structured discovery session to build an Allium specification through conversation. Elicit is an agent skill from DataDog/datadog-agent, published by the product's own GitHub organization. Run a structured discovery session to build an Allium specification through conversation.
Elicit fits situations like: the user wants to create a new spec from scratch; gather requirements; capture domain behaviour; specify a feature.
Run `npx skills add DataDog/datadog-agent --skill elicit -a claude-code`. Or copy the skill folder (.agents/skills/allium/skills/elicit in DataDog/datadog-agent) into .claude/skills/elicit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add DataDog/datadog-agent --skill elicit -a codex`. Or copy the skill folder (.agents/skills/allium/skills/elicit in DataDog/datadog-agent) into .agents/skills/elicit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add DataDog/datadog-agent --skill elicit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/elicit, .gemini/skills/elicit, .github/skills/elicit and .opencode/skills/elicit in your project.
SKILL.md names no scripts, command-line tools or credentials: Elicit is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Elicit is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Elicit: Agent Specification (ruvnet/ruflo, 74k stars), Specificity Management (thedaviddias/Front-End-Checklist, 74k stars), Create Specification (github/awesome-copilot, 40k stars) and Update Specification (github/awesome-copilot, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
DataDog (a GitHub organization, an official publisher) maintains it in DataDog/datadog-agent, which has 3,757 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on October 8, 2026.
Source: DataDog/datadog-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.