{ "version": "1.0.0", "generated": "2026-09-18T06:45:37.697134+00:00", "total_skills": 185, "categories": { "jobs": { "description": "Whole jobs you may be asked to build (RSS engine, data migration, notifications, RAG, ...). Each was run end to end; its skill.yaml `proof` block says where, and what was not proved", "skill_count": 8, "tags": [ "job", "recipe", "proven" ] }, "workflows": { "description": "End-to-end automation workflows combining multiple services", "skill_count": 19, "tags": [ "automation", "workflow", "orchestration" ] }, "ai": { "description": "AI-powered skills for text, image, audio, and video processing", "skill_count": 23, "tags": [ "ai", "ml", "llm", "nlp" ] }, "security": { "description": "Security, compliance, and cryptographic operations", "skill_count": 16, "tags": [ "security", "compliance", "crypto", "privacy" ] }, "transforms": { "description": "Data transformation, parsing, and format conversion", "skill_count": 100, "tags": [ "transform", "parse", "convert", "format" ] }, "connectors": { "description": "Integration connectors for SaaS, messaging, and data sources", "skill_count": 3, "tags": [ "connector", "integration", "saas", "data-source" ] }, "utilities": { "description": "General utilities and helper functions", "skill_count": 16, "tags": [ "utility", "helper", "validation" ] } }, "skills": { "audio-transcribe": { "name": "audio-transcribe", "version": "1.0.0", "description": "Transcribe audio content using AI", "category": "ai", "credentials": [], "inputs": [ { "name": "audio_url", "type": "string", "required": true, "description": "URL of audio file to transcribe" } ], "outputs": [ { "name": "transcript", "type": "string", "description": "Transcribed text" } ], "backends": [ "openai" ], "tags": [ "ai", "remote" ] }, "code-explain": { "name": "code-explain", "version": "1.0.0", "description": "Explain code in plain English with step-by-step breakdown", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key for remote inference" } ], "inputs": [ { "name": "code", "type": "string", "required": true, "description": "Code snippet to explain" }, { "name": "language", "type": "string", "required": false, "description": "Programming language (auto-detected if not provided)" }, { "name": "detail_level", "type": "string", "required": false, "description": "Level of detail (brief, normal, detailed)" } ], "outputs": [ { "name": "explanation", "type": "string", "description": "Plain English explanation of the code" }, { "name": "metadata", "type": "object", "description": "Audit metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "grammar-check": { "name": "grammar-check", "version": "1.0.0", "description": "Check text for grammar, spelling, and style issues with corrections", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to check" } ], "outputs": [ { "name": "corrected", "type": "string", "description": "Text with corrections applied" }, { "name": "issues", "type": "array", "description": "List of issues found" }, { "name": "issue_count", "type": "integer", "description": "Number of issues" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "image-alttext": { "name": "image-alttext", "version": "1.0.0", "description": "Generate accessibility-optimized alt text for images (WCAG compliant)", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "image_url", "type": "string", "required": true, "description": "URL of the image to describe" }, { "name": "context", "type": "string", "required": false, "description": "Additional context about where the image appears" }, { "name": "max_length", "type": "integer", "default": 125, "description": "Maximum alt text length (WCAG recommends 125 chars)" } ], "outputs": [ { "name": "alt_text", "type": "string", "description": "Accessibility-optimized alt text" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "image-analyze": { "name": "image-analyze", "version": "1.0.0", "description": "Analyze image content with objects, relations, and scene structure", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "image_url", "type": "string", "required": true, "description": "URL of the image to analyze" }, { "name": "detail", "type": "string", "default": "high", "enum": [ "low", "high", "auto" ], "description": "Analysis detail level" } ], "outputs": [ { "name": "analysis", "type": "object", "description": "{objects, colors, text, scene_type, composition}" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "image-caption": { "name": "image-caption", "version": "1.0.0", "description": "Generate accessible alt text for images", "category": "ai", "credentials": [], "inputs": [ { "name": "image_url", "type": "string", "required": true, "description": "URL of image to caption" } ], "outputs": [ { "name": "caption", "type": "string", "description": "Short image caption" }, { "name": "alt_text", "type": "string", "description": "Accessibility alt text" } ], "backends": [ "openai" ], "tags": [ "ai", "remote" ] }, "image-describe": { "name": "image-describe", "version": "1.0.0", "description": "Generate description of an image using AI", "category": "ai", "credentials": [], "inputs": [ { "name": "image_url", "type": "string", "required": true, "description": "URL of image to describe" } ], "outputs": [ { "name": "description", "type": "string", "description": "AI-generated image description" } ], "backends": [ "openai" ], "tags": [ "ai", "remote" ] }, "image-moderate": { "name": "image-moderate", "version": "1.0.0", "description": "Check images for content policy violations and safety flags", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "image_url", "type": "string", "required": true, "description": "URL of the image to moderate" }, { "name": "policy", "type": "string", "default": "standard", "enum": [ "standard", "strict" ], "description": "Moderation strictness" } ], "outputs": [ { "name": "flagged", "type": "boolean", "description": "Whether content violates policy" }, { "name": "categories", "type": "object", "description": "Category flags (violence, sexual, hate, etc.)" }, { "name": "scores", "type": "object", "description": "Confidence scores per category" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "json-extract": { "name": "json-extract", "version": "1.0.0", "description": "Extract structured JSON from natural language text", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key for remote inference" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to extract data from" }, { "name": "schema", "type": "object", "required": false, "description": "JSON Schema for output validation" }, { "name": "fields", "type": "array", "required": false, "description": "Simple list of fields to extract (alternative to schema)" } ], "outputs": [ { "name": "extracted", "type": "object", "description": "Extracted JSON data" }, { "name": "metadata", "type": "object", "description": "Audit metadata (model, timestamp, input_hash)" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "json", "local", "openai", "remote" ] }, "keyword-extract": { "name": "keyword-extract", "version": "1.0.0", "description": "Extract keywords and key phrases from text for SEO, tagging, and indexing", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to analyze" }, { "name": "max_keywords", "type": "integer", "default": 10, "description": "Maximum keywords to extract" } ], "outputs": [ { "name": "keywords", "type": "array", "description": "Extracted keywords with scores" }, { "name": "phrases", "type": "array", "description": "Key phrases (2-3 words)" }, { "name": "topics", "type": "array", "description": "Main topics/themes" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "language-detect": { "name": "language-detect", "version": "1.0.0", "description": "Detect the language of text using AI", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to analyze" } ], "outputs": [ { "name": "language", "type": "string", "description": "Detected language" }, { "name": "confidence", "type": "number", "description": "Confidence score" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "meeting-notes": { "name": "meeting-notes", "version": "1.0.0", "description": "Convert meeting transcripts into structured notes with action items", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key (not required if using Ollama)" } ], "inputs": [ { "name": "transcript", "type": "string", "required": true, "description": "Meeting transcript text" }, { "name": "format", "type": "string", "default": "json", "enum": [ "json", "markdown" ], "description": "Output format" } ], "outputs": [ { "name": "notes", "type": "object", "description": "Structured notes: {summary, key_points, action_items, attendees, decisions}" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "sentiment-score": { "name": "sentiment-score", "version": "1.0.0", "description": "Score text sentiment from -1 (negative) to +1 (positive)", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "" } ], "inputs": [ { "name": "text", "type": "string", "required": true } ], "outputs": [ { "name": "score", "type": "number", "description": "Sentiment score -1 to +1" }, { "name": "label", "type": "string", "description": "positive, negative, or neutral" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "speaker-diarize": { "name": "speaker-diarize", "version": "1.0.0", "description": "Split transcript into per-speaker segments with speaker identification", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "transcript", "type": "string", "required": true, "description": "Raw transcript text" }, { "name": "speaker_hints", "type": "array", "required": false, "description": "Optional list of known speaker names" } ], "outputs": [ { "name": "segments", "type": "array", "description": "Array of {speaker, text, start_time?, end_time?}" }, { "name": "speakers", "type": "array", "description": "List of identified speakers" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "sql-generate": { "name": "sql-generate", "version": "1.0.0", "description": "Generate SQL queries from natural language descriptions", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "description", "type": "string", "required": true, "description": "Natural language query description" }, { "name": "dialect", "type": "string", "default": "postgresql", "description": "SQL dialect: postgresql, mysql, sqlite, mssql" }, { "name": "schema", "type": "string", "default": "", "description": "Optional table schema for context" } ], "outputs": [ { "name": "sql", "type": "string", "description": "Generated SQL query" }, { "name": "explanation", "type": "string", "description": "Explanation of the query" }, { "name": "dialect", "type": "string", "description": "SQL dialect used" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote" ] }, "text-embed": { "name": "text-embed", "version": "1.0.0", "description": "Generate embedding vectors from text for RAG and semantic search", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key (not required if using Ollama)" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to embed (up to 8191 tokens)" }, { "name": "model", "type": "string", "default": "text-embedding-3-small", "description": "Embedding model to use" } ], "outputs": [ { "name": "embedding", "type": "array", "description": "Vector embedding (1536 or 3072 dimensions)" }, { "name": "metadata", "type": "object", "description": "Model info, dimensions, token count" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote", "text" ] }, "text-summarize": { "name": "text-summarize", "version": "1.0.0", "description": "Summarize text into 3-5 bullet points using AI", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key for remote inference" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to summarize (up to 1MB)" }, { "name": "bullet_count", "type": "integer", "default": 5, "description": "Maximum number of bullet points (3-10)" }, { "name": "style", "type": "string", "default": "concise", "enum": [ "concise", "detailed", "executive" ], "description": "Summary style" } ], "outputs": [ { "name": "summary", "type": "string", "description": "Bulleted summary of the input text" }, { "name": "metadata", "type": "object", "description": "Audit metadata (model, timestamp, input_hash)" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote", "text" ], "dependencies": { "network_egress": { "required": true, "scope": "Required for the default openai backend; not required for a locally hosted ollama backend.", "endpoints": [ { "host": "api.openai.com", "protocol": "https", "purpose": "chat completion request" } ] }, "third_party_apis": [ { "name": "OpenAI Chat Completions", "component": "openai_chat_completion", "credential": "OPENAI_API_KEY", "data_sent": "The full input text, plus the system and user prompt.", "data_returned": "Model-generated summary text." } ], "credentials_transmitted": [ { "name": "OPENAI_API_KEY", "to": "api.openai.com", "not_to": [ "Expanso Cloud", "pipeline definition" ] } ], "data_leaving_host": [ { "what": "Entire input text (stdin for CLI mode, HTTP request body for MCP mode)", "to": "api.openai.com", "when": "Every invocation using the openai backend" } ], "offline_capable": false, "offline_capable_with": { "backend": "ollama", "note": "Requires a self-hosted model endpoint reachable from the executing node." } } }, "text-to-command": { "name": "text-to-command", "version": "1.0.0", "description": "Convert natural language instructions to CLI commands", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "instruction", "type": "string", "required": true, "description": "Natural language instruction" }, { "name": "shell", "type": "string", "required": false, "description": "Target shell (bash, zsh, powershell, fish)" }, { "name": "context", "type": "string", "required": false, "description": "Additional context (current directory, available tools)" } ], "outputs": [ { "name": "command", "type": "string", "description": "Generated CLI command" }, { "name": "explanation", "type": "string", "description": "Brief explanation of what the command does" }, { "name": "metadata", "type": "object", "description": "Audit metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote", "text" ] }, "text-to-image": { "name": "text-to-image", "version": "1.0.0", "description": "Generate images from text descriptions using AI", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI API key for DALL-E" } ], "inputs": [ { "name": "prompt", "type": "string", "required": true, "description": "Text description of the image to generate" }, { "name": "size", "type": "string", "default": "1024x1024", "enum": [ "1024x1024", "1792x1024", "1024x1792" ], "description": "Image dimensions" }, { "name": "quality", "type": "string", "default": "standard", "enum": [ "standard", "hd" ], "description": "Image quality" }, { "name": "style", "type": "string", "default": "vivid", "enum": [ "vivid", "natural" ], "description": "Generation style" } ], "outputs": [ { "name": "image_url", "type": "string", "description": "URL of generated image (expires in 1 hour)" }, { "name": "metadata", "type": "object", "description": "Generation metadata" } ], "backends": [ "openai" ], "tags": [ "ai", "openai", "remote", "text" ] }, "text-to-speech": { "name": "text-to-speech", "version": "1.0.0", "description": "Convert text to speech using AI (mp3, wav, opus output)", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI API key for TTS" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to convert to speech (max 4096 chars)" }, { "name": "voice", "type": "string", "default": "alloy", "enum": [ "alloy", "echo", "fable", "onyx", "nova", "shimmer" ], "description": "Voice to use" }, { "name": "format", "type": "string", "default": "mp3", "enum": [ "mp3", "opus", "aac", "flac", "wav", "pcm" ], "description": "Audio output format" } ], "outputs": [ { "name": "audio", "type": "binary", "description": "Audio file content (base64 encoded)" }, { "name": "metadata", "type": "object", "description": "Generation metadata" } ], "backends": [ "openai" ], "tags": [ "ai", "openai", "remote", "text" ] }, "text-translate": { "name": "text-translate", "version": "1.0.0", "description": "Translate text between languages using LLM", "category": "ai", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to translate" }, { "name": "target", "type": "string", "default": "english", "description": "Target language" }, { "name": "source", "type": "string", "default": "auto", "description": "Source language (auto-detect if not specified)" } ], "outputs": [ { "name": "translation", "type": "string", "description": "Translated text" }, { "name": "source_language", "type": "string", "description": "Detected source language" }, { "name": "target_language", "type": "string", "description": "Target language" } ], "backends": [ "openai", "ollama" ], "tags": [ "ai", "local", "openai", "remote", "text" ] }, "url-to-article": { "name": "url-to-article", "version": "1.0.0", "description": "Extract clean article text from a URL (title, author, date, body)", "category": "ai", "credentials": [], "inputs": [ { "name": "url", "type": "string", "required": true, "description": "URL of the article to extract" }, { "name": "include_images", "type": "boolean", "default": false, "description": "Include image URLs in output" } ], "outputs": [ { "name": "article", "type": "object", "description": "Extracted article: {title, author, date, body, url}" }, { "name": "metadata", "type": "object", "description": "Extraction metadata" } ], "backends": [ "local" ], "tags": [ "ai", "local", "offline" ] }, "video-generate": { "name": "video-generate", "version": "2.0.0", "description": "Generate short videos from text prompts using Replicate AI models", "category": "ai", "credentials": [ { "name": "REPLICATE_API_TOKEN", "required": true, "description": "Replicate API token from replicate.com" } ], "inputs": [ { "name": "prompt", "type": "string", "required": true, "description": "Text description of the video to generate" }, { "name": "duration", "type": "string", "default": "5", "description": "Video duration in seconds (model dependent, typically 2-5s)" } ], "outputs": [ { "name": "video_url", "type": "string", "description": "URL to the generated video" }, { "name": "status", "type": "string", "description": "Generation status (succeeded, failed, processing)" }, { "name": "metadata", "type": "object", "description": "Generation metadata including model, timing, trace_id" } ], "backends": [ "replicate" ], "tags": [ "ai", "remote" ] }, "gmail-read": { "name": "gmail-read", "version": "1.0.0", "description": "Read emails from Gmail with filtering, search, and label support", "category": "connectors", "credentials": [ { "name": "GMAIL_ACCESS_TOKEN", "required": true, "description": "Gmail OAuth2 access token" }, { "name": "GMAIL_REFRESH_TOKEN", "required": false, "description": "Gmail OAuth2 refresh token for long-lived access" }, { "name": "GMAIL_CLIENT_ID", "required": false, "description": "OAuth2 client ID (for token refresh)" }, { "name": "GMAIL_CLIENT_SECRET", "required": false, "description": "OAuth2 client secret (for token refresh)" } ], "inputs": [ { "name": "query", "type": "string", "required": false, "default": "is:unread", "description": "Gmail search query (same syntax as Gmail search bar)" }, { "name": "label", "type": "string", "required": false, "default": "INBOX", "description": "Gmail label to read from" }, { "name": "limit", "type": "integer", "default": 20, "description": "Maximum emails to retrieve (1-100)" }, { "name": "include_body", "type": "boolean", "default": true, "description": "Include email body content (set false for headers only)" } ], "outputs": [ { "name": "emails", "type": "array", "description": "Array of emails: {id, subject, from, to, date, snippet, body, labels}" }, { "name": "metadata", "type": "object", "description": "Processing metadata: {skill, trace_id, email_count, query, timestamp}" } ], "backends": [ "gmail-api" ], "tags": [ "connectors", "remote" ] }, "slack-read": { "name": "slack-read", "version": "1.0.0", "description": "Read messages from Slack channels and DMs with filtering and search", "category": "connectors", "credentials": [ { "name": "SLACK_BOT_TOKEN", "required": true, "description": "Slack Bot User OAuth Token (xoxb-...)" }, { "name": "SLACK_CHANNEL_ID", "required": false, "description": "Default channel ID to read from" } ], "inputs": [ { "name": "channel", "type": "string", "required": true, "description": "Slack channel ID (e.g., C01234567)" }, { "name": "limit", "type": "integer", "default": 20, "description": "Maximum messages to retrieve (1-100)" }, { "name": "query", "type": "string", "required": false, "description": "Optional search query to filter messages" }, { "name": "since_hours", "type": "integer", "default": 24, "description": "Retrieve messages from last N hours" } ], "outputs": [ { "name": "messages", "type": "array", "description": "Array of messages: {id, user, text, timestamp, thread_ts, reactions}" }, { "name": "channel_info", "type": "object", "description": "Channel metadata: {id, name, topic, purpose, member_count}" }, { "name": "metadata", "type": "object", "description": "Processing metadata: {skill, trace_id, message_count, timestamp}" } ], "backends": [ "slack-api" ], "tags": [ "connectors", "remote", "slack" ] }, "webhook-receive": { "name": "webhook-receive", "version": "1.0.0", "description": "Receive, validate, and process webhook events from any service", "category": "connectors", "credentials": [ { "name": "WEBHOOK_SECRET", "required": false, "description": "Shared secret for HMAC signature verification" }, { "name": "WEBHOOK_ALLOWED_IPS", "required": false, "description": "Comma-separated list of allowed source IPs" } ], "inputs": [ { "name": "path", "type": "string", "default": "/webhook", "description": "HTTP path to listen on" }, { "name": "verify_signature", "type": "boolean", "default": false, "description": "Verify HMAC signature (requires WEBHOOK_SECRET)" }, { "name": "signature_header", "type": "string", "default": "X-Hub-Signature-256", "description": "Header containing the HMAC signature" } ], "outputs": [ { "name": "event", "type": "object", "description": "Parsed webhook event with headers and body" }, { "name": "metadata", "type": "object", "description": "Processing metadata: {skill, trace_id, source_ip, timestamp}" } ], "backends": [ "local" ], "tags": [ "connectors", "local", "offline" ] }, "ci-fixtures": { "name": "ci-fixtures", "version": "1.0.0", "description": "Generate the same synthetic dataset on every run: every field derived from the record number, single-threaded so the file is byte-identical.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local", "offline" ], "dependencies": { "network_egress": { "required": false }, "third_party_apis": [], "credentials_transmitted": [], "data_leaving_host": [], "offline_capable": true }, "job": "CI test fixtures: the same synthetic dataset on every run.", "components": { "inputs": [ "generate" ], "processors": [], "outputs": [ "file" ] }, "job_specs": [ "pipeline.yaml" ], "proof": { "status": "executed-local-only", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "6/6" } ], "proved": [ "Two runs wrote byte-identical files of 200 records, all valid against schema.json.", "A typo in the config made expanso-edge validate exit 1, usable as a CI gate." ], "not_proved": [ "Any run through Cloud.", "The top-level restart_policy never with this spec; it was added after the run and has not been re-run." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. The top-level restart_policy never is newer than the run. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "data-migration-engine": { "name": "data-migration-engine", "version": "1.0.0", "description": "Copy a legacy PostgreSQL table into a new schema in batches, reshaping each row and rejecting invalid rows with a reason. Re-running leaves the target table unchanged; the rejects file is appended again.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local", "offline" ], "dependencies": { "network_egress": { "required": false, "scope": "Only to the two databases." }, "third_party_apis": [], "credentials_transmitted": [ { "name": "database credentials in the two DSNs", "to": "the source and target databases" } ], "data_leaving_host": [ { "what": "row data", "to": "the target database" } ], "offline_capable": true }, "job": "A data migration engine: move a legacy table into a new schema.", "components": { "inputs": [ "sql_select" ], "processors": [ "mapping" ], "outputs": [ "switch", "sql_insert", "file" ] }, "job_specs": [ "pipeline.yaml" ], "proof": { "status": "executed-cloud-and-local", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "expanso-cloud", "detail": "Submitted to an Expanso Cloud workspace with a label selector and executed by the one operator-registered node carrying that label. Not a hosted runner; the job's dependencies ran on the same host as the node.", "checks_passed": "7/7" }, { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "7/7" }, { "where": "local-mode-node", "detail": "The signed balance formula, added after the runs above, run against a separate synthetic signed fixture (cents -150, -5, -100, -99999, 0, 7, 99, 100, 12345 and one invalid-email row). The job completed after 1 execution; all 9 target rows matched the independent SQL transform (expected.sql), the invalid email went to rejects, and a second run left the target table unchanged (the rejects file was appended again). With the old formula Postgres rejected -1.-5, only 6 of 9 rows were written and the job stayed running, retrying the output.", "checks_passed": "3/3" } ], "proved": [ "1,000 synthetic legacy rows became 994 target rows plus 6 rejects, each with its reason.", "The target matched an independent SQL statement of the transform (expected.sql); a second run left the target table unchanged." ], "not_proved": [ "Change data capture. This is a batch copy; a CDC job (postgres_cdc) did not initialize in testing and is unproven.", "The top-level restart_policy never on Expanso Cloud with this spec; it was added after the Cloud run.", "Negative balances on Expanso Cloud. The Cloud and 994/6 runs used the earlier formula and had only non-negative balances; the signed formula ran on a local-mode node only." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. The top-level restart_policy never and the signed balance formula are newer than the Cloud run. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "log-reduction": { "name": "log-reduction", "version": "1.0.0", "description": "Parse access logs, drop health-check noise, keep every 4xx/5xx as its own event and roll up successes per minute, route and status.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local", "offline" ], "dependencies": { "network_egress": { "required": false }, "third_party_apis": [], "credentials_transmitted": [], "data_leaving_host": [], "offline_capable": true }, "job": "Log reduction: cut log volume but keep every error.", "components": { "inputs": [ "broker", "file" ], "processors": [ "mapping", "switch", "group_by_value", "archive" ], "outputs": [ "file" ] }, "job_specs": [ "pipeline.yaml" ], "proof": { "status": "executed-local-only", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "5/5" } ], "proved": [ "5,000 synthetic lines became 330 events: all 250 errors kept individually and 80 per-minute rollups matching an independent recount.", "92.7% fewer bytes on that synthetic log only; not a benchmark for real logs." ], "not_proved": [ "Any run through Cloud; streaming (unbounded) logs. The whole bounded file is read as one batch.", "The top-level restart_policy never with this spec; it was added after the run and has not been re-run." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. The top-level restart_policy never is newer than the run. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "notification-engine": { "name": "notification-engine", "version": "1.0.0", "description": "Receive events on a webhook, drop duplicates, keep the severities someone must act on, and POST a formatted message with retries.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local" ], "dependencies": { "network_egress": { "required": true, "endpoints": [ { "host": "the notification endpoint", "protocol": "http(s)", "purpose": "POST the message" } ] }, "third_party_apis": [], "credentials_transmitted": [], "data_leaving_host": [ { "what": "the formatted message text", "to": "the notification endpoint" } ], "offline_capable": false }, "job": "A notification engine: send a message when an event matters.", "components": { "inputs": [ "http_server" ], "processors": [ "dedupe", "mapping" ], "outputs": [ "http_client" ], "caches": [ "memory" ] }, "job_specs": [ "pipeline.yaml" ], "proof": { "status": "executed-cloud-and-local", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "expanso-cloud", "detail": "Submitted to an Expanso Cloud workspace with a label selector and executed by the one operator-registered node carrying that label. Not a hosted runner; the job's dependencies ran on the same host as the node.", "checks_passed": "7/7" }, { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "7/7" } ], "proved": [ "8 events in; exactly the 3 critical/high ones delivered, a duplicate delivered once.", "Two 503 responses from the receiver were retried until they succeeded." ], "not_proved": [ "Delivery into Slack, email or any real person. The receiver was a local test sink; the {\"text\": ...} body matches the Slack incoming-webhook shape, but Slack was not called." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "rag-embed-retrieve": { "name": "rag-embed-retrieve", "version": "1.0.0", "description": "Fetch documents over HTTP, split them into paragraph chunks that keep their source URL, embed each chunk with Ollama, store vectors in Qdrant, and answer questions by vector search.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local" ], "dependencies": { "network_egress": { "required": true, "endpoints": [ { "host": "the document host", "protocol": "http(s)", "purpose": "fetch the index and documents" }, { "host": "Ollama (127.0.0.1:11434 here)", "protocol": "http", "purpose": "embeddings" }, { "host": "Qdrant (127.0.0.1:6333 REST, 6334 gRPC here)", "protocol": "http/grpc", "purpose": "store and search vectors" } ] }, "third_party_apis": [], "credentials_transmitted": [], "data_leaving_host": [ { "what": "HTTP GETs for the index and each document", "to": "the document host" }, { "what": "chunk text and vectors", "to": "Ollama and Qdrant, local in this configuration" } ], "offline_capable": false, "tested_with": { "ollama": "0.33.2", "model": "nomic-embed-text (768-dim)", "qdrant": "1.19.1" } }, "job": "Document embedding for retrieval (RAG): fetch, chunk, embed, store, search.", "components": { "inputs": [ "generate", "file" ], "processors": [ "http", "unarchive", "mapping", "branch", "ollama_embeddings", "qdrant" ], "outputs": [ "http_client", "file" ] }, "job_specs": [ "pipeline.yaml", "pipeline-query.yaml" ], "proof": { "status": "executed-cloud-and-local", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "expanso-cloud", "detail": "Submitted to an Expanso Cloud workspace with a label selector and executed by the one operator-registered node carrying that label. Not a hosted runner; the job's dependencies ran on the same host as the node.", "checks_passed": "12/12" }, { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "12/12" }, { "where": "local-mode-node", "detail": "The URL-based chunk_id, added after the runs above, run against fixture documents a/guide.md, b/guide.md (same filename, different content) and c/unique.md. The earlier filename-based id stored 3 points for 5 chunks (b/guide.md overwrote a/guide.md); the URL-based id stored all 5 with distinct source_uri and chunk_id, re-ingest kept 5, and each test question's top hit came from the right URL.", "checks_passed": "3/3" } ], "proved": [ "4 documents fetched over HTTP became 16 chunks, each carrying its source URL through storage and retrieval.", "Stored vectors equal a direct Ollama embedding of the same text (cosine 1.000000); re-ingest is idempotent.", "All 4 test questions returned the right chunk first (qdrant processor search)." ], "not_proved": [ "The native qdrant OUTPUT. On expanso-edge v2.1.21 its id mapping could not read message fields or metadata, and the job still reported completed with 0 points. Vectors are written with http_client to the Qdrant REST upsert API instead.", "The URL-based chunk_id on Expanso Cloud. The Cloud runs used the earlier filename-based id; the URL-based id ran on a local-mode node only.", "The top-level restart_policy never on Expanso Cloud with this spec; it was added after the Cloud run." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. The URL-based chunk_id and the top-level restart_policy never are newer than the Cloud run. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "rss-feed-engine": { "name": "rss-feed-engine", "version": "1.0.0", "description": "Poll an RSS feed and emit one normalized JSON record per item. Emits each item once per GUID, even across restarts, for feeds whose items carry a GUID. Every item must carry a stable, non-empty ; feeds whose items lack a GUID are not supported.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local" ], "dependencies": { "network_egress": { "required": true, "endpoints": [ { "host": "the feed host", "protocol": "https", "purpose": "GET the feed" } ] }, "third_party_apis": [], "credentials_transmitted": [], "data_leaving_host": [ { "what": "an HTTP GET for the feed URL", "to": "the feed host" } ], "offline_capable": false }, "job": "An RSS or news feed engine: poll feeds, parse items, deduplicate, store.", "components": { "inputs": [ "generate" ], "processors": [ "http", "xml", "mapping", "unarchive", "dedupe" ], "outputs": [ "file" ], "caches": [ "file" ] }, "job_specs": [ "pipeline.yaml" ], "proof": { "status": "executed-cloud-and-local", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "expanso-cloud", "detail": "Submitted to an Expanso Cloud workspace with a label selector and executed by the one operator-registered node carrying that label. Not a hosted runner; the job's dependencies ran on the same host as the node.", "checks_passed": "14/14" }, { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "14/14" }, { "where": "local-mode-node", "detail": "The fetch-error guard after the http processor, added after the runs above, run against a local fixture. HTTP 200 completed with 4 records; HTTP 401 and 503 each failed with 0 records and the error \"feed fetch failed\". Without the guard a 401 also failed, but in the xml step, so the guard makes fetch failures explicit and correctly attributed.", "checks_passed": "3/3" } ], "proved": [ "Live NASA (10 items) and BBC Technology (21 items, GMT dates) feeds each matched an independent fetch of the same feed.", "A duplicate GUID was emitted once; a restarted job emitted 0 items it had already seen (file-backed dedupe cache)." ], "not_proved": [ "Feeds other than RSS 2.0 (Atom was not tested).", "Feeds whose items lack a GUID. Every item must carry a stable, non-empty ; GUID-less feeds are not supported and were not tested.", "The fetch-error guard on Expanso Cloud; it ran on a local-mode node only.", "The top-level restart_policy never on Expanso Cloud with this spec; it was added after the Cloud run." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. The fetch-error guard and the top-level restart_policy never are newer than the Cloud run. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "sensor-telemetry-mqtt": { "name": "sensor-telemetry-mqtt", "version": "1.0.0", "description": "Subscribe to sensor topics over MQTT, normalize readings (F to C), raise threshold alerts and keep malformed readings out of the telemetry stream.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local", "offline" ], "dependencies": { "network_egress": { "required": true, "endpoints": [ { "host": "the MQTT broker", "protocol": "mqtt", "purpose": "subscribe" } ] }, "third_party_apis": [], "credentials_transmitted": [], "data_leaving_host": [], "offline_capable": true, "tested_with": { "broker": "eclipse-mosquitto:2, anonymous listener" } }, "job": "Sensor or industrial telemetry over MQTT: subscribe, normalize, alert.", "components": { "inputs": [ "mqtt" ], "processors": [ "mapping" ], "outputs": [ "switch", "file" ] }, "job_specs": [ "pipeline.yaml" ], "proof": { "status": "executed-local-only", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "6/6" } ], "proved": [ "30 synthetic readings: 28 valid in telemetry, 3 alerts, 2 malformed rejected with the reason." ], "not_proved": [ "Any run through Cloud; OPC UA, Modbus or any other industrial protocol; real sensor hardware. The publisher was a synthetic script." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "webhook-fan-out": { "name": "webhook-fan-out", "version": "1.0.0", "description": "Accept events on one webhook and deliver every event to several endpoints, each retrying independently.", "category": "jobs", "credentials": [], "inputs": [], "outputs": [], "backends": [ "local" ], "tags": [ "jobs", "local" ], "dependencies": { "network_egress": { "required": true, "endpoints": [ { "host": "each receiver", "protocol": "http(s)", "purpose": "POST each event" } ] }, "third_party_apis": [], "credentials_transmitted": [], "data_leaving_host": [ { "what": "every event body", "to": "every receiver" } ], "offline_capable": false }, "job": "A webhook fan-out: deliver every event to several endpoints.", "components": { "inputs": [ "http_server" ], "processors": [ "mapping" ], "outputs": [ "broker", "http_client" ] }, "job_specs": [ "pipeline.yaml" ], "proof": { "status": "executed-local-only", "date": "2026-09-18", "expanso_edge": "v2.1.21", "record": "skills/jobs/PROOF-2026-09-18.md", "runs": [ { "where": "local-mode-node", "detail": "Submitted to a local-mode node (expanso-edge run --local). Not run through Cloud.", "checks_passed": "6/6" } ], "proved": [ "10 events in; each of 3 receivers got all 10 exactly once, including one that answered 503 twice." ], "not_proved": [ "Any run through Cloud; real third-party receivers (receivers were local test sinks)." ], "note": "The job spec has the same structure as the job that ran. Only the values listed in its header comment differ, and long mappings are rewrapped. Inputs in the runs were synthetic fixtures unless a proved line says otherwise." } }, "access-gate": { "name": "access-gate", "version": "1.0.0", "description": "Permission check gateway for agent access to connectors and data sources", "category": "security", "credentials": [ { "name": "ACCESS_POLICY_FILE", "required": false, "description": "Path to JSON policy file defining agent permissions" } ], "inputs": [ { "name": "agent", "type": "string", "required": true, "description": "Agent or user identifier requesting access" }, { "name": "resource", "type": "string", "required": true, "description": "Resource being accessed (e.g., slack-read, gmail-read)" }, { "name": "action", "type": "string", "default": "read", "description": "Action being performed (read, write, delete)" } ], "outputs": [ { "name": "allowed", "type": "boolean", "description": "Whether access is permitted" }, { "name": "reason", "type": "string", "description": "Reason for allow/deny decision" }, { "name": "passthrough", "type": "any", "description": "Original request data passed through if allowed" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "audit-envelope": { "name": "audit-envelope", "version": "1.0.0", "description": "Wrap data with audit metadata (timestamp, hash, trace ID, signatures)", "category": "security", "credentials": [], "inputs": [ { "name": "data", "type": "any", "required": true, "description": "Data to wrap with audit envelope" }, { "name": "source", "type": "string", "default": "unknown", "description": "Source system identifier" }, { "name": "actor", "type": "string", "default": "system", "description": "Actor/user who initiated the action" } ], "outputs": [ { "name": "envelope", "type": "object", "description": "Complete audit envelope with metadata" }, { "name": "signature", "type": "string", "description": "HMAC signature of the envelope" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "cve-scan": { "name": "cve-scan", "version": "1.0.0", "description": "Scan SBOM for known CVE vulnerabilities", "category": "security", "credentials": [ { "name": "NVD_API_KEY", "required": false, "description": "NVD API key for higher rate limits" } ], "inputs": [ { "name": "sbom", "type": "object", "required": true, "description": "CycloneDX or SPDX SBOM" }, { "name": "severity_threshold", "type": "string", "default": "low", "enum": [ "low", "medium", "high", "critical" ], "description": "Minimum severity to report" } ], "outputs": [ { "name": "vulnerabilities", "type": "array", "description": "Array of {cve_id, severity, package, fix_version}" }, { "name": "summary", "type": "object", "description": "Counts by severity" }, { "name": "metadata", "type": "object", "description": "Scan metadata" } ], "backends": [ "local", "remote" ], "tags": [ "local", "remote", "security" ] }, "data-fence": { "name": "data-fence", "version": "1.0.0", "description": "Filter data to only allowed fields and rows before passing to agents", "category": "security", "credentials": [], "inputs": [ { "name": "data", "type": "any", "required": true, "description": "Data to filter (object or array of objects)" }, { "name": "allowed_fields", "type": "array", "required": false, "description": "List of field names to keep (e.g., ['id', 'text', 'timestamp'])" }, { "name": "blocked_fields", "type": "array", "required": false, "description": "List of field names to remove (e.g., ['email', 'phone', 'ssn'])" }, { "name": "max_rows", "type": "integer", "default": 100, "description": "Maximum number of rows/items to return" } ], "outputs": [ { "name": "data", "type": "any", "description": "Filtered data with only allowed fields" }, { "name": "metadata", "type": "object", "description": "Filter metadata: {fields_removed, rows_truncated, trace_id}" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "hash-digest": { "name": "hash-digest", "version": "1.0.0", "description": "Compute cryptographic hash (SHA256, SHA512, MD5) of any input", "category": "security", "credentials": [], "inputs": [ { "name": "data", "type": "string", "required": true, "description": "Data to hash" }, { "name": "algorithm", "type": "string", "required": false, "description": "Hash algorithm (sha256, sha512, md5, xxhash64)" } ], "outputs": [ { "name": "hash", "type": "string", "description": "Hex-encoded hash" }, { "name": "algorithm", "type": "string", "description": "Algorithm used" }, { "name": "metadata", "type": "object", "description": "Audit metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "jwt-verify": { "name": "jwt-verify", "version": "1.0.0", "description": "Verify JWT signature and extract/validate claims", "category": "security", "credentials": [ { "name": "JWT_SECRET", "required": false, "description": "Secret for HMAC verification" } ], "inputs": [ { "name": "token", "type": "string", "required": true, "description": "JWT token to verify" }, { "name": "verify_exp", "type": "boolean", "default": true, "description": "Check expiration" } ], "outputs": [ { "name": "valid", "type": "boolean", "description": "Whether token is valid" }, { "name": "header", "type": "object", "description": "JWT header" }, { "name": "claims", "type": "object", "description": "JWT payload/claims" }, { "name": "metadata", "type": "object", "description": "Verification details" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "log-sanitize": { "name": "log-sanitize", "version": "1.0.0", "description": "Sanitize log entries by removing passwords, tokens, and sensitive patterns", "category": "security", "credentials": [], "inputs": [ { "name": "log", "type": "string", "required": true, "description": "Log entry or log file content to sanitize" }, { "name": "patterns", "type": "array", "default": [ "password", "token", "secret", "key", "auth" ], "description": "Additional patterns to redact" } ], "outputs": [ { "name": "sanitized", "type": "string", "description": "Log with sensitive data removed" }, { "name": "redactions", "type": "integer", "description": "Number of redactions made" }, { "name": "patterns_matched", "type": "array", "description": "List of patterns that matched" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "password-generate": { "name": "password-generate", "version": "1.0.0", "description": "Generate secure random passwords", "category": "security", "credentials": [], "inputs": [ { "name": "length", "type": "integer", "default": 16, "description": "Password length" } ], "outputs": [ { "name": "password", "type": "string", "description": "Generated password" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "pii-detect": { "name": "pii-detect", "version": "1.0.0", "description": "Detect personally identifiable information (PII) in text", "category": "security", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key (optional - can use regex patterns only)" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to scan for PII" }, { "name": "types", "type": "array", "required": false, "description": "PII types to detect (email, phone, ssn, credit_card, etc.)" } ], "outputs": [ { "name": "findings", "type": "array", "description": "Detected PII with type, value, and position" }, { "name": "has_pii", "type": "boolean", "description": "Whether any PII was found" }, { "name": "metadata", "type": "object", "description": "Audit metadata" } ], "backends": [ "openai", "regex" ], "tags": [ "local", "openai", "remote", "security" ] }, "pii-redact": { "name": "pii-redact", "version": "1.0.0", "description": "Redact PII from text, replacing sensitive data with placeholders", "category": "security", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key for LLM-based PII detection" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text containing PII to redact" }, { "name": "placeholder", "type": "string", "default": "[REDACTED]", "description": "Replacement text for redacted content" } ], "outputs": [ { "name": "redacted_text", "type": "string", "description": "Text with PII replaced by placeholders" }, { "name": "redaction_count", "type": "integer", "description": "Number of items redacted" }, { "name": "redacted_types", "type": "array", "description": "Types of PII that were redacted" } ], "backends": [ "openai", "ollama" ], "tags": [ "local", "openai", "remote", "security" ] }, "policy-check": { "name": "policy-check", "version": "1.0.0", "description": "Check configuration against policy rules (allow/deny with reasons)", "category": "security", "credentials": [], "inputs": [ { "name": "config", "type": "object", "required": true, "description": "Configuration to check" }, { "name": "policy", "type": "object", "required": true, "description": "Policy rules: {allow: [...], deny: [...]}" } ], "outputs": [ { "name": "allowed", "type": "boolean", "description": "Whether config passes all policies" }, { "name": "violations", "type": "array", "description": "List of policy violations" }, { "name": "metadata", "type": "object", "description": "Check metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "sbom-generate": { "name": "sbom-generate", "version": "1.0.0", "description": "Generate SBOM (Software Bill of Materials) from package files", "category": "security", "credentials": [], "inputs": [ { "name": "packages", "type": "object", "required": true, "description": "Package manifest (package.json, requirements.txt content, etc.)" }, { "name": "format", "type": "string", "default": "cyclonedx", "enum": [ "cyclonedx", "spdx" ], "description": "SBOM output format" } ], "outputs": [ { "name": "sbom", "type": "object", "description": "SBOM in CycloneDX or SPDX format" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "secrets-scan": { "name": "secrets-scan", "version": "1.0.0", "description": "Detect hardcoded secrets (API keys, tokens, passwords) in text or code", "category": "security", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key (optional - enhances detection)" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text or code to scan for secrets" }, { "name": "types", "type": "array", "required": false, "description": "Secret types to detect (api_key, token, password, etc.)" } ], "outputs": [ { "name": "findings", "type": "array", "description": "Detected secrets with type and location" }, { "name": "has_secrets", "type": "boolean", "description": "Whether any secrets were found" }, { "name": "metadata", "type": "object", "description": "Audit metadata" } ], "backends": [ "openai", "regex" ], "tags": [ "local", "openai", "remote", "security" ] }, "sign-envelope": { "name": "sign-envelope", "version": "1.0.0", "description": "Create signed envelope with payload, hash, signature, and timestamp", "category": "security", "credentials": [ { "name": "SIGNING_KEY", "required": true, "description": "Base64-encoded ed25519 private key" } ], "inputs": [ { "name": "payload", "type": "any", "required": true, "description": "Data to wrap and sign" }, { "name": "key_id", "type": "string", "required": false, "description": "Key identifier for verification" } ], "outputs": [ { "name": "envelope", "type": "object", "description": "{payload, hash, signature, key_id, created_at}" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "tls-inspect": { "name": "tls-inspect", "version": "1.0.0", "description": "Inspect TLS certificate (expiry, SANs, chain, cipher)", "category": "security", "credentials": [], "inputs": [ { "name": "host", "type": "string", "required": true, "description": "Hostname or host:port to inspect" } ], "outputs": [ { "name": "certificate", "type": "object", "description": "Certificate details" }, { "name": "valid", "type": "boolean", "description": "Whether cert is valid and not expired" }, { "name": "metadata", "type": "object", "description": "Inspection metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "verify-signature": { "name": "verify-signature", "version": "1.0.0", "description": "Verify signed envelope signature and extract payload", "category": "security", "credentials": [ { "name": "VERIFY_KEY", "required": true, "description": "Verification key" } ], "inputs": [ { "name": "envelope", "type": "object", "required": true, "description": "Signed envelope from sign-envelope skill" } ], "outputs": [ { "name": "valid", "type": "boolean", "description": "Whether signature is valid" }, { "name": "payload", "type": "any", "description": "Extracted payload (if valid)" }, { "name": "metadata", "type": "object", "description": "Verification details" } ], "backends": [ "local" ], "tags": [ "local", "offline", "security" ] }, "array-chunk": { "name": "array-chunk", "version": "1.0.0", "description": "Split arrays into smaller chunks", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Array to chunk" }, { "name": "size", "type": "integer", "default": 2, "description": "Chunk size" } ], "outputs": [ { "name": "chunks", "type": "array", "description": "Array of chunks" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-filter": { "name": "array-filter", "version": "1.0.0", "description": "Filter array elements by condition", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Source array" }, { "name": "condition", "type": "string", "required": true, "description": "Filter condition" } ], "outputs": [ { "name": "filtered", "type": "array", "description": "Filtered elements" }, { "name": "count", "type": "integer", "description": "Number of matching elements" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-find": { "name": "array-find", "version": "1.0.0", "description": "Find element index in array", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Source array" }, { "name": "value", "type": "any", "required": true, "description": "Value to find" } ], "outputs": [ { "name": "index", "type": "integer", "description": "Index of element (-1 if not found)" }, { "name": "found", "type": "boolean", "description": "Whether element was found" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-first": { "name": "array-first", "version": "1.0.0", "description": "Get first element(s) from array", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Source array" }, { "name": "count", "type": "integer", "default": 1, "description": "Number of elements" } ], "outputs": [ { "name": "first", "type": "any", "description": "First element(s)" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-flatten": { "name": "array-flatten", "version": "1.0.0", "description": "Flatten nested arrays", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Nested array to flatten" } ], "outputs": [ { "name": "flat", "type": "array", "description": "Flattened array" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-includes": { "name": "array-includes", "version": "1.0.0", "description": "Check if array includes a value", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Array to search" }, { "name": "value", "type": "any", "required": true, "description": "Value to find" } ], "outputs": [ { "name": "includes", "type": "boolean", "description": "Whether value was found" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-join": { "name": "array-join", "version": "1.0.0", "description": "Join array elements with separator", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Array to join" }, { "name": "separator", "type": "string", "default": ",", "description": "Separator string" } ], "outputs": [ { "name": "joined", "type": "string", "description": "Joined string using custom separator" }, { "name": "by_comma", "type": "string", "description": "Joined with comma separator" }, { "name": "by_space", "type": "string", "description": "Joined with space separator" }, { "name": "by_newline", "type": "string", "description": "Joined with newline separator" }, { "name": "by_pipe", "type": "string", "description": "Joined with pipe separator" }, { "name": "count", "type": "number", "description": "Number of elements" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-last": { "name": "array-last", "version": "1.0.0", "description": "Get last element(s) from array", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Source array" } ], "outputs": [ { "name": "last", "type": "any", "description": "Last element" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-length": { "name": "array-length", "version": "1.0.0", "description": "Get length/size of arrays and strings", "category": "transforms", "credentials": [], "inputs": [ { "name": "value", "type": "any", "required": true, "description": "Array or string" } ], "outputs": [ { "name": "length", "type": "integer", "description": "Length of the value" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-map": { "name": "array-map", "version": "1.0.0", "description": "Transform array elements", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Source array" } ], "outputs": [ { "name": "mapped", "type": "array", "description": "Transformed elements" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-reduce": { "name": "array-reduce", "version": "1.0.0", "description": "Reduce array to single value (sum)", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Array of numbers" } ], "outputs": [ { "name": "sum", "type": "number", "description": "Sum of all elements" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-reverse": { "name": "array-reverse", "version": "1.0.0", "description": "Reverse array order", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Array to reverse" } ], "outputs": [ { "name": "reversed", "type": "array", "description": "Reversed array" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-slice": { "name": "array-slice", "version": "1.0.0", "description": "Extract portion of array", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Source array" }, { "name": "start", "type": "integer", "default": 0, "description": "Start index" }, { "name": "end", "type": "integer", "description": "End index" } ], "outputs": [ { "name": "sliced", "type": "array", "description": "Sliced array portion" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-sort": { "name": "array-sort", "version": "1.0.0", "description": "Sort arrays of values", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Array to sort" } ], "outputs": [ { "name": "sorted", "type": "array", "description": "Sorted array" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "array-unique": { "name": "array-unique", "version": "1.0.0", "description": "Remove duplicate values from arrays", "category": "transforms", "credentials": [], "inputs": [ { "name": "array", "type": "array", "required": true, "description": "Array with potential duplicates" } ], "outputs": [ { "name": "unique", "type": "array", "description": "Array with duplicates removed" } ], "backends": [ "local" ], "tags": [ "array", "local", "offline", "transforms" ] }, "base64-codec": { "name": "base64-codec", "version": "1.0.0", "description": "Encode and decode Base64 content", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to encode or Base64 to decode" }, { "name": "mode", "type": "string", "default": "encode", "description": "Operation mode: 'encode' or 'decode'" } ], "outputs": [ { "name": "result", "type": "string", "description": "Encoded or decoded result" }, { "name": "mode", "type": "string", "description": "Operation performed" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "binary-encode": { "name": "binary-encode", "version": "1.0.0", "description": "Convert text to binary representation", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to encode" } ], "outputs": [ { "name": "binary", "type": "string", "description": "Binary representation" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "boolean-parse": { "name": "boolean-parse", "version": "1.0.0", "description": "Parse various boolean representations", "category": "transforms", "credentials": [], "inputs": [ { "name": "value", "type": "string", "required": true, "description": "Value to parse as boolean" } ], "outputs": [ { "name": "boolean", "type": "boolean", "description": "Parsed boolean value" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "color-convert": { "name": "color-convert", "version": "1.0.0", "description": "Convert colors between hex, RGB, and HSL formats", "category": "transforms", "credentials": [], "inputs": [ { "name": "color", "type": "string", "required": true, "description": "Color in hex (#fff or #ffffff) or rgb(r,g,b)" } ], "outputs": [ { "name": "hex", "type": "string" }, { "name": "rgb", "type": "object" }, { "name": "css", "type": "string" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "color-rgb": { "name": "color-rgb", "version": "1.0.0", "description": "Convert between hex and RGB color formats", "category": "transforms", "credentials": [], "inputs": [ { "name": "color", "type": "string", "required": true, "description": "Color in hex format" } ], "outputs": [ { "name": "rgb", "type": "object", "description": "RGB values" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "cron-explain": { "name": "cron-explain", "version": "1.0.0", "description": "Explain cron expressions in plain English", "category": "transforms", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key for natural language explanation" } ], "inputs": [ { "name": "cron", "type": "string", "required": true, "description": "Cron expression to explain (5 or 6 fields)" } ], "outputs": [ { "name": "explanation", "type": "string", "description": "Human-readable explanation" }, { "name": "cron", "type": "string", "description": "Original cron expression" }, { "name": "fields", "type": "object", "description": "Parsed cron fields" } ], "backends": [ "openai", "ollama" ], "tags": [ "local", "openai", "remote", "transforms" ] }, "csv-to-json": { "name": "csv-to-json", "version": "1.0.0", "description": "Convert CSV data to JSON array of objects", "category": "transforms", "credentials": [], "inputs": [ { "name": "csv", "type": "string", "required": true, "description": "CSV data with header row" }, { "name": "delimiter", "type": "string", "default": ",", "description": "Field delimiter" } ], "outputs": [ { "name": "data", "type": "array", "description": "Array of JSON objects" }, { "name": "row_count", "type": "integer", "description": "Number of data rows" }, { "name": "columns", "type": "array", "description": "Column names from header" } ], "backends": [ "local" ], "tags": [ "csv", "local", "offline", "transforms" ] }, "date-add": { "name": "date-add", "version": "1.0.0", "description": "Add duration to date", "category": "transforms", "credentials": [], "inputs": [ { "name": "date", "type": "string", "required": true, "description": "Base date" }, { "name": "days", "type": "integer", "description": "Days to add" } ], "outputs": [ { "name": "result", "type": "string", "description": "Resulting date" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "date-diff": { "name": "date-diff", "version": "1.0.0", "description": "Calculate difference between dates", "category": "transforms", "credentials": [], "inputs": [ { "name": "start", "type": "string", "required": true, "description": "Start date" }, { "name": "end", "type": "string", "required": true, "description": "End date" } ], "outputs": [ { "name": "days", "type": "number", "description": "Difference in days" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "date-format": { "name": "date-format", "version": "1.0.0", "description": "Parse and format dates in various formats", "category": "transforms", "credentials": [], "inputs": [ { "name": "date", "type": "string", "required": true, "description": "Date string to parse" } ], "outputs": [ { "name": "iso", "type": "string", "description": "ISO 8601 format" }, { "name": "unix", "type": "integer", "description": "Unix timestamp" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "date-now": { "name": "date-now", "version": "1.0.0", "description": "Get current date and time", "category": "transforms", "credentials": [], "inputs": [], "outputs": [ { "name": "now", "type": "string", "description": "Current timestamp" }, { "name": "unix", "type": "integer", "description": "Unix timestamp" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "duration-format": { "name": "duration-format", "version": "1.0.0", "description": "Format durations in human-readable format", "category": "transforms", "credentials": [], "inputs": [ { "name": "seconds", "type": "integer", "required": true, "description": "Duration in seconds" } ], "outputs": [ { "name": "formatted", "type": "string", "description": "Human-readable duration" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "emoji-strip": { "name": "emoji-strip", "version": "1.0.0", "description": "Remove or extract emojis from text", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text with emojis" } ], "outputs": [ { "name": "clean", "type": "string", "description": "Text without emojis" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "env-parse": { "name": "env-parse", "version": "1.0.0", "description": "Parse .env file format to JSON", "category": "transforms", "credentials": [], "inputs": [ { "name": "content", "type": "string", "required": true, "description": ".env file content" } ], "outputs": [ { "name": "variables", "type": "object", "description": "Parsed environment variables" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "file-size": { "name": "file-size", "version": "1.0.0", "description": "Format file sizes in human-readable format", "category": "transforms", "credentials": [], "inputs": [ { "name": "bytes", "type": "integer", "required": true, "description": "Size in bytes" } ], "outputs": [ { "name": "formatted", "type": "string", "description": "Human-readable size" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "hex-encode": { "name": "hex-encode", "version": "1.0.0", "description": "Encode and decode hexadecimal strings", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to encode/decode" } ], "outputs": [ { "name": "hex", "type": "string", "description": "Hex encoded result" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "html-strip": { "name": "html-strip", "version": "1.0.0", "description": "Strip HTML tags from text, leaving only plain text content", "category": "transforms", "credentials": [], "inputs": [ { "name": "html", "type": "string", "required": true, "description": "HTML content to strip" } ], "outputs": [ { "name": "text", "type": "string", "description": "Plain text without HTML tags" }, { "name": "original_length", "type": "integer", "description": "Original HTML length" }, { "name": "text_length", "type": "integer", "description": "Resulting text length" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "http-status": { "name": "http-status", "version": "1.0.0", "description": "Look up HTTP status code meanings", "category": "transforms", "credentials": [], "inputs": [ { "name": "code", "type": "integer", "required": true, "description": "HTTP status code" } ], "outputs": [ { "name": "message", "type": "string", "description": "Status message" }, { "name": "category", "type": "string", "description": "Status category" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "ip-parse": { "name": "ip-parse", "version": "1.0.0", "description": "Parse and validate IP addresses", "category": "transforms", "credentials": [], "inputs": [ { "name": "ip", "type": "string", "required": true, "description": "IP address to parse" } ], "outputs": [ { "name": "valid", "type": "boolean", "description": "Whether IP is valid" }, { "name": "version", "type": "integer", "description": "IP version (4 or 6)" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "json-canonicalize": { "name": "json-canonicalize", "version": "1.0.0", "description": "Convert JSON to canonical form for reproducible hashing/signing", "category": "transforms", "credentials": [], "inputs": [ { "name": "json", "type": "object", "required": true, "description": "JSON to canonicalize" } ], "outputs": [ { "name": "canonical", "type": "string", "description": "Canonicalized JSON string" }, { "name": "hash", "type": "string", "description": "SHA-256 hash of canonical form" }, { "name": "metadata", "type": "object", "description": "Processing metadata" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-compact": { "name": "json-compact", "version": "1.0.0", "description": "Compact JSON by removing whitespace", "category": "transforms", "credentials": [], "inputs": [ { "name": "json", "type": "string", "required": true, "description": "JSON to compact" } ], "outputs": [ { "name": "compact", "type": "string", "description": "Compacted JSON" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-diff": { "name": "json-diff", "version": "1.0.0", "description": "Compare two JSON objects and find differences", "category": "transforms", "credentials": [], "inputs": [ { "name": "a", "type": "object", "required": true, "description": "First JSON object" }, { "name": "b", "type": "object", "required": true, "description": "Second JSON object" } ], "outputs": [ { "name": "equal", "type": "boolean", "description": "Whether objects are equal" }, { "name": "differences", "type": "array", "description": "List of differences" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-flatten": { "name": "json-flatten", "version": "1.0.0", "description": "Flatten nested JSON objects", "category": "transforms", "credentials": [], "inputs": [ { "name": "object", "type": "object", "required": true, "description": "Nested JSON object" } ], "outputs": [ { "name": "flat", "type": "object", "description": "Flattened object with dot notation keys" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-merge": { "name": "json-merge", "version": "1.0.0", "description": "Merge multiple JSON objects", "category": "transforms", "credentials": [], "inputs": [ { "name": "objects", "type": "array", "required": true, "description": "JSON objects to merge" } ], "outputs": [ { "name": "merged", "type": "object", "description": "Merged JSON object" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-pretty": { "name": "json-pretty", "version": "1.0.0", "description": "Pretty print JSON with indentation", "category": "transforms", "credentials": [], "inputs": [ { "name": "json", "type": "string", "required": true }, { "name": "indent", "type": "integer", "default": 2 } ], "outputs": [ { "name": "formatted", "type": "string" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-to-csv": { "name": "json-to-csv", "version": "1.0.0", "description": "Convert JSON array of objects to CSV format", "category": "transforms", "credentials": [], "inputs": [ { "name": "data", "type": "array", "required": true, "description": "JSON array of objects" }, { "name": "delimiter", "type": "string", "default": ",", "description": "Field delimiter" } ], "outputs": [ { "name": "csv", "type": "string", "description": "CSV formatted string" }, { "name": "row_count", "type": "integer", "description": "Number of data rows" }, { "name": "columns", "type": "array", "description": "Column names" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-to-yaml": { "name": "json-to-yaml", "version": "1.0.0", "description": "Convert JSON to YAML format", "category": "transforms", "credentials": [], "inputs": [ { "name": "json", "type": "string", "required": true, "description": "JSON string to convert" } ], "outputs": [ { "name": "yaml", "type": "string", "description": "YAML formatted output" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "json-validate": { "name": "json-validate", "version": "1.0.0", "description": "Validate JSON syntax and structure", "category": "transforms", "credentials": [], "inputs": [ { "name": "json", "type": "string", "required": true, "description": "JSON content to validate" } ], "outputs": [ { "name": "valid", "type": "boolean", "description": "Whether the JSON is valid" }, { "name": "error", "type": "string", "description": "Error message if invalid" }, { "name": "parsed", "type": "object", "description": "Parsed JSON object (if valid)" }, { "name": "stats", "type": "object", "description": "Statistics about the JSON (keys, depth, etc.)" } ], "backends": [ "local" ], "tags": [ "json", "local", "offline", "transforms" ] }, "jwt-decode": { "name": "jwt-decode", "version": "1.0.0", "description": "Decode JWT tokens to view header and payload (no verification)", "category": "transforms", "credentials": [], "inputs": [ { "name": "token", "type": "string", "required": true } ], "outputs": [ { "name": "header", "type": "object" }, { "name": "payload", "type": "object" }, { "name": "signature", "type": "string" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "line-numbers": { "name": "line-numbers", "version": "1.0.0", "description": "Add or remove line numbers from text", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to process" } ], "outputs": [ { "name": "numbered", "type": "string", "description": "Text with line numbers" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "lorem-ipsum": { "name": "lorem-ipsum", "version": "1.0.0", "description": "Generate Lorem Ipsum placeholder text", "category": "transforms", "credentials": [], "inputs": [ { "name": "paragraphs", "type": "integer", "default": 1, "description": "Number of paragraphs" } ], "outputs": [ { "name": "text", "type": "string", "description": "Generated text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "markdown-format": { "name": "markdown-format", "version": "1.0.0", "description": "Format text as Markdown elements (headings, lists, code blocks, links)", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to format" }, { "name": "format", "type": "string", "default": "paragraph", "description": "Format type: heading, list, code, link, bold, italic, quote" }, { "name": "level", "type": "integer", "default": 1, "description": "Heading level (1-6) or list indentation" } ], "outputs": [ { "name": "markdown", "type": "string", "description": "Formatted Markdown" }, { "name": "format", "type": "string", "description": "Format applied" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "markdown-toc": { "name": "markdown-toc", "version": "1.0.0", "description": "Extract table of contents from markdown", "category": "transforms", "credentials": [], "inputs": [ { "name": "markdown", "type": "string", "required": true, "description": "Markdown content" } ], "outputs": [ { "name": "toc", "type": "array", "description": "Table of contents entries" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-abs": { "name": "math-abs", "version": "1.0.0", "description": "Calculate absolute value", "category": "transforms", "credentials": [], "inputs": [ { "name": "number", "type": "number", "required": true, "description": "Number to get absolute value of" } ], "outputs": [ { "name": "abs", "type": "number", "description": "Absolute value" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-ceil": { "name": "math-ceil", "version": "1.0.0", "description": "Round number up to integer", "category": "transforms", "credentials": [], "inputs": [ { "name": "number", "type": "number", "required": true, "description": "Number to ceil" } ], "outputs": [ { "name": "ceil", "type": "integer", "description": "Ceiled value" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-floor": { "name": "math-floor", "version": "1.0.0", "description": "Round number down to integer", "category": "transforms", "credentials": [], "inputs": [ { "name": "number", "type": "number", "required": true, "description": "Number to floor" } ], "outputs": [ { "name": "floor", "type": "integer", "description": "Floored value" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-max": { "name": "math-max", "version": "1.0.0", "description": "Find maximum value in array", "category": "transforms", "credentials": [], "inputs": [ { "name": "numbers", "type": "array", "required": true, "description": "Array of numbers" } ], "outputs": [ { "name": "max", "type": "number", "description": "Maximum value" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-min": { "name": "math-min", "version": "1.0.0", "description": "Find minimum value in array", "category": "transforms", "credentials": [], "inputs": [ { "name": "numbers", "type": "array", "required": true, "description": "Array of numbers" } ], "outputs": [ { "name": "min", "type": "number", "description": "Minimum value" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-mod": { "name": "math-mod", "version": "1.0.0", "description": "Calculate modulo (remainder)", "category": "transforms", "credentials": [], "inputs": [ { "name": "dividend", "type": "number", "required": true, "description": "Number to divide" }, { "name": "divisor", "type": "number", "required": true, "description": "Number to divide by" } ], "outputs": [ { "name": "remainder", "type": "number", "description": "Remainder after division" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-pow": { "name": "math-pow", "version": "1.0.0", "description": "Calculate power (exponentiation)", "category": "transforms", "credentials": [], "inputs": [ { "name": "base", "type": "number", "required": true, "description": "Base number" }, { "name": "exponent", "type": "number", "required": true, "description": "Exponent" } ], "outputs": [ { "name": "result", "type": "number", "description": "Result of base^exponent" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "math-sqrt": { "name": "math-sqrt", "version": "1.0.0", "description": "Calculate square root", "category": "transforms", "credentials": [], "inputs": [ { "name": "number", "type": "number", "required": true, "description": "Number to get square root of" } ], "outputs": [ { "name": "sqrt", "type": "number", "description": "Square root" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "number-format": { "name": "number-format", "version": "1.0.0", "description": "Format numbers with thousands separators, decimals, currency", "category": "transforms", "credentials": [], "inputs": [ { "name": "number", "type": "number", "required": true }, { "name": "format", "type": "string", "default": "standard", "description": "Format type: standard, currency, percent, scientific" } ], "outputs": [ { "name": "formatted", "type": "string" }, { "name": "original", "type": "number" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "number-round": { "name": "number-round", "version": "1.0.0", "description": "Round numbers with precision control", "category": "transforms", "credentials": [], "inputs": [ { "name": "number", "type": "number", "required": true, "description": "Number to round" }, { "name": "precision", "type": "integer", "default": 0, "description": "Decimal places" } ], "outputs": [ { "name": "rounded", "type": "number", "description": "Rounded number" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "object-keys": { "name": "object-keys", "version": "1.0.0", "description": "Extract keys from JSON objects", "category": "transforms", "credentials": [], "inputs": [ { "name": "object", "type": "object", "required": true, "description": "JSON object" } ], "outputs": [ { "name": "keys", "type": "array", "description": "Array of keys" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "object-merge": { "name": "object-merge", "version": "1.0.0", "description": "Deep merge two JSON objects", "category": "transforms", "credentials": [], "inputs": [ { "name": "objects", "type": "array", "required": true, "description": "Array of objects to merge" } ], "outputs": [ { "name": "merged", "type": "object", "description": "Merged object" }, { "name": "count", "type": "integer", "description": "Number of objects merged" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "object-pick": { "name": "object-pick", "version": "1.0.0", "description": "Pick specific keys from an object", "category": "transforms", "credentials": [], "inputs": [ { "name": "object", "type": "object", "required": true, "description": "Source object" }, { "name": "keys", "type": "array", "required": true, "description": "Keys to pick" } ], "outputs": [ { "name": "picked", "type": "object", "description": "Object with only picked keys" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "object-values": { "name": "object-values", "version": "1.0.0", "description": "Extract all values from an object", "category": "transforms", "credentials": [], "inputs": [ { "name": "object", "type": "object", "required": true, "description": "Source object" } ], "outputs": [ { "name": "values", "type": "array", "description": "Array of values" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "path-parse": { "name": "path-parse", "version": "1.0.0", "description": "Parse file paths into components", "category": "transforms", "credentials": [], "inputs": [ { "name": "path", "type": "string", "required": true, "description": "File path to parse" } ], "outputs": [ { "name": "dirname", "type": "string", "description": "Directory name" }, { "name": "basename", "type": "string", "description": "File name" }, { "name": "extension", "type": "string", "description": "File extension" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "percentage-calc": { "name": "percentage-calc", "version": "1.0.0", "description": "Calculate percentages and ratios", "category": "transforms", "credentials": [], "inputs": [ { "name": "value", "type": "number", "required": true, "description": "Value to calculate" }, { "name": "total", "type": "number", "required": true, "description": "Total value" } ], "outputs": [ { "name": "percentage", "type": "number", "description": "Percentage result" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "query-string": { "name": "query-string", "version": "1.0.0", "description": "Parse and build URL query strings", "category": "transforms", "credentials": [], "inputs": [ { "name": "query", "type": "string", "required": true, "description": "Query string to parse" } ], "outputs": [ { "name": "params", "type": "object", "description": "Parsed parameters" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "regex-extract": { "name": "regex-extract", "version": "1.0.0", "description": "Extract text matching regex patterns from input", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to search" }, { "name": "pattern", "type": "string", "required": true, "description": "Regex pattern to match" } ], "outputs": [ { "name": "matches", "type": "array", "description": "Array of all matches" }, { "name": "count", "type": "integer", "description": "Number of matches found" }, { "name": "has_match", "type": "boolean", "description": "Whether any matches were found" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "semver-parse": { "name": "semver-parse", "version": "1.0.0", "description": "Parse semantic version strings", "category": "transforms", "credentials": [], "inputs": [ { "name": "version", "type": "string", "required": true, "description": "Semantic version string" } ], "outputs": [ { "name": "major", "type": "integer", "description": "Major version" }, { "name": "minor", "type": "integer", "description": "Minor version" }, { "name": "patch", "type": "integer", "description": "Patch version" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "slug-generate": { "name": "slug-generate", "version": "1.0.0", "description": "Generate URL-safe slugs from text (lowercase, hyphens, no special chars)", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to convert to slug" }, { "name": "separator", "type": "string", "default": "-", "description": "Separator character (default: hyphen)" } ], "outputs": [ { "name": "slug", "type": "string", "description": "URL-safe slug" }, { "name": "original", "type": "string", "description": "Original text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "string-case": { "name": "string-case", "version": "1.0.0", "description": "Convert string between case formats (camel, snake, kebab, pascal)", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to convert" }, { "name": "format", "type": "string", "default": "snake", "description": "Target format: snake, camel, kebab, pascal, upper, lower" } ], "outputs": [ { "name": "result", "type": "string", "description": "Converted string" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-contains": { "name": "string-contains", "version": "1.0.0", "description": "Check if string contains substring", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to search in" }, { "name": "search", "type": "string", "required": true, "description": "Substring to find" } ], "outputs": [ { "name": "contains", "type": "boolean", "description": "Whether substring was found" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-ends-with": { "name": "string-ends-with", "version": "1.0.0", "description": "Check if string ends with suffix", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to check" }, { "name": "suffix", "type": "string", "required": true, "description": "Suffix to match" } ], "outputs": [ { "name": "ends_with", "type": "boolean", "description": "Whether text ends with suffix" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-pad": { "name": "string-pad", "version": "1.0.0", "description": "Pad strings to specified length", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to pad" }, { "name": "length", "type": "integer", "default": 10, "description": "Target length" }, { "name": "char", "type": "string", "default": " ", "description": "Padding character" } ], "outputs": [ { "name": "left", "type": "string", "description": "Left-padded string" }, { "name": "right", "type": "string", "description": "Right-padded string" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-repeat": { "name": "string-repeat", "version": "1.0.0", "description": "Repeat a string multiple times", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to repeat" }, { "name": "count", "type": "integer", "default": 2, "description": "Number of repetitions" } ], "outputs": [ { "name": "repeated", "type": "string", "description": "Repeated string" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-replace": { "name": "string-replace", "version": "1.0.0", "description": "Replace substrings in text", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Source text" }, { "name": "search", "type": "string", "required": true, "description": "String to find" }, { "name": "replace", "type": "string", "required": true, "description": "Replacement string" } ], "outputs": [ { "name": "result", "type": "string", "description": "Text with replacements" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-reverse": { "name": "string-reverse", "version": "1.0.0", "description": "Reverse a string character by character", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to reverse" } ], "outputs": [ { "name": "reversed", "type": "string", "description": "Reversed text" }, { "name": "original", "type": "string", "description": "Original text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-split": { "name": "string-split", "version": "1.0.0", "description": "Split strings by delimiter", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to split" }, { "name": "delimiter", "type": "string", "default": ",", "description": "Delimiter character" } ], "outputs": [ { "name": "parts", "type": "array", "description": "Array of parts" }, { "name": "by_comma", "type": "array", "description": "Parts split by comma" }, { "name": "by_space", "type": "array", "description": "Parts split by space" }, { "name": "by_newline", "type": "array", "description": "Parts split by newline" }, { "name": "by_pipe", "type": "array", "description": "Parts split by pipe" }, { "name": "comma_count", "type": "number", "description": "Number of comma-separated parts" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-starts-with": { "name": "string-starts-with", "version": "1.0.0", "description": "Check if string starts with prefix", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to check" }, { "name": "prefix", "type": "string", "required": true, "description": "Prefix to match" } ], "outputs": [ { "name": "starts_with", "type": "boolean", "description": "Whether text starts with prefix" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "string-trim": { "name": "string-trim", "version": "1.0.0", "description": "Trim whitespace from strings", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to trim" } ], "outputs": [ { "name": "trimmed", "type": "string", "description": "Trimmed text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "string", "transforms" ] }, "text-analyze": { "name": "text-analyze", "version": "1.0.0", "description": "Analyze text for sentiment, entities, topics, and key phrases", "category": "transforms", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key for remote inference" } ], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to analyze" }, { "name": "analyses", "type": "array", "required": false, "description": "Types of analysis (sentiment, entities, topics, keywords)" } ], "outputs": [ { "name": "analysis", "type": "object", "description": "Analysis results" }, { "name": "metadata", "type": "object", "description": "Audit metadata" } ], "backends": [ "openai", "ollama" ], "tags": [ "local", "openai", "remote", "text", "transforms" ] }, "text-capitalize": { "name": "text-capitalize", "version": "1.0.0", "description": "Capitalize text in various styles", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to capitalize" } ], "outputs": [ { "name": "title", "type": "string", "description": "Title case" }, { "name": "sentence", "type": "string", "description": "Sentence case" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-diff": { "name": "text-diff", "version": "1.0.0", "description": "Compare two texts and identify differences", "category": "transforms", "credentials": [], "inputs": [ { "name": "original", "type": "string", "required": true, "description": "Original text" }, { "name": "modified", "type": "string", "required": true, "description": "Modified text to compare" } ], "outputs": [ { "name": "identical", "type": "boolean", "description": "Whether the texts are identical" }, { "name": "changes", "type": "object", "description": "Summary of changes (additions, deletions)" }, { "name": "similarity", "type": "number", "description": "Similarity score (0-1)" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-escape": { "name": "text-escape", "version": "1.0.0", "description": "Escape special characters in text", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to escape" } ], "outputs": [ { "name": "escaped", "type": "string", "description": "Escaped text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-format": { "name": "text-format", "version": "1.0.0", "description": "Transform text case: uppercase, lowercase, title case, sentence case", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to format" }, { "name": "format", "type": "string", "default": "lower", "description": "Format type: upper, lower, title, sentence" } ], "outputs": [ { "name": "result", "type": "string", "description": "Formatted text" }, { "name": "format", "type": "string", "description": "Format applied" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-indent": { "name": "text-indent", "version": "1.0.0", "description": "Indent text blocks", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to indent" }, { "name": "spaces", "type": "integer", "default": 2, "description": "Number of spaces" } ], "outputs": [ { "name": "indented", "type": "string", "description": "Indented text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-lines": { "name": "text-lines", "version": "1.0.0", "description": "Split text into lines and analyze", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Multi-line text" } ], "outputs": [ { "name": "lines", "type": "array", "description": "Array of lines" }, { "name": "count", "type": "integer", "description": "Line count" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-reverse": { "name": "text-reverse", "version": "1.0.0", "description": "Reverse text strings", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to reverse" } ], "outputs": [ { "name": "reversed", "type": "string", "description": "Reversed text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-stats": { "name": "text-stats", "version": "1.0.0", "description": "Calculate detailed text statistics", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to analyze" } ], "outputs": [ { "name": "chars", "type": "integer", "description": "Character count" }, { "name": "words", "type": "integer", "description": "Word count" }, { "name": "lines", "type": "integer", "description": "Line count" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-truncate": { "name": "text-truncate", "version": "1.0.0", "description": "Truncate text to specified length with optional suffix", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to truncate" }, { "name": "length", "type": "integer", "default": 100, "description": "Maximum length" }, { "name": "suffix", "type": "string", "default": "...", "description": "Suffix to append if truncated" } ], "outputs": [ { "name": "result", "type": "string", "description": "Truncated text" }, { "name": "truncated", "type": "boolean", "description": "Whether text was truncated" }, { "name": "original_length", "type": "integer", "description": "Original text length" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "text-wrap": { "name": "text-wrap", "version": "1.0.0", "description": "Wrap text at specified width", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to wrap" }, { "name": "width", "type": "integer", "default": 80, "description": "Maximum line width" } ], "outputs": [ { "name": "wrapped", "type": "string", "description": "Wrapped text" } ], "backends": [ "local" ], "tags": [ "local", "offline", "text", "transforms" ] }, "time-parse": { "name": "time-parse", "version": "1.0.0", "description": "Parse time string to components", "category": "transforms", "credentials": [], "inputs": [ { "name": "time", "type": "string", "required": true, "description": "Time string to parse" } ], "outputs": [ { "name": "hour", "type": "integer", "description": "Hour component" }, { "name": "minute", "type": "integer", "description": "Minute component" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "timestamp-parse": { "name": "timestamp-parse", "version": "1.0.0", "description": "Parse and format timestamps between different formats (ISO, Unix, RFC)", "category": "transforms", "credentials": [], "inputs": [ { "name": "timestamp", "type": "string", "required": false, "description": "Timestamp to parse (defaults to now)" }, { "name": "format", "type": "string", "default": "iso", "description": "Output format: iso, unix, rfc2822" } ], "outputs": [ { "name": "iso", "type": "string", "description": "ISO 8601 format" }, { "name": "unix", "type": "integer", "description": "Unix timestamp (seconds)" }, { "name": "unix_ms", "type": "integer", "description": "Unix timestamp (milliseconds)" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "timezone-convert": { "name": "timezone-convert", "version": "1.0.0", "description": "Convert timestamp between timezones", "category": "transforms", "credentials": [], "inputs": [ { "name": "timestamp", "type": "string", "required": true, "description": "Timestamp to convert" }, { "name": "timezone", "type": "string", "required": true, "description": "Target timezone" } ], "outputs": [ { "name": "converted", "type": "string", "description": "Converted timestamp" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "type-check": { "name": "type-check", "version": "1.0.0", "description": "Check the type of a JSON value", "category": "transforms", "credentials": [], "inputs": [ { "name": "value", "type": "any", "required": true, "description": "Value to check" } ], "outputs": [ { "name": "type", "type": "string", "description": "Type name" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "url-encode": { "name": "url-encode", "version": "1.0.0", "description": "URL encode and decode text for safe URL parameters", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to encode or URL-encoded text to decode" }, { "name": "mode", "type": "string", "default": "encode", "description": "Operation mode: 'encode' or 'decode'" } ], "outputs": [ { "name": "result", "type": "string", "description": "Encoded or decoded result" }, { "name": "mode", "type": "string", "description": "Operation performed" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "url-parse": { "name": "url-parse", "version": "1.0.0", "description": "Parse URL components (protocol, host, path, query)", "category": "transforms", "credentials": [], "inputs": [ { "name": "url", "type": "string", "required": true, "description": "URL to parse" } ], "outputs": [ { "name": "protocol", "type": "string", "description": "URL protocol" }, { "name": "host", "type": "string", "description": "Host/domain" }, { "name": "path", "type": "string", "description": "URL path" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "whitespace-normalize": { "name": "whitespace-normalize", "version": "1.0.0", "description": "Normalize whitespace in text", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to normalize" } ], "outputs": [ { "name": "normalized", "type": "string", "description": "Text with normalized whitespace" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "word-count": { "name": "word-count", "version": "1.0.0", "description": "Count words, characters, sentences, and paragraphs in text", "category": "transforms", "credentials": [], "inputs": [ { "name": "text", "type": "string", "required": true, "description": "Text to analyze" } ], "outputs": [ { "name": "words", "type": "integer", "description": "Word count" }, { "name": "characters", "type": "integer", "description": "Character count (with spaces)" }, { "name": "characters_no_spaces", "type": "integer", "description": "Character count (without spaces)" }, { "name": "sentences", "type": "integer", "description": "Sentence count" }, { "name": "paragraphs", "type": "integer", "description": "Paragraph count" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms" ] }, "xml-to-json": { "name": "xml-to-json", "version": "1.0.0", "description": "Convert XML to JSON format", "category": "transforms", "credentials": [], "inputs": [ { "name": "xml", "type": "string", "required": true, "description": "XML string to convert" } ], "outputs": [ { "name": "json", "type": "object", "description": "JSON representation" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms", "xml" ] }, "yaml-to-json": { "name": "yaml-to-json", "version": "1.0.0", "description": "Convert YAML to JSON format", "category": "transforms", "credentials": [], "inputs": [ { "name": "yaml", "type": "string", "required": true, "description": "YAML string to convert" } ], "outputs": [ { "name": "json", "type": "object", "description": "JSON parsed output" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms", "yaml" ] }, "yaml-validate": { "name": "yaml-validate", "version": "1.0.0", "description": "Validate YAML syntax and provide detailed error information", "category": "transforms", "credentials": [], "inputs": [ { "name": "yaml", "type": "string", "required": true, "description": "YAML content to validate" } ], "outputs": [ { "name": "valid", "type": "boolean", "description": "Whether the YAML is valid" }, { "name": "error", "type": "string", "description": "Error message if invalid" }, { "name": "parsed", "type": "object", "description": "Parsed YAML as JSON (if valid)" } ], "backends": [ "local" ], "tags": [ "local", "offline", "transforms", "yaml" ] }, "audio-duration": { "name": "audio-duration", "version": "1.0.0", "description": "Parse and format audio duration", "category": "utilities", "credentials": [], "inputs": [ { "name": "seconds", "type": "number", "required": true, "description": "Duration in seconds" } ], "outputs": [ { "name": "formatted", "type": "string", "description": "Formatted duration (HH:MM:SS)" }, { "name": "minutes", "type": "number", "description": "Total minutes" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "config-normalize": { "name": "config-normalize", "version": "1.0.0", "description": "Convert YAML/TOML/INI configs to canonical JSON", "category": "utilities", "credentials": [], "inputs": [ { "name": "config", "type": "string", "required": true, "description": "Config content (YAML, TOML, or INI)" }, { "name": "format", "type": "string", "default": "auto", "enum": [ "auto", "yaml", "toml", "ini" ], "description": "Input format (auto-detect by default)" } ], "outputs": [ { "name": "json", "type": "object", "description": "Normalized JSON object" }, { "name": "metadata", "type": "object", "description": "Processing metadata including detected format" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "determinism-test": { "name": "determinism-test", "version": "1.0.0", "description": "Run input N times and measure output determinism/stability", "category": "utilities", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "For testing LLM-based pipelines" } ], "inputs": [ { "name": "input", "type": "any", "required": true, "description": "Input to test" }, { "name": "runs", "type": "integer", "default": 3, "description": "Number of runs" }, { "name": "pipeline", "type": "string", "required": false, "description": "Pipeline to test" } ], "outputs": [ { "name": "stable", "type": "boolean", "description": "Whether all outputs matched" }, { "name": "stability_score", "type": "number", "description": "Percentage of matching outputs (0-100)" }, { "name": "outputs", "type": "array", "description": "All outputs collected" }, { "name": "diffs", "type": "array", "description": "Differences between outputs" }, { "name": "metadata", "type": "object", "description": "Test metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "openai", "utilities" ] }, "email-validate": { "name": "email-validate", "version": "1.0.0", "description": "Validate email address format and extract parts (user, domain)", "category": "utilities", "credentials": [], "inputs": [ { "name": "email", "type": "string", "required": true, "description": "Email address to validate" } ], "outputs": [ { "name": "valid", "type": "boolean", "description": "Whether email format is valid" }, { "name": "user", "type": "string", "description": "User part (before @)" }, { "name": "domain", "type": "string", "description": "Domain part (after @)" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "idempotent-cache": { "name": "idempotent-cache", "version": "1.0.0", "description": "Cache results by input hash for idempotent operations", "category": "utilities", "credentials": [], "inputs": [ { "name": "input", "type": "any", "required": true, "description": "Input to hash and cache" }, { "name": "ttl_seconds", "type": "integer", "default": 3600, "description": "Cache TTL in seconds" } ], "outputs": [ { "name": "hash", "type": "string", "description": "Input hash" }, { "name": "cached", "type": "boolean", "description": "Whether result was from cache" }, { "name": "result", "type": "any", "description": "Cached or computed result" }, { "name": "metadata", "type": "object", "description": "Cache metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "image-dimensions": { "name": "image-dimensions", "version": "1.0.0", "description": "Parse image dimensions and calculate properties", "category": "utilities", "credentials": [], "inputs": [ { "name": "width", "type": "integer", "required": true, "description": "Image width in pixels" }, { "name": "height", "type": "integer", "required": true, "description": "Image height in pixels" } ], "outputs": [ { "name": "aspect_ratio", "type": "string", "description": "Aspect ratio (e.g., 16:9)" }, { "name": "megapixels", "type": "number", "description": "Total megapixels" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "image-metadata": { "name": "image-metadata", "version": "1.0.0", "description": "Extract metadata from base64-encoded image", "category": "utilities", "credentials": [], "inputs": [ { "name": "image_base64", "type": "string", "required": true, "description": "Base64-encoded image data" } ], "outputs": [ { "name": "format", "type": "string", "description": "Image format detected" }, { "name": "size_bytes", "type": "integer", "description": "Size in bytes" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "image-resize-calc": { "name": "image-resize-calc", "version": "1.0.0", "description": "Calculate new dimensions for image resizing", "category": "utilities", "credentials": [], "inputs": [ { "name": "width", "type": "integer", "required": true, "description": "Current width" }, { "name": "height", "type": "integer", "required": true, "description": "Current height" }, { "name": "max_width", "type": "integer", "description": "Maximum target width" }, { "name": "max_height", "type": "integer", "description": "Maximum target height" } ], "outputs": [ { "name": "new_width", "type": "integer", "description": "Calculated new width" }, { "name": "new_height", "type": "integer", "description": "Calculated new height" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "media-info": { "name": "media-info", "version": "1.0.0", "description": "Get comprehensive media file information", "category": "utilities", "credentials": [], "inputs": [ { "name": "filename", "type": "string", "required": true, "description": "Media filename" }, { "name": "size_bytes", "type": "integer", "description": "File size in bytes" } ], "outputs": [ { "name": "type", "type": "string", "description": "Media type category" }, { "name": "format", "type": "string", "description": "File format" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "media-type-detect": { "name": "media-type-detect", "version": "1.0.0", "description": "Detect media type from file extension or content", "category": "utilities", "credentials": [], "inputs": [ { "name": "filename", "type": "string", "description": "Filename to detect type from" }, { "name": "content_type", "type": "string", "description": "Content-Type header if available" } ], "outputs": [ { "name": "media_type", "type": "string", "description": "Detected media type" }, { "name": "category", "type": "string", "description": "Category (image, audio, video, document)" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "mime-type": { "name": "mime-type", "version": "1.0.0", "description": "Look up MIME types by file extension", "category": "utilities", "credentials": [], "inputs": [ { "name": "extension", "type": "string", "required": true, "description": "File extension" } ], "outputs": [ { "name": "mime", "type": "string", "description": "MIME type" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "openapi-validate": { "name": "openapi-validate", "version": "1.0.0", "description": "Validate HTTP requests/responses against OpenAPI specification", "category": "utilities", "credentials": [], "inputs": [ { "name": "spec", "type": "object", "required": true, "description": "OpenAPI specification" }, { "name": "request", "type": "object", "required": false, "description": "HTTP request to validate" }, { "name": "response", "type": "object", "required": false, "description": "HTTP response to validate" } ], "outputs": [ { "name": "valid", "type": "boolean", "description": "Whether request/response matches spec" }, { "name": "errors", "type": "array", "description": "Validation errors" }, { "name": "metadata", "type": "object", "description": "Validation metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "random-number": { "name": "random-number", "version": "1.0.0", "description": "Generate random numbers within a range", "category": "utilities", "credentials": [], "inputs": [ { "name": "min", "type": "integer", "default": 0, "description": "Minimum value" }, { "name": "max", "type": "integer", "default": 100, "description": "Maximum value" } ], "outputs": [ { "name": "number", "type": "integer", "description": "Random number" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "retry-wrapper": { "name": "retry-wrapper", "version": "1.0.0", "description": "Wrap commands with automatic retry and exponential backoff", "category": "utilities", "credentials": [], "inputs": [ { "name": "command", "type": "string", "required": true, "description": "Command to execute and retry" }, { "name": "max_retries", "type": "integer", "default": 3, "description": "Maximum retry attempts" }, { "name": "backoff_ms", "type": "integer", "default": 1000, "description": "Initial backoff in milliseconds" } ], "outputs": [ { "name": "output", "type": "string", "description": "Command output" }, { "name": "attempts", "type": "integer", "description": "Number of attempts made" }, { "name": "success", "type": "boolean", "description": "Whether command succeeded" }, { "name": "metadata", "type": "object", "description": "Execution metadata" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "uuid-generate": { "name": "uuid-generate", "version": "1.0.0", "description": "Generate UUIDs (v4) for unique identifiers", "category": "utilities", "credentials": [], "inputs": [ { "name": "count", "type": "integer", "default": 1, "description": "Number of UUIDs to generate" } ], "outputs": [ { "name": "uuid", "type": "string", "description": "Generated UUID (when count=1)" }, { "name": "uuids", "type": "array", "description": "Array of generated UUIDs (when count>1)" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "video-thumbnail": { "name": "video-thumbnail", "version": "1.0.0", "description": "Generate thumbnail URL/timestamp for video", "category": "utilities", "credentials": [], "inputs": [ { "name": "video_url", "type": "string", "required": true, "description": "Video URL" }, { "name": "timestamp", "type": "number", "description": "Timestamp in seconds for thumbnail" } ], "outputs": [ { "name": "thumbnail_time", "type": "string", "description": "Formatted timestamp for thumbnail" }, { "name": "video_url", "type": "string", "description": "Original video URL" } ], "backends": [ "local" ], "tags": [ "local", "offline", "utilities" ] }, "auto-coder": { "name": "auto-coder", "version": "1.0.0", "description": "Autonomous coding with GitHub integration and CI/CD automation", "category": "workflows", "credentials": [ { "name": "GITHUB_TOKEN", "required": true, "description": "" }, { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "task", "type": "string", "required": true, "description": "Coding task to accomplish" }, { "name": "repo", "type": "string", "required": true }, { "name": "branch", "type": "string", "default": "auto-coder" }, { "name": "create_pr", "type": "boolean", "default": true } ], "outputs": [ { "name": "changes", "type": "array" }, { "name": "pr_url", "type": "string" }, { "name": "tests_passed", "type": "boolean" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "backup-verify": { "name": "backup-verify", "version": "1.0.0", "description": "Verify backup integrity and sync status across storage providers", "category": "workflows", "credentials": [ { "name": "AWS_ACCESS_KEY_ID", "required": false, "description": "" }, { "name": "AWS_SECRET_ACCESS_KEY", "required": false, "description": "" }, { "name": "GOOGLE_CLOUD_KEY", "required": false, "description": "" } ], "inputs": [ { "name": "local_paths", "type": "array", "default": [] }, { "name": "cloud_provider", "type": "string", "default": "s3", "enum": [ "s3", "gcs", "azure", "backblaze" ] }, { "name": "bucket", "type": "string", "required": false } ], "outputs": [ { "name": "status", "type": "object" }, { "name": "differences", "type": "array" }, { "name": "metadata", "type": "object" } ], "backends": [ "local" ], "tags": [ "google", "local", "offline", "workflows" ] }, "catalog-reconcile": { "name": "catalog-reconcile", "version": "1.0.0", "description": "AI-powered product catalog reconciliation across multiple sources", "category": "workflows", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "catalogs", "type": "array", "required": true, "description": "List of catalog sources to reconcile" }, { "name": "match_fields", "type": "array", "default": [ "sku", "upc", "name" ] } ], "outputs": [ { "name": "matches", "type": "array" }, { "name": "conflicts", "type": "array" }, { "name": "unmatched", "type": "array" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "devops-monitor": { "name": "devops-monitor", "version": "1.0.0", "description": "AI-powered DevOps monitoring with automated log analysis and alerting", "category": "workflows", "credentials": [ { "name": "GITHUB_TOKEN", "required": false, "description": "GitHub personal access token" }, { "name": "PROMETHEUS_URL", "required": false, "description": "Prometheus endpoint for metrics" }, { "name": "GRAFANA_API_KEY", "required": false, "description": "Grafana API key" }, { "name": "SLACK_WEBHOOK", "required": false, "description": "Slack webhook for alerts" }, { "name": "PAGERDUTY_KEY", "required": false, "description": "PagerDuty integration key" }, { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI for AI analysis" } ], "inputs": [ { "name": "sources", "type": "array", "default": [ "github", "logs" ], "description": "Data sources: github, logs, prometheus, uptime" }, { "name": "repos", "type": "array", "default": [], "description": "GitHub repos to monitor (owner/repo format)" }, { "name": "log_paths", "type": "array", "default": [], "description": "Log file paths to analyze" }, { "name": "alert_threshold", "type": "string", "default": "high", "enum": [ "low", "medium", "high", "critical" ], "description": "Minimum severity for alerts" }, { "name": "lookback_hours", "type": "integer", "default": 1, "description": "Hours of data to analyze" } ], "outputs": [ { "name": "status", "type": "object", "description": "Overall status: {healthy, warnings, errors}" }, { "name": "issues", "type": "array", "description": "Detected issues: {severity, source, description, suggestion}" }, { "name": "workflows", "type": "array", "description": "GitHub workflow statuses" }, { "name": "metrics", "type": "object", "description": "Key metrics summary" }, { "name": "alerts_sent", "type": "array", "description": "Alerts that were dispatched" }, { "name": "metadata", "type": "object", "description": "Monitoring metadata" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "slack", "workflows" ] }, "email-triage": { "name": "email-triage", "version": "1.0.0", "description": "AI-powered email triage with calendar sync and response drafting", "category": "workflows", "credentials": [ { "name": "GMAIL_TOKEN", "required": false, "description": "Gmail OAuth token (or use IMAP credentials)" }, { "name": "OUTLOOK_TOKEN", "required": false, "description": "Microsoft Graph API token" }, { "name": "IMAP_HOST", "required": false, "description": "IMAP server hostname" }, { "name": "IMAP_USER", "required": false, "description": "IMAP username" }, { "name": "IMAP_PASS", "required": false, "description": "IMAP password" }, { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI API key for AI processing" }, { "name": "CALENDAR_API_KEY", "required": false, "description": "Google Calendar or Outlook Calendar API key" } ], "inputs": [ { "name": "provider", "type": "string", "required": true, "enum": [ "gmail", "outlook", "imap" ], "description": "Email provider to connect" }, { "name": "folder", "type": "string", "default": "INBOX", "description": "Email folder to process" }, { "name": "limit", "type": "integer", "default": 50, "description": "Maximum emails to process per run" }, { "name": "since_hours", "type": "integer", "default": 24, "description": "Process emails from last N hours" }, { "name": "categories", "type": "array", "default": [ "urgent", "action-required", "meeting", "fyi", "newsletter", "spam" ], "description": "Categories to classify into" }, { "name": "auto_archive", "type": "boolean", "default": false, "description": "Automatically archive processed emails" }, { "name": "create_calendar_events", "type": "boolean", "default": true, "description": "Automatically create calendar events from meeting requests" } ], "outputs": [ { "name": "summary", "type": "object", "description": "Triage summary: {processed, by_category, urgent_count, meetings_found}" }, { "name": "emails", "type": "array", "description": "Processed emails with: {id, subject, from, category, priority, action, calendar_event?}" }, { "name": "calendar_events", "type": "array", "description": "Calendar events extracted/created" }, { "name": "draft_responses", "type": "array", "description": "Suggested responses for action-required emails" }, { "name": "metadata", "type": "object", "description": "Processing metadata and audit trail" } ], "backends": [ "openai", "ollama" ], "tags": [ "local", "openai", "remote", "workflows" ] }, "health-integrate": { "name": "health-integrate", "version": "1.0.0", "description": "Integrate wearable health data with calendar and fitness optimization", "category": "workflows", "credentials": [ { "name": "OURA_TOKEN", "required": false, "description": "" }, { "name": "FITBIT_TOKEN", "required": false, "description": "" }, { "name": "GOOGLE_CALENDAR_TOKEN", "required": false, "description": "" }, { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "sources", "type": "array", "default": [ "oura", "calendar" ] }, { "name": "optimize_for", "type": "string", "default": "energy", "enum": [ "energy", "sleep", "recovery", "performance" ] } ], "outputs": [ { "name": "health_summary", "type": "object" }, { "name": "recommendations", "type": "array" }, { "name": "schedule_adjustments", "type": "array" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "google", "openai", "remote", "workflows" ] }, "jira-automate": { "name": "jira-automate", "version": "1.0.0", "description": "Automate Jira/Confluence workflows with AI-powered issue management", "category": "workflows", "credentials": [ { "name": "JIRA_URL", "required": true, "description": "Jira instance URL (e.g., https://company.atlassian.net)" }, { "name": "JIRA_EMAIL", "required": true, "description": "Jira account email" }, { "name": "JIRA_API_TOKEN", "required": true, "description": "Jira API token" }, { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI for AI features" } ], "inputs": [ { "name": "action", "type": "string", "required": true, "enum": [ "create", "update", "search", "summarize", "link_pr", "generate_docs" ], "description": "Action to perform" }, { "name": "project", "type": "string", "required": false, "description": "Jira project key" }, { "name": "issue_key", "type": "string", "required": false, "description": "Issue key (e.g., PROJ-123)" }, { "name": "summary", "type": "string", "required": false, "description": "Issue summary for create/update" }, { "name": "description", "type": "string", "required": false, "description": "Issue description" }, { "name": "issue_type", "type": "string", "default": "Task", "description": "Issue type (Task, Bug, Story, Epic)" } ], "outputs": [ { "name": "result", "type": "object", "description": "Action result" }, { "name": "issues", "type": "array", "description": "Affected issues" }, { "name": "metadata", "type": "object", "description": "Execution metadata" } ], "backends": [ "openai" ], "tags": [ "jira", "openai", "remote", "workflows" ] }, "llm-router": { "name": "llm-router", "version": "1.0.0", "description": "Intelligent LLM routing with automatic model selection and fallbacks", "category": "workflows", "credentials": [ { "name": "OPENAI_API_KEY", "required": false, "description": "OpenAI API key" }, { "name": "ANTHROPIC_API_KEY", "required": false, "description": "Anthropic API key" }, { "name": "OPENROUTER_API_KEY", "required": false, "description": "OpenRouter API key (access to 100+ models)" } ], "inputs": [ { "name": "prompt", "type": "string", "required": true, "description": "The prompt to process" }, { "name": "task_type", "type": "string", "default": "auto", "enum": [ "auto", "simple", "complex", "code", "creative", "analysis" ], "description": "Task type for routing" }, { "name": "priority", "type": "string", "default": "balanced", "enum": [ "cost", "quality", "speed", "balanced" ], "description": "Optimization priority" }, { "name": "max_cost_cents", "type": "integer", "default": 10, "description": "Maximum cost per request in cents" }, { "name": "require_local", "type": "boolean", "default": false, "description": "Require local/private model (no cloud)" }, { "name": "fallback_models", "type": "array", "default": [], "description": "Fallback model chain" } ], "outputs": [ { "name": "response", "type": "string", "description": "Model response" }, { "name": "model_used", "type": "string", "description": "Which model was selected" }, { "name": "routing_reason", "type": "string", "description": "Why this model was chosen" }, { "name": "cost", "type": "object", "description": "{tokens, cost_cents}" }, { "name": "metadata", "type": "object", "description": "Routing and execution metadata" } ], "backends": [ "multi" ], "tags": [ "openai", "workflows" ] }, "marketing-auto": { "name": "marketing-auto", "version": "1.0.0", "description": "Self-running marketing automation with AI content and analytics", "category": "workflows", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "" }, { "name": "TWITTER_API_KEY", "required": false, "description": "" }, { "name": "LINKEDIN_TOKEN", "required": false, "description": "" }, { "name": "MAILCHIMP_API_KEY", "required": false, "description": "" } ], "inputs": [ { "name": "action", "type": "string", "default": "campaign", "enum": [ "campaign", "content", "analytics", "schedule" ] }, { "name": "platform", "type": "string", "default": "all", "enum": [ "all", "twitter", "linkedin", "email", "blog" ] }, { "name": "topic", "type": "string", "required": false } ], "outputs": [ { "name": "content", "type": "array" }, { "name": "schedule", "type": "array" }, { "name": "analytics", "type": "object" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "meal-planner": { "name": "meal-planner", "version": "1.0.0", "description": "AI-powered meal planning with recipes and grocery lists", "category": "workflows", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "" }, { "name": "NOTION_TOKEN", "required": false, "description": "" } ], "inputs": [ { "name": "preferences", "type": "object", "description": "Dietary preferences: {vegetarian, allergies, cuisine}" }, { "name": "days", "type": "integer", "default": 7 }, { "name": "people", "type": "integer", "default": 2 } ], "outputs": [ { "name": "meal_plan", "type": "array" }, { "name": "grocery_list", "type": "array" }, { "name": "recipes", "type": "array" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "morning-briefing": { "name": "morning-briefing", "version": "1.0.0", "description": "Personalized daily briefing with calendar, weather, news, and tasks", "category": "workflows", "credentials": [ { "name": "GOOGLE_CALENDAR_TOKEN", "required": false, "description": "Google Calendar OAuth token" }, { "name": "OPENWEATHER_API_KEY", "required": false, "description": "OpenWeatherMap API key" }, { "name": "NEWS_API_KEY", "required": false, "description": "NewsAPI key for headlines" }, { "name": "TODOIST_TOKEN", "required": false, "description": "Todoist API token" }, { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI for summary and priorities" }, { "name": "TELEGRAM_BOT_TOKEN", "required": false, "description": "Telegram bot for delivery" }, { "name": "SLACK_WEBHOOK", "required": false, "description": "Slack webhook for delivery" } ], "inputs": [ { "name": "location", "type": "string", "default": "San Francisco, CA", "description": "Location for weather" }, { "name": "news_topics", "type": "array", "default": [ "technology", "business" ], "description": "News topics of interest" }, { "name": "calendar_hours", "type": "integer", "default": 24, "description": "Calendar lookahead hours" }, { "name": "delivery", "type": "string", "default": "json", "enum": [ "json", "telegram", "slack", "email" ], "description": "Delivery method" }, { "name": "voice", "type": "boolean", "default": false, "description": "Include TTS audio version" } ], "outputs": [ { "name": "briefing", "type": "object", "description": "Complete briefing: {calendar, weather, news, tasks, priorities}" }, { "name": "summary", "type": "string", "description": "AI-generated executive summary" }, { "name": "audio_url", "type": "string", "description": "URL to audio version (if voice enabled)" }, { "name": "metadata", "type": "object", "description": "Generation metadata" } ], "backends": [ "openai" ], "tags": [ "google", "openai", "remote", "slack", "workflows" ] }, "multi-platform-chat": { "name": "multi-platform-chat", "version": "1.0.0", "description": "Route AI agent responses across multiple messaging platforms", "category": "workflows", "credentials": [ { "name": "TELEGRAM_BOT_TOKEN", "required": false, "description": "" }, { "name": "DISCORD_BOT_TOKEN", "required": false, "description": "" }, { "name": "SLACK_BOT_TOKEN", "required": false, "description": "" }, { "name": "WHATSAPP_TOKEN", "required": false, "description": "" }, { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "message", "type": "string", "required": true }, { "name": "platform", "type": "string", "required": true, "enum": [ "telegram", "discord", "slack", "whatsapp", "all" ] }, { "name": "channel_id", "type": "string", "required": false }, { "name": "user_id", "type": "string", "required": false } ], "outputs": [ { "name": "response", "type": "string" }, { "name": "sent_to", "type": "array" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "slack", "workflows" ] }, "seo-pipeline": { "name": "seo-pipeline", "version": "1.0.0", "description": "Complete SEO workflow with analysis, reporting, and AI content optimization", "category": "workflows", "credentials": [ { "name": "GOOGLE_SEARCH_CONSOLE_TOKEN", "required": false, "description": "" }, { "name": "AHREFS_API_KEY", "required": false, "description": "" }, { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "action", "type": "string", "default": "analyze", "enum": [ "analyze", "report", "optimize", "keywords", "backlinks" ] }, { "name": "url", "type": "string", "required": false }, { "name": "keywords", "type": "array", "default": [] } ], "outputs": [ { "name": "analysis", "type": "object" }, { "name": "recommendations", "type": "array" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "google", "openai", "remote", "workflows" ] }, "site-migrate": { "name": "site-migrate", "version": "1.0.0", "description": "Migrate websites across platforms (Notion\u2192Astro, WordPress\u2192Hugo, etc.)", "category": "workflows", "credentials": [ { "name": "NOTION_TOKEN", "required": false, "description": "" }, { "name": "CLOUDFLARE_API_TOKEN", "required": false, "description": "" }, { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "source", "type": "string", "required": true, "enum": [ "notion", "wordpress", "ghost", "markdown" ] }, { "name": "destination", "type": "string", "required": true, "enum": [ "astro", "hugo", "nextjs", "static" ] }, { "name": "source_url", "type": "string", "required": false } ], "outputs": [ { "name": "pages_migrated", "type": "integer" }, { "name": "assets_migrated", "type": "integer" }, { "name": "errors", "type": "array" }, { "name": "deploy_url", "type": "string" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "stripe-reports": { "name": "stripe-reports", "version": "1.0.0", "description": "Generate AI-powered business reports from Stripe with insights and quick wins", "category": "workflows", "credentials": [ { "name": "STRIPE_API_KEY", "required": true, "description": "Stripe secret API key (sk_live_... or sk_test_...)" }, { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI API key for AI insights" }, { "name": "SLACK_WEBHOOK", "required": false, "description": "Slack webhook URL for report delivery" } ], "inputs": [ { "name": "period", "type": "string", "default": "today", "enum": [ "today", "yesterday", "week", "month", "quarter" ], "description": "Reporting period" }, { "name": "metrics", "type": "array", "default": [ "revenue", "subscriptions", "churn", "refunds" ], "description": "Metrics to include" }, { "name": "include_insights", "type": "boolean", "default": true, "description": "Generate AI insights" }, { "name": "include_quick_wins", "type": "boolean", "default": true, "description": "Identify actionable quick wins" }, { "name": "send_slack", "type": "boolean", "default": false, "description": "Send report to Slack" }, { "name": "format", "type": "string", "default": "json", "enum": [ "json", "markdown", "html" ], "description": "Output format" } ], "outputs": [ { "name": "report", "type": "object", "description": "Complete report: {period, metrics, insights, quick_wins}" }, { "name": "metrics", "type": "object", "description": "Raw metrics: {revenue, mrr, churn_rate, new_customers, ...}" }, { "name": "insights", "type": "array", "description": "AI-generated insights and observations" }, { "name": "quick_wins", "type": "array", "description": "Actionable recommendations with potential impact" }, { "name": "metadata", "type": "object", "description": "Report metadata and audit trail" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "slack", "workflows" ] }, "task-dashboard": { "name": "task-dashboard", "version": "1.0.0", "description": "Mission control dashboard for AI agent task queue management", "category": "workflows", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "action", "type": "string", "default": "status", "enum": [ "status", "add", "complete", "prioritize" ] }, { "name": "task", "type": "string", "required": false } ], "outputs": [ { "name": "queue", "type": "array" }, { "name": "completed", "type": "array" }, { "name": "status", "type": "object" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "terminal-services": { "name": "terminal-services", "version": "1.0.0", "description": "Terminal-first integrations for 40+ popular services", "category": "workflows", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "" } ], "inputs": [ { "name": "service", "type": "string", "required": true }, { "name": "action", "type": "string", "required": true }, { "name": "params", "type": "object", "default": {} } ], "outputs": [ { "name": "result", "type": "object" }, { "name": "formatted_output", "type": "string" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "todoist-automate": { "name": "todoist-automate", "version": "1.0.0", "description": "AI-powered Todoist automation with smart prioritization and scheduling", "category": "workflows", "credentials": [ { "name": "TODOIST_TOKEN", "required": true, "description": "Todoist API token" }, { "name": "OPENAI_API_KEY", "required": true, "description": "OpenAI for AI features" }, { "name": "TELEGRAM_BOT_TOKEN", "required": false, "description": "Telegram bot for notifications" } ], "inputs": [ { "name": "action", "type": "string", "default": "sync", "enum": [ "sync", "create", "prioritize", "schedule", "remind" ] }, { "name": "project", "type": "string", "required": false }, { "name": "task", "type": "string", "required": false }, { "name": "due_date", "type": "string", "required": false } ], "outputs": [ { "name": "tasks", "type": "array" }, { "name": "result", "type": "object" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] }, "voice-admin": { "name": "voice-admin", "version": "1.0.0", "description": "Voice-driven business admin for scheduling, invoicing, and task management", "category": "workflows", "credentials": [ { "name": "OPENAI_API_KEY", "required": true, "description": "" }, { "name": "TWILIO_ACCOUNT_SID", "required": false, "description": "" }, { "name": "QUICKBOOKS_TOKEN", "required": false, "description": "" } ], "inputs": [ { "name": "audio", "type": "string", "description": "Base64 audio or audio URL" }, { "name": "action", "type": "string", "default": "transcribe_and_act", "enum": [ "transcribe", "schedule", "invoice", "task" ] } ], "outputs": [ { "name": "transcript", "type": "string" }, { "name": "actions", "type": "array" }, { "name": "confirmations", "type": "array" }, { "name": "metadata", "type": "object" } ], "backends": [ "openai" ], "tags": [ "openai", "remote", "workflows" ] } } }