- When creating reusable skills or prompts, keep them environment-agnostic and avoid references to local-only tooling unless the user explicitly wants environment-specific guidance.
- For skills and prompts meant to be exported or reused outside Cursor, follow general Claude-style patterns instead of Cursor-specific assumptions.
- When asked to address open issues or follow-up tasks, plan and analyze first before writing any code or tests.
- Arcade deploy is a manual operator action — never trigger
arcade deployordeploy-mcp-servers.ymlautomatically from a CI push; only viaworkflow_dispatch. - MCP tools that involve LLM analysis should be self-contained: one call receives the sites, fetches evidence internally, runs the analysis, validates, and returns the report. Do not expose separate tools for each step.
- Prefer using Cursor MCP config/gateways for MCP tool execution instead of ad-hoc worker-style invocation.
- Prefer Claude 4.6 family models; avoid Opus for general reasoning and reserve it for heavy multi-model analysis workloads.
- The
geo-analyzerMCP server in this workspace is an Arcade-backed Linear issue management gateway (create/update issues, list teams/projects/labels) — it is not a GEO audit tool despite the name. - This workspace includes a local
geo-site-auditworkflow backed by deterministic GEO audit tools intools/geo_audit_arcade/(Arcade MCPApp v0.3.0) andtools/geo_audit_local_mcp/(FastMCP). The v0.3.0 server exposesRunGeoSiteAuditandRunGeoCompareas public tools;CollectGeoEvidence/ValidateGeoAuditClaimsare now internal implementation details. - The canonical code repo is
ArcadeAI/ghost; historical benchmark run records live on thebenchmark-dataorphan branch. Thegeoauditandbenchcontrolgateway slugs are the production cloud endpoints (https://api.arcade.dev/mcp/geoauditandhttps://api.arcade.dev/mcp/benchcontrol). - The
benchmark-controlArcade MCP server (tools/benchmark_control_arcade/) reads GitHub credentials fromToolContext.get_secret()(notos.environ) when deployed to Arcade Cloud. Arcade injects declared secrets intoToolContext, so each@app.toolmust declare required secrets and tools should acceptctx: ToolContextas first param; non-secret config belongs inSettingsdefaults. - Arcade MCP servers auto-load credentials from
~/.arcade/credentials.yaml;ARCADE_API_KEYis only required for the AIOA pipeline's directhttpxsearch calls, not for local MCP server startup. - Arcade gateway slugs are case-sensitive and project-scoped:
https://api.arcade.dev/mcp/aio(lowercase) is the working Google Search gateway for this workspace; it requires the API key from the ghost Arcade project. - The AIOA pipeline currently runs in
seo_onlymode; the AIO model layer (LLM fan-out) is intentionally disabled.arcade_avg_aio_scoreisNonein all pipeline output. aioa/config/(scoring_matrix.json, prompts_v1.json, terms_v1.json, competitors.json) must be committed to the repo — these files are required at runtime by the pipeline.- GEO audit tools (
RunGeoSiteAudit,RunGeoCompare) are registered on thebenchcontrolserver alongside benchmark lifecycle tools. GEO benchmark runners now callrun_geo_audit()/run_geo_compare()directly (no claude-agent-sdk loop or MCP round-trip in runners). - Run
ruff format .from each package root (not a subdirectory) before committing; CI checks the full package and will fail if any file is missed. Also auditruff --fixdiffs carefully — it can silently remove security-critical code such as input validation guards. - Module-level
os.environ.get()calls are evaluated at import time; any env-var-dependent validation (API key checks, URL allowlist) must read fromos.environinside the function body somonkeypatch.setenvworks correctly in tests.