diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 638be6e..a58b374 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Contributing to FuzzForge OSS +# Contributing to FuzzForge AI -Thank you for your interest in contributing to FuzzForge OSS! We welcome contributions from the community and are excited to collaborate with you. +Thank you for your interest in contributing to FuzzForge AI! We welcome contributions from the community and are excited to collaborate with you. **Our Vision**: FuzzForge aims to be a **universal platform for security research** across all cybersecurity domains. Through our modular architecture, any security tool—from fuzzing engines to cloud scanners, from mobile app analyzers to IoT security tools—can be integrated as a containerized module and controlled via AI agents. @@ -360,8 +360,8 @@ Beyond modules, you can contribute to FuzzForge's core components. 1. **Clone and Install** ```bash - git clone https://github.com/FuzzingLabs/fuzzforge-oss.git - cd fuzzforge-oss + git clone https://github.com/FuzzingLabs/fuzzforge-ai.git + cd fuzzforge-ai uv sync --all-extras ``` @@ -538,7 +538,7 @@ Before submitting a new module: ## License -By contributing to FuzzForge OSS, you agree that your contributions will be licensed under the same license as the project (see [LICENSE](LICENSE)). +By contributing to FuzzForge AI, you agree that your contributions will be licensed under the same license as the project (see [LICENSE](LICENSE)). For module contributions: - Modules you create remain under the project license diff --git a/Makefile b/Makefile index a5ebc7e..64048c3 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ SHELL := /bin/bash # Default target help: - @echo "FuzzForge OSS Development Commands" + @echo "FuzzForge AI Development Commands" @echo "" @echo " make install - Install all dependencies" @echo " make sync - Sync shared packages from upstream" @@ -30,7 +30,7 @@ sync: # Format all packages format: - @for pkg in packages/fuzzforge-*/; do \ + @for pkg in fuzzforge-*/; do \ if [ -f "$$pkg/pyproject.toml" ]; then \ echo "Formatting $$pkg..."; \ cd "$$pkg" && uv run ruff format . && cd -; \ @@ -39,7 +39,7 @@ format: # Lint all packages lint: - @for pkg in packages/fuzzforge-*/; do \ + @for pkg in fuzzforge-*/; do \ if [ -f "$$pkg/pyproject.toml" ]; then \ echo "Linting $$pkg..."; \ cd "$$pkg" && uv run ruff check . && cd -; \ @@ -48,7 +48,7 @@ lint: # Type check all packages typecheck: - @for pkg in packages/fuzzforge-*/; do \ + @for pkg in fuzzforge-*/; do \ if [ -f "$$pkg/pyproject.toml" ] && [ -f "$$pkg/mypy.ini" ]; then \ echo "Type checking $$pkg..."; \ cd "$$pkg" && uv run mypy . && cd -; \ @@ -57,7 +57,7 @@ typecheck: # Run all tests test: - @for pkg in packages/fuzzforge-*/; do \ + @for pkg in fuzzforge-*/; do \ if [ -f "$$pkg/pytest.ini" ]; then \ echo "Testing $$pkg..."; \ cd "$$pkg" && uv run pytest && cd -; \ @@ -80,12 +80,18 @@ build-modules: echo "Using Docker"; \ CONTAINER_CMD="docker"; \ fi; \ + sdk_version=$$(grep 'version' "fuzzforge-modules/fuzzforge-modules-sdk/pyproject.toml" 2>/dev/null | head -1 | sed 's/.*"\(.*\)".*/\1/' || echo "0.1.0"); \ + echo "Building fuzzforge-modules-sdk:$$sdk_version (base image)..."; \ + $$CONTAINER_CMD build \ + -t "fuzzforge-modules-sdk:$$sdk_version" \ + -t "localhost/fuzzforge-modules-sdk:$$sdk_version" \ + "fuzzforge-modules/fuzzforge-modules-sdk/" || exit 1; \ for module in fuzzforge-modules/*/; do \ if [ -f "$$module/Dockerfile" ] && \ [ "$$module" != "fuzzforge-modules/fuzzforge-modules-sdk/" ] && \ [ "$$module" != "fuzzforge-modules/fuzzforge-module-template/" ]; then \ name=$$(basename $$module); \ - version=$$(grep 'version' "$$module/pyproject.toml" 2>/dev/null | head -1 | sed 's/.*"\(.*\\)".*/\\1/' || echo "0.1.0"); \ + version=$$(grep 'version' "$$module/pyproject.toml" 2>/dev/null | head -1 | sed 's/.*"\(.*\)".*/\1/' || echo "0.1.0"); \ echo "Building $$name:$$version..."; \ $$CONTAINER_CMD build -t "fuzzforge-$$name:$$version" "$$module" || exit 1; \ fi \ diff --git a/README.md b/README.md index 137cfb7..86b8512 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

