Official agent skill

Propagate

by DataDog in DataDog/datadog-agent

Generate tests from Allium specifications. An agent skill from DataDog/datadog-agent.

OfficialApache-2.0Auto-check passedTesting & QA

Install Propagate

skills CLI
$ npx skills add DataDog/datadog-agent --skill propagate -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install DataDog/datadog-agent propagate --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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/propagate .claude/skills/propagate && rm -rf skills-src

Use ~/.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/

Facts

Skill name
propagate
GitHub stars
3.8k
Used in
1 other repo
Token cost
~3.5k tokens
SKILL.md length
1,805 words
Files
1
Skills in repo
35
Repo updated
First seen
Licence
Apache-2.0

At a glance

Generate tests from Allium specifications. An agent skill from DataDog/datadog-agent.

  • Works in 3 steps: Assertion-based tests → Property-based tests → State machine tests
  • The user wants to propagate tests
  • SKILL.md covers Prerequisites, Modes, Test output kinds and The implementation bridge, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Propagate is an agent skill from DataDog/datadog-agent, published by the product's own GitHub organization. Generate tests from Allium specifications. Use when the user wants to propagate tests, generate test files from a spec, write tests for a specification, create property-based tests, produce state machine tests, check test coverage against spec obligations, or understand what tests a specification requires.

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Test generation. The repository describes itself as: Main repository for Datadog Agent. The licence is Apache-2.0.

When your agent uses it

  • The user wants to propagate tests
  • Generate test files from a spec
  • Write tests for a specification
  • Create property-based tests

Example prompts

  • “/propagate”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Assertion-based tests
  2. Property-based tests
  3. State machine tests

What it can do on your machine

Read from SKILL.md and the folder at commit 20eff25. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Propagate loads about 3.5k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 1,805 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~79
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from DataDog/datadog-agent at commit 20eff25, republished under its Apache-2.0 licence (© DataDog). 1,805 words, ~3,542 tokens.

