Skip to content

Conversation

@wolfiesch
Copy link
Collaborator

Summary

  • Add FGP skill manifest (.fgp/skill.json) with full browser-gateway configuration
  • Enable multi-ecosystem auto-registration (MCP, Claude Code, Cursor)
  • Define all 18 browser automation methods with parameter schemas

Details

The skill.json enables:

  • MCP: Auto-generates manifest.json for FGP MCP server
  • Claude Code: Auto-generates SKILL.md in ~/.claude/skills/browser-fgp/
  • Cursor: Auto-adds entry to ~/.cursor/mcp.json

When users run fgp skill install browser-gateway, the skill is automatically registered with all enabled ecosystems.

Test plan

  • Run fgp skill install browser-gateway and verify auto-registration
  • Check fgp skill mcp status browser-gateway shows all targets
  • Verify Claude Code skill at ~/.claude/skills/browser-fgp/SKILL.md
  • Verify Cursor entry in ~/.cursor/mcp.json

🤖 Generated with Claude Code

Add FGP skill manifest with:
- Full method definitions (18 browser automation methods)
- Binary build configuration for Rust
- Distribution config (prebuilt binaries, Homebrew tap)
- Daemon configuration (socket, pid, log paths)
- MCP bridge settings
- Multi-ecosystem exports:
  - MCP: enabled with fgp_browser prefix
  - Claude Code: enabled with triggers and SKILL.md generation
  - Cursor: enabled with mcp.json integration
  - Windsurf/Continue: disabled by default

This enables automatic registration across AI coding assistants
when installed via `fgp skill install browser-gateway`.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Copilot AI review requested due to automatic review settings January 15, 2026 10:13
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new FGP skill manifest (.fgp/skill.json) to enable multi-ecosystem auto-registration for the browser-gateway tool. The skill.json provides comprehensive configuration for browser automation methods and integration with MCP, Claude Code, and Cursor.

Changes:

  • Add .fgp/skill.json with 18 browser automation method definitions and parameter schemas
  • Configure multi-ecosystem exports (MCP, Claude Code, Cursor, Windsurf, Continue Dev)
  • Define binary distribution, daemon management, and Chrome requirements

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

.fgp/skill.json Outdated
"$schema": "https://fgp.dev/schemas/skill.json",
"name": "browser-gateway",
"version": "0.1.0",
"description": "Fast browser automation via Chrome DevTools Protocol - 292x faster than Playwright MCP",
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description claims "292x faster than Playwright MCP" but this specific performance claim is not verifiable from the skill manifest alone and may become outdated over time. Performance claims in manifests should either reference documentation/benchmarks or be more general.

Suggested change
"description": "Fast browser automation via Chrome DevTools Protocol - 292x faster than Playwright MCP",
"description": "Fast, high-performance browser automation via Chrome DevTools Protocol.",