FuzzForge OSS

+

FuzzForge AI

AI-Powered Security Research Orchestration via MCP

@@ -26,13 +26,13 @@ --- -> 🚧 **FuzzForge OSS is under active development.** Expect breaking changes and new features! +> 🚧 **FuzzForge AI is under active development.** Expect breaking changes and new features! --- ## 🚀 Overview -**FuzzForge OSS** is an open-source runtime that enables AI agents (GitHub Copilot, Claude, etc.) to orchestrate security research workflows through the **Model Context Protocol (MCP)**. +**FuzzForge AI** is an open-source runtime that enables AI agents (GitHub Copilot, Claude, etc.) to orchestrate security research workflows through the **Model Context Protocol (MCP)**. ### The Core: Modules @@ -171,7 +171,7 @@ FuzzForge modules are containerized security tools that AI agents can orchestrat ### Module Ecosystem -| | FuzzForge OSS | FuzzForge Enterprise Modules | +| | FuzzForge AI | FuzzForge Enterprise Modules | |---|---|---| | **What** | Runtime & MCP server | Security research modules | | **License** | Apache 2.0 | BSL 1.1 (Business Source License) | diff --git a/ROADMAP.md b/ROADMAP.md index 8741bef..20f3632 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ -# FuzzForge OSS Roadmap +# FuzzForge AI Roadmap -This document outlines the planned features and development direction for FuzzForge OSS. +This document outlines the planned features and development direction for FuzzForge AI. --- diff --git a/USAGE.md b/USAGE.md index 095a0bd..b826d60 100644 --- a/USAGE.md +++ b/USAGE.md @@ -1,6 +1,6 @@ -# FuzzForge OSS Usage Guide +# FuzzForge AI Usage Guide -This guide covers everything you need to know to get started with FuzzForge OSS - from installation to running your first security research workflow with AI. +This guide covers everything you need to know to get started with FuzzForge AI - from installation to running your first security research workflow with AI. > **FuzzForge is designed to be used with AI agents** (GitHub Copilot, Claude, etc.) via MCP. > The CLI is available for advanced users but the primary experience is through natural language interaction with your AI assistant. @@ -31,8 +31,8 @@ This guide covers everything you need to know to get started with FuzzForge OSS ```bash # 1. Clone and install -git clone https://github.com/FuzzingLabs/fuzzforge-oss.git -cd fuzzforge-oss +git clone https://github.com/FuzzingLabs/fuzzforge-ai.git +cd fuzzforge-ai uv sync # 2. Build the module images (one-time setup) @@ -57,9 +57,9 @@ uv run fuzzforge mcp install claude-code # For Claude Code CLI ## Prerequisites -Before installing FuzzForge OSS, ensure you have: +Before installing FuzzForge AI, ensure you have: -- **Python 3.12+** - [Download Python](https://www.python.org/downloads/) +- **Python 3.14+** - [Download Python](https://www.python.org/downloads/) - **uv** package manager - [Install uv](https://docs.astral.sh/uv/) - **Docker** - Container runtime ([Install Docker](https://docs.docker.com/get-docker/)) @@ -95,8 +95,8 @@ sudo usermod -aG docker $USER ### 1. Clone the Repository ```bash -git clone https://github.com/FuzzingLabs/fuzzforge-oss.git -cd fuzzforge-oss +git clone https://github.com/FuzzingLabs/fuzzforge-ai.git +cd fuzzforge-ai ``` ### 2. Install Dependencies @@ -122,14 +122,14 @@ FuzzForge modules are containerized security tools. After cloning, you need to b ### Build All Modules ```bash -# From the fuzzforge-oss directory +# From the fuzzforge-ai directory make build-modules ``` This builds all available modules: - `fuzzforge-rust-analyzer` - Analyzes Rust code for fuzzable functions - `fuzzforge-cargo-fuzzer` - Runs cargo-fuzz on Rust crates -- `fuzzforge-harness-validator` - Validates generated fuzzing harnesses +- `fuzzforge-harness-tester` - Tests and validates generated fuzzing harnesses - `fuzzforge-crash-analyzer` - Analyzes crash inputs ### Build a Single Module @@ -169,7 +169,7 @@ uv run fuzzforge mcp install copilot The command auto-detects everything: - **FuzzForge root** - Where FuzzForge is installed -- **Modules path** - Defaults to `fuzzforge-oss/fuzzforge-modules` +- **Modules path** - Defaults to `fuzzforge-ai/fuzzforge-modules` - **Docker socket** - Auto-detects `/var/run/docker.sock` **Optional overrides** (usually not needed): @@ -428,14 +428,14 @@ If you prefer Podman: uv run fuzzforge mcp install copilot --engine podman # Or set environment variable -export FUZZFORGE_ENGINE=podman +export FUZZFORGE_ENGINE__TYPE=podman ``` ### Check Logs -FuzzForge stores execution logs in the storage directory: +FuzzForge stores execution results inside your project directory: ```bash -ls -la ~/.fuzzforge/storage/// +ls -la /.fuzzforge/runs// ``` --- diff --git a/fuzzforge-cli/pyproject.toml b/fuzzforge-cli/pyproject.toml index 02b066b..d68ff43 100644 --- a/fuzzforge-cli/pyproject.toml +++ b/fuzzforge-cli/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "fuzzforge-cli" version = "0.0.1" -description = "FuzzForge CLI - Command-line interface for FuzzForge OSS." +description = "FuzzForge CLI - Command-line interface for FuzzForge AI." authors = [] readme = "README.md" requires-python = ">=3.14" diff --git a/fuzzforge-cli/src/fuzzforge_cli/application.py b/fuzzforge-cli/src/fuzzforge_cli/application.py index 8e3b89a..114ef0a 100644 --- a/fuzzforge-cli/src/fuzzforge_cli/application.py +++ b/fuzzforge-cli/src/fuzzforge_cli/application.py @@ -12,7 +12,7 @@ from fuzzforge_cli.context import Context application: Typer = Typer( name="fuzzforge", - help="FuzzForge OSS - Security research orchestration platform.", + help="FuzzForge AI - Security research orchestration platform.", ) @@ -62,7 +62,7 @@ def main( ] = "", context: TyperContext = None, # type: ignore[assignment] ) -> None: - """FuzzForge OSS - Security research orchestration platform. + """FuzzForge AI - Security research orchestration platform. Execute security research modules in isolated containers. diff --git a/fuzzforge-cli/src/fuzzforge_cli/commands/mcp.py b/fuzzforge-cli/src/fuzzforge_cli/commands/mcp.py index 249cb27..71e20f8 100644 --- a/fuzzforge-cli/src/fuzzforge_cli/commands/mcp.py +++ b/fuzzforge-cli/src/fuzzforge_cli/commands/mcp.py @@ -129,13 +129,13 @@ def _detect_docker_socket() -> str: def _find_fuzzforge_root() -> Path: """Find the FuzzForge installation root. - :returns: Path to fuzzforge-oss directory. + :returns: Path to fuzzforge-ai directory. """ # Try to find from current file location current = Path(__file__).resolve() - # Walk up to find fuzzforge-oss root + # Walk up to find fuzzforge-ai root for parent in current.parents: if (parent / "fuzzforge-mcp").is_dir() and (parent / "fuzzforge-runner").is_dir(): return parent @@ -152,7 +152,7 @@ def _generate_mcp_config( ) -> dict: """Generate MCP server configuration. - :param fuzzforge_root: Path to fuzzforge-oss installation. + :param fuzzforge_root: Path to fuzzforge-ai installation. :param modules_path: Path to the modules directory. :param engine_type: Container engine type (podman or docker). :param engine_socket: Container engine socket path. @@ -326,7 +326,7 @@ def generate( if agent == AIAgent.COPILOT: config_path = _get_copilot_mcp_path() elif agent == AIAgent.CLAUDE_CODE: - config_path = _get_claude_code_mcp_path(fuzzforge_root) + config_path = _get_claude_code_user_mcp_path() else: # Claude Desktop config_path = _get_claude_desktop_mcp_path() diff --git a/fuzzforge-mcp/README.md b/fuzzforge-mcp/README.md index 1c68125..36f9738 100644 --- a/fuzzforge-mcp/README.md +++ b/fuzzforge-mcp/README.md @@ -45,11 +45,11 @@ For custom setups, you can manually configure the MCP server. { "mcpServers": { "fuzzforge": { - "command": "/path/to/fuzzforge-oss/.venv/bin/python", + "command": "/path/to/fuzzforge-ai/.venv/bin/python", "args": ["-m", "fuzzforge_mcp"], - "cwd": "/path/to/fuzzforge-oss", + "cwd": "/path/to/fuzzforge-ai", "env": { - "FUZZFORGE_MODULES_PATH": "/path/to/fuzzforge-oss/fuzzforge-modules", + "FUZZFORGE_MODULES_PATH": "/path/to/fuzzforge-ai/fuzzforge-modules", "FUZZFORGE_ENGINE__TYPE": "docker" } } @@ -64,11 +64,11 @@ For custom setups, you can manually configure the MCP server. "servers": { "fuzzforge": { "type": "stdio", - "command": "/path/to/fuzzforge-oss/.venv/bin/python", + "command": "/path/to/fuzzforge-ai/.venv/bin/python", "args": ["-m", "fuzzforge_mcp"], - "cwd": "/path/to/fuzzforge-oss", + "cwd": "/path/to/fuzzforge-ai", "env": { - "FUZZFORGE_MODULES_PATH": "/path/to/fuzzforge-oss/fuzzforge-modules", + "FUZZFORGE_MODULES_PATH": "/path/to/fuzzforge-ai/fuzzforge-modules", "FUZZFORGE_ENGINE__TYPE": "docker" } } @@ -83,11 +83,11 @@ For custom setups, you can manually configure the MCP server. "mcpServers": { "fuzzforge": { "type": "stdio", - "command": "/path/to/fuzzforge-oss/.venv/bin/python", + "command": "/path/to/fuzzforge-ai/.venv/bin/python", "args": ["-m", "fuzzforge_mcp"], - "cwd": "/path/to/fuzzforge-oss", + "cwd": "/path/to/fuzzforge-ai", "env": { - "FUZZFORGE_MODULES_PATH": "/path/to/fuzzforge-oss/fuzzforge-modules", + "FUZZFORGE_MODULES_PATH": "/path/to/fuzzforge-ai/fuzzforge-modules", "FUZZFORGE_ENGINE__TYPE": "docker" } } diff --git a/fuzzforge-mcp/pyproject.toml b/fuzzforge-mcp/pyproject.toml index 44f4255..d173c07 100644 --- a/fuzzforge-mcp/pyproject.toml +++ b/fuzzforge-mcp/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "fuzzforge-mcp" version = "0.0.1" -description = "FuzzForge MCP Server - AI agent gateway for FuzzForge OSS." +description = "FuzzForge MCP Server - AI agent gateway for FuzzForge AI." authors = [] readme = "README.md" requires-python = ">=3.14" diff --git a/fuzzforge-mcp/src/fuzzforge_mcp/resources/workflows.py b/fuzzforge-mcp/src/fuzzforge_mcp/resources/workflows.py index 968dce9..280c306 100644 --- a/fuzzforge-mcp/src/fuzzforge_mcp/resources/workflows.py +++ b/fuzzforge-mcp/src/fuzzforge_mcp/resources/workflows.py @@ -1,6 +1,6 @@ """Workflow resources for FuzzForge MCP. -Note: In FuzzForge OSS, workflows are defined at runtime rather than +Note: In FuzzForge AI, workflows are defined at runtime rather than stored. This resource provides documentation about workflow capabilities. """ @@ -19,7 +19,7 @@ mcp: FastMCP = FastMCP() async def get_workflow_help() -> dict[str, Any]: """Get help information about creating workflows. - Workflows in FuzzForge OSS are defined at execution time rather + Workflows in FuzzForge AI are defined at execution time rather than stored. Use the execute_workflow tool with step definitions. :return: Workflow documentation. diff --git a/fuzzforge-mcp/src/fuzzforge_mcp/tools/modules.py b/fuzzforge-mcp/src/fuzzforge_mcp/tools/modules.py index 567f12e..4ab4246 100644 --- a/fuzzforge-mcp/src/fuzzforge_mcp/tools/modules.py +++ b/fuzzforge-mcp/src/fuzzforge_mcp/tools/modules.py @@ -49,24 +49,19 @@ async def list_modules() -> dict[str, Any]: "image": f"{module.identifier}:{module.version or 'latest'}", "available": module.available, "description": module.description, - # New metadata fields from pyproject.toml - "category": module.category, - "language": module.language, - "pipeline_stage": module.pipeline_stage, - "pipeline_order": module.pipeline_order, - "dependencies": module.dependencies, "continuous_mode": module.continuous_mode, - "typical_duration": module.typical_duration, + "suggested_predecessors": module.suggested_predecessors, # AI-discoverable metadata "use_cases": module.use_cases, - "input_requirements": module.input_requirements, + "common_inputs": module.common_inputs, "output_artifacts": module.output_artifacts, + "output_treatment": module.output_treatment, } for module in modules ] - # Sort by pipeline_order if available - available_modules.sort(key=lambda m: (m.get("pipeline_order") or 999, m["identifier"])) + # Sort alphabetically by identifier + available_modules.sort(key=lambda m: m["identifier"]) return { "modules": available_modules, diff --git a/fuzzforge-mcp/tests/test_resources.py b/fuzzforge-mcp/tests/test_resources.py index 370ffff..d6ea452 100644 --- a/fuzzforge-mcp/tests/test_resources.py +++ b/fuzzforge-mcp/tests/test_resources.py @@ -1,4 +1,4 @@ -"""MCP tool tests for FuzzForge OSS. +"""MCP tool tests for FuzzForge AI. Tests the MCP tools that are available in the OSS version. """ diff --git a/fuzzforge-modules/fuzzforge-modules-sdk/Dockerfile b/fuzzforge-modules/fuzzforge-modules-sdk/Dockerfile index c98782a..6c90669 100644 --- a/fuzzforge-modules/fuzzforge-modules-sdk/Dockerfile +++ b/fuzzforge-modules/fuzzforge-modules-sdk/Dockerfile @@ -18,8 +18,8 @@ WORKDIR /app # Create FuzzForge standard directories RUN mkdir -p /fuzzforge/input /fuzzforge/output -# Copy wheels directory (built by parent Makefile) -COPY .wheels /wheels +# Create wheels directory (populated with pre-built wheels when available) +RUN mkdir -p /wheels # Set up uv for the container ENV UV_SYSTEM_PYTHON=1 diff --git a/fuzzforge-runner/README.md b/fuzzforge-runner/README.md index 570abdd..c401d98 100644 --- a/fuzzforge-runner/README.md +++ b/fuzzforge-runner/README.md @@ -1,6 +1,6 @@ # FuzzForge Runner -Direct execution engine for FuzzForge OSS. Provides simplified module and workflow execution without requiring Temporal or external infrastructure. +Direct execution engine for FuzzForge AI. Provides simplified module and workflow execution without requiring Temporal or external infrastructure. ## Overview diff --git a/fuzzforge-runner/pyproject.toml b/fuzzforge-runner/pyproject.toml index e6fab86..cbee128 100644 --- a/fuzzforge-runner/pyproject.toml +++ b/fuzzforge-runner/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "fuzzforge-runner" version = "0.0.1" -description = "FuzzForge Runner - Direct execution engine for FuzzForge OSS." +description = "FuzzForge Runner - Direct execution engine for FuzzForge AI." authors = [] readme = "README.md" requires-python = ">=3.14" diff --git a/fuzzforge-runner/src/fuzzforge_runner/__init__.py b/fuzzforge-runner/src/fuzzforge_runner/__init__.py index 16f6ea6..f6a8f62 100644 --- a/fuzzforge-runner/src/fuzzforge_runner/__init__.py +++ b/fuzzforge-runner/src/fuzzforge_runner/__init__.py @@ -1,4 +1,4 @@ -"""FuzzForge Runner - Direct execution engine for FuzzForge OSS.""" +"""FuzzForge Runner - Direct execution engine for FuzzForge AI.""" from fuzzforge_runner.runner import Runner from fuzzforge_runner.settings import Settings diff --git a/fuzzforge-runner/src/fuzzforge_runner/runner.py b/fuzzforge-runner/src/fuzzforge_runner/runner.py index 8ee9b27..01bc525 100644 --- a/fuzzforge-runner/src/fuzzforge_runner/runner.py +++ b/fuzzforge-runner/src/fuzzforge_runner/runner.py @@ -1,6 +1,6 @@ """FuzzForge Runner - Main runner interface. -This module provides the high-level interface for FuzzForge OSS, +This module provides the high-level interface for FuzzForge AI, coordinating module execution, workflow orchestration, and storage. """ diff --git a/fuzzforge-runner/src/fuzzforge_runner/storage.py b/fuzzforge-runner/src/fuzzforge_runner/storage.py index 6b629da..f39f93e 100644 --- a/fuzzforge-runner/src/fuzzforge_runner/storage.py +++ b/fuzzforge-runner/src/fuzzforge_runner/storage.py @@ -39,7 +39,7 @@ def get_logger() -> BoundLogger: class LocalStorage: - """Local filesystem storage backend for FuzzForge OSS. + """Local filesystem storage backend for FuzzForge AI. Provides lightweight storage for execution results while using direct source mounting (no copying) for input assets. diff --git a/pyproject.toml b/pyproject.toml index 105034f..89488cc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] -name = "fuzzforge-oss" +name = "fuzzforge-ai" version = "1.0.0" -description = "FuzzForge OSS - AI-driven security research platform for local execution" +description = "FuzzForge AI - AI-driven security research platform for local execution" readme = "README.md" requires-python = ">=3.14" authors = [