Download SKILL.mdSave it as .claude/skills/propagate/SKILL.md (or your agent's skills folder).
name
propagate
description
Generate tests from Allium specifications. Use when the user wants to propagate tests, generate test files from a spec, write tests for a specification, create property-based tests, produce state machine tests, check test coverage against spec obligations, or understand what tests a specification requires.
model
sonnet

Propagation

This skill generates tests from Allium specifications. Propagation is how plants reproduce from cuttings of the parent: the spec is the parent, the tests are the offspring.

Deterministic tools guarantee completeness (every spec construct maps to a test obligation). You handle the implementation bridge: correlating spec constructs with code, generating tests in the project's conventions.

Prerequisites

Before propagating tests, you need:

  1. An Allium spec — the .allium file describing the system's behaviour
  2. A target codebase — the implementation to test
  3. Test obligations — from allium plan <spec> (JSON listing every required test)
  4. Domain model — from allium model <spec> (JSON describing entity shapes, constraints, state machines)

If the CLI tools are not available, derive test obligations manually from the spec using the test-generation taxonomy in references/test-generation.md.

Modes

Surface mode

Generates boundary tests from surface declarations. Use when the user wants to test an API, UI contract or integration boundary.

For each surface in the spec:

  1. Exposure tests — verify each item in exposes is accessible to the specified actor, including for iteration over collections
  2. Provides tests — verify operations appear when their when conditions are true and are hidden otherwise, including when the corresponding rule's requires clauses are not met
  3. Actor restriction tests — verify the surface is not accessible to other actor types
  4. Actor identification tests — verify only entities matching the actor's identified_by predicate can interact; for actors with within, verify interaction is scoped to the declared context
  5. Context scoping tests — verify the surface instance is absent when no entity matches the context predicate
  6. Contract obligation tests — verify demands are satisfied by the counterpart, fulfils are supplied by this surface, including all typed signatures
  7. Guarantee tests — verify @guarantee annotations hold across the boundary
  8. Timeout tests — verify referenced temporal rules fire within the surface's context
  9. Related navigation tests — verify navigation to related surfaces resolves to the correct context entity
Spec mode

Walks the full test obligations document. Use when the user wants comprehensive test coverage for the entire specification.

Categories from the test-generation taxonomy:

  • Entity and value type tests — fields, types, optional (?) null handling, when-clause state-dependent presence, relationships, join lookups, equality
  • Enum tests — comparability across named enums, membership tests, inline enum isolation
  • Sum type tests — variant fields, type guards, exhaustiveness, creation via variant name, base .created trigger narrowing
  • Derived value and projection tests — computation, filtering, -> field extraction, parameterised derived values, now volatility, collection operations
  • Default instance tests — unconditional existence, field values, cross-references between defaults
  • Config tests — defaults, overrides, mandatory parameters, expression-form defaults, qualified references, config chains
  • Invariant tests — post-rule verification, edge cases, implication logic, entity-level invariants
  • Rule tests — success/failure/edge cases, conditionals (ensuring if guards read resulting state), entity creation, removal, bulk updates, rule-level for iteration, let bindings, chained triggers
  • State transition tests — valid/invalid transitions, terminal states, transitions_to vs becomes semantics
  • Temporal tests — deadline boundaries, re-firing prevention, optional field null behaviour
  • Surface tests — exposure, availability, actor identification with within scoping, context scoping, related navigation
  • Contract tests — signature satisfaction, @invariant honouring, demands/fulfils direction
  • Cross-module tests — qualified entity references, external trigger responses, type placeholder substitution
  • Cross-rule interaction tests — duplicate creation guards, provides availability
  • Transition graph tests — every declared edge is reachable via its witnessing rule, undeclared transitions are rejected, terminal states have no outbound rules, non-terminal states have at least one exit, exact correspondence between enum values and graph edges
  • State-dependent field tests — presence when in qualifying state, absence when outside, presence obligations on entering the when set, absence obligations on leaving, no obligation when moving within or outside, convergent transitions all set the field, guard required to access when-qualified fields, derived value when inference via input intersection
  • Scenario tests — happy path, edge cases, order independence

Test output kinds

1. Assertion-based tests

For deterministic obligations: field presence, enum membership, transition validity, surface exposure, state-dependent field presence and absence. These are standard unit/integration tests.

2. Property-based tests

For invariants and rule properties. Each expression-bearing invariant becomes a PBT property:

  • Generate a valid entity state using the generator spec
  • Apply a sequence of rules (following the transition graph when declared, or deriving valid sequences from rules alone)
  • Check the invariant holds at every step

Use the project's PBT framework:

LanguageFrameworkDiscovery
TypeScriptfast-checkpackage.json
PythonHypothesispyproject.toml
RustproptestCargo.toml
Gorapidgo.mod
ElixirStreamDatamix.exs

Fall back to assertion-based tests if no PBT framework is present.

3. State machine tests

For entities with status enums. When a transition graph is declared, walk every path through the graph. When no graph is declared, derive valid transitions from rules.

  • Verify transitions succeed via witnessing rules
  • Verify rejected transitions fail
  • Verify state-dependent fields are present or absent at each state per their when clauses
  • Verify invariants hold at each state

State machine tests require an action map: a function per transition edge that takes the entity in the source state and produces it in the target state by calling the actual implementation code. Without this map, the test framework can describe valid paths through the graph but cannot execute them.

To build the action map:

  1. For each edge in the transition graph, find the witnessing rule in the spec
  2. Find the code implementing that rule (the implementation bridge)
  3. Write a test action that sets up the preconditions (requires clauses), invokes the code, and returns the entity in the target state
  4. Register the action under the (from_state, to_state) key

Once the map is built, the PBT framework can walk random valid paths: start at any non-terminal state, pick a random outbound edge, apply its action, check all entity-level invariants, repeat. The path length and starting state are generated randomly. This is the fullest expression of the spec's transition graph as a test.

The implementation bridge

You correlate spec constructs with implementation code, the same way the weed agent correlates for divergence checking.

For surface tests

Map surfaces to their implementation:

  • API surfaces map to endpoints (REST routes, GraphQL resolvers, gRPC services)
  • UI surfaces map to components or pages
  • Integration surfaces map to message handlers or SDK methods

Discover the mapping by reading the codebase. Look for naming patterns, route definitions and handler registrations.

For internal tests

For each rule in the spec:

  1. Find the code implementing the rule (service method, event handler, state machine transition)
  2. Determine how to instantiate the entities involved (factories, builders, fixtures)
  3. Determine how to invoke the rule (API call, method call, event dispatch)
  4. Determine how to assert postconditions (database queries, return values, event assertions)
Show full SKILL.md (729 more words)Show less
For temporal tests

Temporal triggers (deadline-based rules) need a controllable time source in the test. If the implementation uses wall-clock time (Instant.now(), System.currentTimeMillis()), the test cannot reliably position itself before, at or after a deadline.

Before attempting temporal tests, check whether the component accepts an injected clock or time parameter. Common patterns: a Clock parameter on the constructor, an epoch-millisecond argument on the method, a TimeProvider interface. If the seam exists, inject a controllable time source. If it does not, flag this as a test infrastructure gap: the temporal tests cannot be generated until the component supports time injection. Do not attempt to test temporal behaviour by sleeping or racing against wall-clock time.

For cross-module trigger chains

When a rule emits a trigger that another spec's rule receives (e.g. the Arbiter emits ClerkReceivesEvent, the Clerk handles it), testing the chain requires multiple components wired together.

Before generating cross-module tests:

  1. Trace the trigger emission graph from the plan output: which rules emit triggers, and which rules in other specs receive them
  2. Check whether the codebase has an existing integration test fixture that wires the participating components (a pipeline test, an end-to-end test helper, a test harness class)
  3. If a fixture exists, reuse it. Cross-module tests should compose existing wiring, not rebuild it
  4. If no fixture exists, generate only the test skeleton with TODOs marking where component wiring is needed

Cross-module tests are integration tests by nature. They verify that the spec's trigger chains are faithfully implemented across component boundaries, but the setup cost is high. Prioritise them after single-component tests are passing.

Reusing existing tests

When exploring the codebase, note which spec obligations are already covered by existing tests. An existing integration test that exercises the happy path from event submission through to acknowledged output already covers multiple rule_success obligations and the end-to-end scenario.

When an existing test covers a spec obligation, reference it rather than generating a duplicate. The propagate skill's value at the integration level is verifying that coverage is complete against the spec's obligation list, identifying gaps, and generating tests to fill them. Replacing working hand-written tests with generated equivalents adds no value.

For deferred specs

Deferred specifications are fully specified in separate files. When the target codebase doesn't include the deferred spec's module, generate a test stub with a placeholder:

typescript
// TODO: deferred spec — InterviewerMatching.suggest
// This behaviour is specified as deferred. Provide a mock or skip.

Process

  1. Read the spec — understand entities, rules, surfaces, invariants, transition graphs, state-dependent fields, contracts, config, defaults
  2. Read test obligations — from allium plan output or manual derivation
  3. Read domain model — from allium model output or manual derivation
  4. Explore the codebase — find existing tests, test framework, entity implementations, rule implementations
  5. Map constructs to code — correlate spec entities/rules/surfaces with implementation classes/functions/endpoints
  6. Generate tests — produce test files following the project's conventions
  7. Verify tests compile/run — ensure generated tests are syntactically valid
Discovery checklist

Before generating tests, establish:

  • Test framework and runner (Jest, pytest, cargo test, etc.)
  • PBT framework if present (fast-check, Hypothesis, proptest, etc.)
  • Test file location conventions (co-located, __tests__/, tests/, etc.)
  • Entity/model location and patterns (classes, interfaces, structs)
  • Factory/fixture patterns for test data
  • How state transitions are implemented (methods, events, state machines)
  • How surfaces are implemented (routes, controllers, resolvers)
  • Existing test helpers or utilities
  • Whether components accept injected time sources for temporal tests
  • Whether an integration test fixture exists for cross-module trigger chains
  • Which spec obligations are already covered by existing tests
Generator awareness

When generator specs are available, use them to produce valid test data:

  • Respect field types and constraints
  • For entities with transition graphs, generate entities at specific lifecycle states with correct field presence per when clauses (e.g. a shipped Order has tracking_number and shipped_at populated; a pending Order does not)
  • For invariants, generate states that exercise boundary conditions
  • For config parameters, use declared defaults unless testing overrides

Interaction with other tools

  • distill produces specs from code. Those specs feed propagate.
  • weed checks alignment. After propagating tests, weed verifies spec-code match.
  • tend evolves specs. After spec changes, run propagate again to update tests.
  • elicit builds specs through conversation. Once a spec is ready, propagate generates tests.

Limitations

  • Generated tests are a starting point. They may need adjustment for project-specific patterns.
  • The implementation bridge is LLM-mediated. Complex or unusual codebases may need manual guidance on the mapping.
  • Cross-module test generation is not yet supported. Each spec generates tests independently.
  • Runtime trace validation and model checking are separate workstreams.

© 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

Files

Just SKILL.md in .agents/skills/allium/skills/propagate of DataDog/datadog-agent.

Open the folder on GitHubat commit 20eff25

Used in 1 other repository

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.

Compare with similar skills

Propagate 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.

Propagate compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Propagate this skillDataDog/datadog-agent3.8k1 repos~3.5kAutomated safety check: PassApache-2.0
Emcaklofas/kicad-happy1.4k1 repos~2.8kAutomated safety check: PassMIT
Swig Testswig/swig6.3k—~2.3kAutomated safety check: PassCustom licence
Generate Test Cases342164796/generate-test-cases1191 repos~2.9kAutomated safety check: PassNone
Verify Cc Safety Netkenryu42/cc-safety-net1.6k—~2kAutomated safety check: PassMIT
Wioworkersio/skills190—~5.8kAutomated safety check: PassMIT

Similar skills

  • Emc

    aklofas/kicad-happy

    EMC pre-compliance risk analysis for KiCad PCB designs — 18 check categories, 44 rule IDs covering ground planes, decoupling, I/O filtering, switching harmonics, clock routing, differential pair…

    1.4k GitHub starsUsed in 1 repo~2.8k tokens
    Testing & QAAuto-check passed
  • Swig Test

    swig/swig

    Run SWIG test suite for specific languages. An agent skill from swig/swig.

    6.3k GitHub stars~2.3k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Generate Test Cases

    342164796/generate-test-cases

    自主学习型测试文档生成器。从需求文档(Markdown)生成测试用例 XMind 文件,支持持久化记忆和持续学习。当用户提到"生成测试用例"、"根据需求生成测试"时触发。

    119 GitHub starsUsed in 1 repo~2.9k tokens
    Testing & QAAuto-check passed
  • Verify Cc Safety Net

    kenryu42/cc-safety-net

    Launch and drive the real cc-safety-net CLI — the hook decision path, explain, status/doctor, logs, and the local policy GUI — against an isolated home, capturing evidence.

    1.6k GitHub stars~2k tokensUpdated today
    Testing & QAAuto-check passed
  • Wio

    workersio/skills

    Testing workflow skill for finding high-value test candidates, writing focused tests, generating realistic workloads, reviewing test value, and diagnosing test-suite health.

    190 GitHub stars~5.8k tokensUpdated 2 mo ago
    Testing & QAAuto-check passed
  • File Server

    microsoft/WindowsProtocolTestSuites

    Official

    ALWAYS LOAD THIS SKILL when working with FileServer, SMB, SMB2, SMB3, CIFS, file sharing, MS-SMB2, MS-FSCC, MS-FSA, MS-DFSC, MS-FSRVP, MS-RSVD, MS-SQOS, or any file server protocol test…

    567 GitHub stars~4.1k tokensUpdated 22 days ago
    Testing & QAAuto-check passed

More from DataDog/datadog-agent

All 35 skills in this repo
  • Triage CI Failure

    DataDog/datadog-agent

    Official

    Classify a failed CI as either caused by an active incident, flakiness, or a true code regression.

    3.8k GitHub stars~2.3k tokensUpdated today
    Auto-check passed
  • Elicit

    DataDog/datadog-agent

    Official

    Run a structured discovery session to build an Allium specification through conversation.

    3.8k GitHub starsUsed in 1 repo~3.7k tokens
    Auto-check passed
  • Follow PR

    DataDog/datadog-agent

    Official

    Monitor the current PR's GitLab pipeline to completion, then report success, auto-fix, or investigate a failure.

    3.8k GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Create Epic Recap

    DataDog/datadog-agent

    Official

    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…

    3.8k GitHub stars~5k tokensUpdated today
    Auto-check: notes
  • Explain Lading Config

    DataDog/datadog-agent

    Official

    Explains a lading.yaml config file from the regression test suite, using the lading Rust source as ground truth for field meanings and defaults.

    3.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Distill

    DataDog/datadog-agent

    Official

    Extract an Allium specification from an existing codebase. An agent skill from DataDog/datadog-agent.

    3.8k GitHub starsUsed in 1 repo~7k tokens
    Auto-check passed

Categories

Questions about Propagate

What does Propagate do?

Generate tests from Allium specifications. An agent skill from DataDog/datadog-agent. Propagate is an agent skill from DataDog/datadog-agent, published by the product's own GitHub organization. Generate tests from Allium specifications.

When should I use Propagate?

Propagate fits situations like: the user wants to propagate tests; generate test files from a spec; write tests for a specification; create property-based tests.

How do I install Propagate in Claude Code?

Run `npx skills add DataDog/datadog-agent --skill propagate -a claude-code`. Or copy the skill folder (.agents/skills/allium/skills/propagate in DataDog/datadog-agent) into .claude/skills/propagate in your project. Claude Code loads it when a task matches its description.

How do I install Propagate in Codex?

Run `npx skills add DataDog/datadog-agent --skill propagate -a codex`. Or copy the skill folder (.agents/skills/allium/skills/propagate in DataDog/datadog-agent) into .agents/skills/propagate in your project. Codex loads it when a task matches its description.

Can I use Propagate in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add DataDog/datadog-agent --skill propagate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/propagate, .gemini/skills/propagate, .github/skills/propagate and .opencode/skills/propagate in your project.

What does Propagate need to run?

SKILL.md names no scripts, command-line tools or credentials: Propagate is instructions for the agent only. Our summary lists: Python 3.

Does Propagate access the network?

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.

Is Propagate safe to install?

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.

What licence does Propagate use?

Propagate 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.

How many tokens does Propagate use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Propagate?

Skills that share tags, products or a category with Propagate: Emc (aklofas/kicad-happy, 1.4k stars), Swig Test (swig/swig, 6.3k stars), Generate Test Cases (342164796/generate-test-cases, 119 stars) and Verify Cc Safety Net (kenryu42/cc-safety-net, 1.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Propagate?

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.