.claude/skills/fusionaly/SKILL.md
Use when user asks about website analytics, traffic, visitors, page views, referrers, or mentions "fusionaly". Queries Fusionaly analytics via SQL API.
npx skillsauth add karloscodes/fusionaly-oss fusionalyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Query your Fusionaly analytics data using SQL.
Your role: The user will ask questions in plain English (e.g., "What were my top pages last week?" or "How many visitors did I get from Google?"). You translate these questions into SQL queries, execute them via the API, and present the results in the most readable format possible (tables, summaries, bullet points, or charts as appropriate).
Requires these environment variables to be set:
FUSIONALY_HOST - Your Fusionaly instance URL (e.g., https://analytics.example.com)FUSIONALY_API_KEY - Your Agent API key from Administration → Agentscurl -s -H "Authorization: Bearer $FUSIONALY_API_KEY" "$FUSIONALY_HOST/z/api/v1/schema"
The response contains:
schema: Raw SQLite CREATE TABLE statements showing all tables and columnsconcepts: Domain-specific explanations of what each table/column meansHow to use the schema:
concepts section to understand what each column representscurl -s -X POST "$FUSIONALY_HOST/z/api/v1/sql" \
-H "Authorization: Bearer $FUSIONALY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT ...", "website_id": 1}'
Build your SELECT queries based on:
events, sessions, visitors)website_id, visitor_id)Be persistent. If a query fails, analyze the error and retry with corrections. Try up to 3 times before giving up.
Common errors and fixes:
no such table: X → Re-check schema for correct table nameno such column: X → Re-check schema for correct column name (case-sensitive)only SELECT queries allowed → Remove any non-SELECT statementscomments not allowed → Remove -- or /* */ from querymultiple statements not allowed → Use only one SELECT statementdangerous operation not allowed → Remove blocked keywords, use only SELECT/WITHAlways bias toward solving the problem. Don't give up on first error - read the message, fix the query, retry.
-- or /**/) are not allowedDATE(timestamp) for daily aggregationswebsite_idwebsite_id in the request body alongside the SQL querydevelopment
Use after code changes, before releases, or when testing features - runs the right level of QA based on what changed
content-media
Use when styling Fusionaly UI components, pages, or charts - applies the Fusionaly design system with black/white palette and brand accents
testing
Use ONLY when explicitly invoked. Deploys Fusionaly to a new Hetzner server or an existing server, with optional hardening and Cloudflare DNS.
tools
Use when working on Fusionaly OSS or Pro - enforces clean separation between repos, prevents Pro features in OSS, forbids modifying OSS from Pro