Copilot uses AI. Check for mistakes.
.fgp/skill.json Outdated
"description": "Press key with modifiers (e.g., Ctrl+A)",
"params": {
"key": { "type": "string", "required": true, "description": "Key to press" },
"modifiers": { "type": "array", "description": "Modifiers (ctrl, alt, shift, meta)" },
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The modifiers parameter in browser.press_combo is defined as an array type but lacks specification of the array item type and constraints. The description mentions specific modifiers (ctrl, alt, shift, meta) but there's no schema enforcement. Consider adding "items" with type "string" and ideally an enum constraint to ensure valid modifier values.

Suggested change
"modifiers": { "type": "array", "description": "Modifiers (ctrl, alt, shift, meta)" },
"modifiers": {
"type": "array",
"description": "Modifiers (ctrl, alt, shift, meta)",
"items": {
"type": "string",
"enum": ["ctrl", "alt", "shift", "meta"]
}
},

Copilot uses AI. Check for mistakes.
.fgp/skill.json Outdated
"enabled": true,
"skill_name": "browser-fgp",
"triggers": ["browser", "navigate", "screenshot", "click", "fill", "automation", "web page"],
"tools": ["Bash"]
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The claude export configuration references "Bash" in the tools array, but it's unclear what this represents in the context of Claude Code skills. This should be documented or clarified - does it mean the skill requires bash access, or is this specifying tool dependencies? The capitalization also seems inconsistent with typical tool naming.

Suggested change
"tools": ["Bash"]
"tools": []

Copilot uses AI. Check for mistakes.
.fgp/skill.json Outdated
Comment on lines 149 to 187
"name": "session.new",
"description": "Create a new isolated browser session",
"params": {
"session_id": { "type": "string", "description": "Custom session ID (optional)" }
}
},
{
"name": "session.list",
"description": "List active browser sessions",
"params": {}
},
{
"name": "session.close",
"description": "Close a browser session",
"params": {
"session_id": { "type": "string", "required": true, "description": "Session ID to close" }
}
},
{
"name": "state.save",
"description": "Save browser state (cookies, localStorage)",
"params": {
"name": { "type": "string", "required": true, "description": "State name" },
"session_id": { "type": "string", "description": "Session ID (optional)" }
}
},
{
"name": "state.load",
"description": "Load saved browser state",
"params": {
"name": { "type": "string", "required": true, "description": "State name" },
"session_id": { "type": "string", "description": "Session ID (optional)" }
}
},
{
"name": "state.list",
"description": "List saved browser states",
"params": {}
}
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The method names in skill.json are inconsistent with the existing manifest.json. The existing manifest uses "browser.state.save", "browser.state.load", "browser.state.list", "browser.session.new", "browser.session.list", and "browser.session.close", while skill.json uses shortened names like "state.save", "session.new", etc. This inconsistency will cause the methods to not map correctly when auto-generating MCP configurations. Use the same naming convention as manifest.json for consistency.

