Formula create
Skill stempeck/agentfactory/internal/cmd/install_skills/formula-create
Multi-agent orchestration CLI for Claude Code — declarative TOML workflows, autonomous agents, context-compression recovery, inter-agent mail.
npx -y skills add stempeck/agentfactory --skill formula-createAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Create a new agentfactory formula from a description or SKILL.md file. Generates a properly structured TOML formula with steps, dependencies, inputs, and iteration mechanisms. When given a SKILL.md, preserves phase gates as separate formula steps with enforcement language.
SKILL.md
8.3 KB, as published. Nobody here has run it
Formula Create - Generate agentfactory Workflow Formulas
Create new formulas from natural language descriptions, following agentfactory conventions.
Usage
/formula-create "description of what the formula should accomplish"
/formula-create .claude/skills/<name>/SKILL.md
Examples
/formula-create "Review a PR for security vulnerabilities and generate a report"
/formula-create "Convert markdown docs to HTML and deploy to S3"
/formula-create .claude/skills/rapid-implement/SKILL.md
Implementation
When invoked with a description, create a formula following these rules:
1. Determine Formula Type
Use step-based workflow (default) when:
- Steps have sequential dependencies (output of one feeds into next)
- Work must happen in order
- Iteration/looping may be needed
Use convoy type only when:
- Multiple agents can work on the SAME input in parallel
- Each leg examines the input from a different perspective
- A synthesis step combines parallel outputs
2. Formula Structure
description = """
One-sentence summary ending with a period.
Remaining paragraphs describe the workflow overview and expected outcomes.
The first sentence (up to the first period) becomes the agent's short description
in agents.json — it MUST be a plain sentence, not a heading or markdown.
"""
formula = "<name>"
version = 1
skills = ["skill-a", "skill-b"] # Skills invoked by Skill() calls in step descriptions
# Inputs - parameters provided at runtime
[inputs]
[inputs.example_input]
description = "What this input is for"
type = "string" # string, number, boolean
required = true # or false with default
[inputs.optional_input]
description = "Optional parameter"
type = "string"
required = false
default = "default-value"
# Steps - sequential workflow with dependencies
[[steps]]
id = "step-id"
title = "Human-readable step title"
description = """
**Entry criteria:** What must be true before this step runs.
**Actions:**
1. First action to take
2. Second action to take
3. Third action to take
**Exit criteria:**
- What must be true when step completes
- Verifiable outcomes
"""
[[steps]]
id = "next-step"
title = "Next step title"
needs = ["step-id"] # CRITICAL: Enforce sequencing
description = """..."""
# Variables - template substitution
[vars]
[vars.example_var]
description = "Variable description"
required = true
3. Step Design Rules
Every step MUST have:
id: lowercase-kebab-case identifiertitle: Short human-readable namedescription: Detailed instructions with entry/exit criteria
Sequential steps MUST have:
needs = ["previous-step-id"]to enforce ordering
Step descriptions should include:
**Entry criteria:** [preconditions]
**Actions:**
1. [specific action]
2. [specific action]
...
**Exit criteria:**
- [verifiable outcome]
- [verifiable outcome]
4. Common Patterns
Quality Gate with Iteration:
[[steps]]
id = "quality-gate"
title = "Assess quality and decide iteration"
needs = ["validation-step"]
description = """
**Entry criteria:** Validation complete.
**Actions:**
1. Run quality checklist
2. Count issues found
3. **Decision logic:**
- IF all checks pass → proceed to finalize
- ELSE IF iteration < max_iterations → loop back to review step
- ELSE → force completion with warnings
**Exit criteria:**
- Quality assessment complete
- Next action determined
"""
Load/Parse Input:
[[steps]]
id = "load-input"
title = "Load and parse input"
description = """
**Entry criteria:** Input source available.
**Actions:**
1. Read input from {{input_path}} or {{input_bead}}
2. Parse and extract structured data
3. Store parsed data in step bead for downstream steps
**Exit criteria:**
- Input fully loaded and parsed
- Structured data available for next steps
"""
Finalize/Commit:
[[steps]]
id = "finalize"
title = "Finalize and commit results"
needs = ["quality-gate"]
description = """
**Entry criteria:** Quality gate passed.
**Actions:**
1. Write final output to {{output_path}}
2. git add && git commit with descriptive message
3. git push to remote
4. Create PR with summary
**Exit criteria:**
- Output committed and pushed
- PR created
"""
5. Convoy Formula Structure (Parallel Execution)
Only use when legs genuinely work in parallel on same input:
formula = "convoy-<name>"
type = "convoy"
version = 1
[prompts]
base = """
Context injected into all legs.
"""
[[legs]]
id = "perspective-1"
title = "First perspective"
focus = "What this leg focuses on"
description = """Instructions for this parallel worker."""
[[legs]]
id = "perspective-2"
title = "Second perspective"
focus = "Different focus area"
description = """Instructions for this parallel worker."""
[synthesis]
title = "Combine results"
description = """Combine all leg outputs into final result."""
depends_on = ["perspective-1", "perspective-2"]
6. Naming Conventions
- Formula name:
<descriptive-name>for molecules,convoy-<name>for convoys - Step IDs:
lowercase-kebab-case - Input names:
snake_case - File:
<formula-name>.formula.toml
7. Output Location
Write the formula to:
.agentfactory/store/formulas/<formula-name>.formula.toml
This is the runtime formula directory for the current project. Formulas here are discoverable
by af sling and the formula system at runtime.
8. Post-Creation
After creating the formula, inform the user:
Formula created: .agentfactory/store/formulas/<name>.formula.toml
To inspect:
af formula show <name> --json # View formula inputs and vars
To use immediately (current workspace):
af sling --formula <name> --var x=y # Execute the formula
To embed in agentfactory binary:
make build && make install # Rebuild with new formula embedded
To test: Create a sample input and run af sling --formula <name> --var input=path
9. Reference Existing Formulas
Before creating a new formula, examine existing formulas for patterns:
ls .agentfactory/store/formulas/ # List available formulas
cat .agentfactory/store/formulas/*.formula.toml # View formula patterns
Key reference formulas:
gherkin-breakdown.formula.toml- Iteration pattern with quality gatesfactoryworker.formula.toml- Standard work execution patternmergepatrol.formula.toml- Patrol/monitoring patterndesign.formula.toml- Human-in-the-loop review pattern
10. SKILL.md Input Mode
When invoked with a path to a SKILL.md file (instead of a prose description), read
and follow the instructions in skillmd-mode.md in this skill directory.
Detection: If the argument is a file path ending in SKILL.md, use this mode.
Anti-Patterns to Avoid
- Convoy with sequential legs - If legs depend on each other's output, use steps instead
- Missing
needs- Steps withoutneedsmay run out of order - Vague descriptions - Always include specific actions and exit criteria
- No iteration mechanism - For review workflows, add a quality gate
- Hardcoded paths - Use input variables for flexibility
- Writing outside .agentfactory/store/formulas/ - Formulas must be written to
.agentfactory/store/formulas/ - Claiming completion without verification - Always verify the formula file exists after creation
- Assuming a proposal file exists - Agents get requirements from beads, which may contain inline text, a file path, or a GitHub issue link. Use source-agnostic language ("requirements" not "proposal")
- Omitting invariant steps - Every work execution formula MUST include all 10 invariant steps: load-context, branch-setup, validate-contract, preflight-tests, self-review, run-tests, self-verify, cleanup-workspace, prepare-for-review, submit-and-exit. Source the 8 standard steps from factoryworker and the 2 architecture gates (validate-contract, self-verify) from rapid-implement. Skills don't know about agentfactory architecture — that's formula-create's job to inject