Compare commits

..

2 Commits

Author SHA1 Message Date
AFredefon
8adc7a2e00 refactor: simplify module metadata schema for AI discoverability 2026-02-10 21:35:22 +01:00
tduhamel42
3b521dba42 fix: update license badge and footer from Apache 2.0 to BSL 1.1 2026-02-10 18:31:37 +01:00
8 changed files with 24 additions and 95 deletions

View File

@@ -259,14 +259,6 @@ fuzzforge_ai/
--- ---
## 🗺️ What's Next
**[MCP Security Hub](https://github.com/FuzzingLabs/mcp-security-hub) integration** — Bridge 175+ offensive security tools (Nmap, Nuclei, Ghidra, and more) into FuzzForge workflows, all orchestrated by AI agents.
See [ROADMAP.md](ROADMAP.md) for the full roadmap.
---
## 🤝 Contributing ## 🤝 Contributing
We welcome contributions from the community! We welcome contributions from the community!

View File

@@ -33,16 +33,11 @@ package = true
# FuzzForge module metadata for AI agent discovery # FuzzForge module metadata for AI agent discovery
[tool.fuzzforge.module] [tool.fuzzforge.module]
identifier = "fuzzforge-cargo-fuzzer" identifier = "fuzzforge-cargo-fuzzer"
category = "fuzzer"
language = "rust"
pipeline_stage = "fuzzing"
pipeline_order = 3
suggested_predecessors = ["fuzzforge-harness-tester"] suggested_predecessors = ["fuzzforge-harness-tester"]
continuous_mode = true continuous_mode = true
typical_duration = "continuous"
use_cases = [ use_cases = [
"Run continuous coverage-guided fuzzing with libFuzzer", "Run continuous coverage-guided fuzzing on Rust targets with libFuzzer",
"Execute cargo-fuzz on validated harnesses", "Execute cargo-fuzz on validated harnesses",
"Produce crash artifacts for analysis", "Produce crash artifacts for analysis",
"Long-running fuzzing campaign" "Long-running fuzzing campaign"

View File

@@ -34,16 +34,11 @@ package = true
# FuzzForge module metadata for AI agent discovery # FuzzForge module metadata for AI agent discovery
[tool.fuzzforge.module] [tool.fuzzforge.module]
identifier = "fuzzforge-crash-analyzer" identifier = "fuzzforge-crash-analyzer"
category = "reporter"
language = "rust"
pipeline_stage = "crash-analysis"
pipeline_order = 4
suggested_predecessors = ["fuzzforge-cargo-fuzzer"] suggested_predecessors = ["fuzzforge-cargo-fuzzer"]
continuous_mode = false continuous_mode = false
typical_duration = "1m"
use_cases = [ use_cases = [
"Analyze crash artifacts from fuzzing", "Analyze Rust crash artifacts from fuzzing",
"Deduplicate crashes by stack trace signature", "Deduplicate crashes by stack trace signature",
"Triage crashes by severity (critical, high, medium, low)", "Triage crashes by severity (critical, high, medium, low)",
"Generate security vulnerability reports" "Generate security vulnerability reports"

View File

@@ -31,40 +31,25 @@ fuzzforge-modules-sdk = { workspace = true }
package = true package = true
# FuzzForge module metadata for AI agent discovery # FuzzForge module metadata for AI agent discovery
# See MODULE_METADATA.md for full documentation
[tool.fuzzforge.module] [tool.fuzzforge.module]
# REQUIRED: Unique module identifier (should match Docker image name) # REQUIRED: Unique module identifier (should match Docker image name)
identifier = "fuzzforge-module-template" identifier = "fuzzforge-module-template"
# REQUIRED: Module category - one of: analyzer, validator, fuzzer, reporter # Optional: List of module identifiers that should run before this one
category = "analyzer" suggested_predecessors = []
# Optional: Target programming language
language = "rust"
# Optional: Pipeline stage name
pipeline_stage = "analysis"
# Optional: Numeric order in pipeline (for sorting)
pipeline_order = 1
# Optional: List of module identifiers that must run before this one
dependencies = []
# Optional: Whether this module supports continuous/background execution # Optional: Whether this module supports continuous/background execution
continuous_mode = false continuous_mode = false
# Optional: Expected runtime (e.g., "30s", "5m", "continuous")
typical_duration = "30s"
# REQUIRED: Use cases help AI agents understand when to use this module # REQUIRED: Use cases help AI agents understand when to use this module
# Include language/target info here (e.g., "Analyze Rust crate...")
use_cases = [ use_cases = [
"FIXME: Describe what this module does", "FIXME: Describe what this module does",
"FIXME: Describe typical usage scenario" "FIXME: Describe typical usage scenario"
] ]
# REQUIRED: What inputs the module expects # REQUIRED: What inputs the module expects
input_requirements = [ common_inputs = [
"FIXME: List required input files or artifacts" "FIXME: List required input files or artifacts"
] ]

View File

@@ -31,40 +31,25 @@ fuzzforge-modules-sdk = { workspace = true }
package = true package = true
# FuzzForge module metadata for AI agent discovery # FuzzForge module metadata for AI agent discovery
# See MODULE_METADATA.md for full documentation
[tool.fuzzforge.module] [tool.fuzzforge.module]
# REQUIRED: Unique module identifier (should match Docker image name) # REQUIRED: Unique module identifier (should match Docker image name)
identifier = "fuzzforge-module-template" identifier = "fuzzforge-module-template"
# REQUIRED: Module category - one of: analyzer, validator, fuzzer, reporter # Optional: List of module identifiers that should run before this one
category = "analyzer" suggested_predecessors = []
# Optional: Target programming language
language = "rust"
# Optional: Pipeline stage name
pipeline_stage = "analysis"
# Optional: Numeric order in pipeline (for sorting)
pipeline_order = 1
# Optional: List of module identifiers that must run before this one
dependencies = []
# Optional: Whether this module supports continuous/background execution # Optional: Whether this module supports continuous/background execution
continuous_mode = false continuous_mode = false
# Optional: Expected runtime (e.g., "30s", "5m", "continuous")
typical_duration = "30s"
# REQUIRED: Use cases help AI agents understand when to use this module # REQUIRED: Use cases help AI agents understand when to use this module
# Include language/target info here (e.g., "Analyze Rust crate...")
use_cases = [ use_cases = [
"FIXME: Describe what this module does", "FIXME: Describe what this module does",
"FIXME: Describe typical usage scenario" "FIXME: Describe typical usage scenario"
] ]
# REQUIRED: What inputs the module expects # REQUIRED: What inputs the module expects
input_requirements = [ common_inputs = [
"FIXME: List required input files or artifacts" "FIXME: List required input files or artifacts"
] ]
@@ -72,3 +57,6 @@ input_requirements = [
output_artifacts = [ output_artifacts = [
"FIXME: List output files produced" "FIXME: List output files produced"
] ]
# REQUIRED: How AI should display output to user
output_treatment = "FIXME: Describe how to present the output"

View File

@@ -30,16 +30,11 @@ dev-dependencies = [
# FuzzForge module metadata for AI agent discovery # FuzzForge module metadata for AI agent discovery
[tool.fuzzforge.module] [tool.fuzzforge.module]
identifier = "fuzzforge-harness-tester" identifier = "fuzzforge-harness-tester"
category = "validator"
language = "rust"
pipeline_stage = "harness-testing"
pipeline_order = 2
suggested_predecessors = ["fuzzforge-rust-analyzer"] suggested_predecessors = ["fuzzforge-rust-analyzer"]
continuous_mode = false continuous_mode = false
typical_duration = "2m"
use_cases = [ use_cases = [
"Validate fuzz harnesses compile correctly", "Validate Rust fuzz harnesses compile correctly",
"Run short fuzzing trials to assess harness quality", "Run short fuzzing trials to assess harness quality",
"Provide detailed feedback for AI to improve harnesses", "Provide detailed feedback for AI to improve harnesses",
"Gate before running expensive long fuzzing campaigns" "Gate before running expensive long fuzzing campaigns"

View File

@@ -30,13 +30,8 @@ package = true
# FuzzForge module metadata for AI agent discovery # FuzzForge module metadata for AI agent discovery
[tool.fuzzforge.module] [tool.fuzzforge.module]
identifier = "fuzzforge-rust-analyzer" identifier = "fuzzforge-rust-analyzer"
category = "analyzer"
language = "rust"
pipeline_stage = "analysis"
pipeline_order = 1
suggested_predecessors = [] suggested_predecessors = []
continuous_mode = false continuous_mode = false
typical_duration = "30s"
use_cases = [ use_cases = [
"Analyze Rust crate to find fuzzable functions", "Analyze Rust crate to find fuzzable functions",

View File

@@ -53,36 +53,24 @@ class ModuleInfo:
#: Whether module image exists locally. #: Whether module image exists locally.
available: bool = True available: bool = True
#: Module category (analyzer, validator, fuzzer, reporter). #: Module identifiers that should run before this one.
category: str | None = None suggested_predecessors: list[str] | None = None
#: Target programming language (e.g., "rust", "python").
language: str | None = None
#: Pipeline stage name (e.g., "analysis", "fuzzing").
pipeline_stage: str | None = None
#: Numeric order in pipeline for sorting.
pipeline_order: int | None = None
#: Module identifiers that must run before this one.
dependencies: list[str] | None = None
#: Whether module supports continuous/background execution. #: Whether module supports continuous/background execution.
continuous_mode: bool = False continuous_mode: bool = False
#: Expected runtime (e.g., "30s", "5m", "continuous").
typical_duration: str | None = None
#: Typical use cases and scenarios for this module. #: Typical use cases and scenarios for this module.
use_cases: list[str] | None = None use_cases: list[str] | None = None
#: Input requirements (e.g., ["rust-source-code", "Cargo.toml"]). #: Common inputs (e.g., ["rust-source-code", "Cargo.toml"]).
input_requirements: list[str] | None = None common_inputs: list[str] | None = None
#: Output artifacts produced (e.g., ["fuzzable_functions.json"]). #: Output artifacts produced (e.g., ["fuzzable_functions.json"]).
output_artifacts: list[str] | None = None output_artifacts: list[str] | None = None
#: How AI should display/treat outputs.
output_treatment: str | None = None
class Runner: class Runner:
"""Main FuzzForge Runner interface. """Main FuzzForge Runner interface.
@@ -274,16 +262,12 @@ class Runner:
description=project_info.get("description"), description=project_info.get("description"),
version=project_info.get("version", image.tag), version=project_info.get("version", image.tag),
available=True, available=True,
category=fuzzforge_meta.get("category"), suggested_predecessors=fuzzforge_meta.get("suggested_predecessors", []),
language=fuzzforge_meta.get("language"),
pipeline_stage=fuzzforge_meta.get("pipeline_stage"),
pipeline_order=fuzzforge_meta.get("pipeline_order"),
dependencies=fuzzforge_meta.get("dependencies", []),
continuous_mode=fuzzforge_meta.get("continuous_mode", False), continuous_mode=fuzzforge_meta.get("continuous_mode", False),
typical_duration=fuzzforge_meta.get("typical_duration"),
use_cases=fuzzforge_meta.get("use_cases", []), use_cases=fuzzforge_meta.get("use_cases", []),
input_requirements=fuzzforge_meta.get("input_requirements", []), common_inputs=fuzzforge_meta.get("common_inputs", []),
output_artifacts=fuzzforge_meta.get("output_artifacts", []), output_artifacts=fuzzforge_meta.get("output_artifacts", []),
output_treatment=fuzzforge_meta.get("output_treatment"),
) )
) )