Copilot uses AI. Check for mistakes.
.fgp/skill.json Outdated
"name": "browser.screenshot",
"description": "Capture PNG screenshot",
"params": {
"path": { "type": "string", "description": "Output file path (optional)" },
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The browser.screenshot method has an inconsistent parameter definition with the existing manifest.json. The existing manifest defines "path" as required with a "full_page" boolean parameter, while skill.json defines "path" as optional without the "full_page" parameter. This inconsistency will cause issues when the skill.json is used to generate MCP configurations. Align the parameter definitions with manifest.json.

Suggested change
"path": { "type": "string", "description": "Output file path (optional)" },
"path": { "type": "string", "required": true, "description": "Output file path" },
"full_page": { "type": "boolean", "description": "Capture the full scrollable page (optional)" },

Copilot uses AI. Check for mistakes.
.fgp/skill.json Outdated
Comment on lines 190 to 196
"mcp_bridge": {
"enabled": true,
"command": "${SKILL_BIN}",
"args": ["mcp"],
"tools_prefix": "fgp_browser"
},

Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The mcp_bridge configuration appears to be duplicated functionality with the exports.mcp section. Both define MCP integration with the same tools_prefix. This creates ambiguity about which configuration should take precedence and may lead to conflicts. Consider consolidating these into a single configuration section.

Suggested change
"mcp_bridge": {
"enabled": true,
"command": "${SKILL_BIN}",
"args": ["mcp"],
"tools_prefix": "fgp_browser"
},

Copilot uses AI. Check for mistakes.
"log_file": "${FGP_HOME}/services/browser/daemon.log",
"start_command": ["${SKILL_BIN}", "start"],
"stop_command": ["${SKILL_BIN}", "stop"],
"health_method": "health"
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The daemon health_method references "health" but this method is not defined in the methods array. The methods list includes browser., session., and state.* methods but no "health" method. Either add the health method to the methods array or update the health_method reference to match an existing method name.

Copilot uses AI. Check for mistakes.
.fgp/skill.json Outdated
Comment on lines 124 to 125
"direction": { "type": "string", "description": "up, down, left, right" },
"amount": { "type": "integer", "description": "Pixels to scroll" },
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The scroll method has inconsistent parameter typing. The "direction" parameter should have a required field and ideally an enum constraint (up, down, left, right) to prevent invalid values. The "amount" parameter should specify if it's required, and consider if negative values are allowed.

Suggested change
"direction": { "type": "string", "description": "up, down, left, right" },
"amount": { "type": "integer", "description": "Pixels to scroll" },
"direction": { "type": "string", "required": true, "enum": ["up", "down", "left", "right"], "description": "Scroll direction" },
"amount": { "type": "integer", "required": true, "minimum": 0, "description": "Pixels to scroll (must be non-negative)" },

Copilot uses AI. Check for mistakes.
.fgp/skill.json Outdated
Comment on lines 141 to 144
"description": "Upload a file to an input",
"params": {
"selector": { "type": "string", "required": true, "description": "File input selector" },
"path": { "type": "string", "required": true, "description": "Path to file" },
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The browser.upload method accepts a file path parameter but lacks validation requirements or security considerations. There's no indication of path validation, file size limits, or allowed file types. For a browser automation tool that handles file uploads, consider adding documentation about path validation and security constraints.

Suggested change
"description": "Upload a file to an input",
"params": {
"selector": { "type": "string", "required": true, "description": "File input selector" },
"path": { "type": "string", "required": true, "description": "Path to file" },
"description": "Upload a file to an input. The implementation must validate the file path and enforce security constraints (allowed directories, file size limits, and allowed file types).",
"params": {
"selector": { "type": "string", "required": true, "description": "File input selector" },
"path": { "type": "string", "required": true, "description": "Absolute or workspace-local path to an existing file. Implementations must validate this path, restrict it to allowed directories, and enforce file size and type limits before uploading." },

Copilot uses AI. Check for mistakes.
Comment on lines +25 to +27
"darwin-arm64": "https://github.com/fast-gateway-protocol/browser/releases/download/v${VERSION}/browser-gateway-darwin-arm64",
"darwin-x64": "https://github.com/fast-gateway-protocol/browser/releases/download/v${VERSION}/browser-gateway-darwin-x64",
"linux-x64": "https://github.com/fast-gateway-protocol/browser/releases/download/v${VERSION}/browser-gateway-linux-x64"
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The VERSION placeholder in distribution URLs uses ${VERSION} syntax but the version field is defined as "0.1.0". Ensure that the system performing substitution correctly handles the version format (with or without the 'v' prefix) since the URLs include "v${VERSION}".

Copilot uses AI. Check for mistakes.
wolfiesch and others added 2 commits January 15, 2026 02:32
- Replace `map_or(false, ...)` with `is_some_and(...)` in aria.rs
- Replace redundant closures `|v| json_as_bool(v)` with `json_as_bool`
- Use `sort_by_key` with Reverse instead of `sort_by` in client.rs
- Change `&PathBuf` to `&Path` in service.rs parameter
- Remove trivial `assert!(true)` from integration test

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Remove unverifiable "292x faster" performance claim from description
- Use consistent author (Wolfgang Schoenberger) matching manifest.json
- Sync version to 1.0.0 matching manifest.json
- Add missing "health" method to methods array
- Fix screenshot params: path now required, added full_page boolean
- Add enum constraints for scroll direction (up/down/left/right)
- Add items definition with enum for modifiers array
- Use consistent method names: browser.session.*, browser.state.*
- Remove duplicate mcp_bridge section, consolidated into exports.mcp
- Remove unclear "Bash" from claude exports tools array

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
@wolfiesch wolfiesch merged commit 8e82b88 into master Jan 15, 2026
3 checks passed
@wolfiesch wolfiesch deleted the feat/multi-ecosystem-exports branch January 15, 2026 10:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant