# InTouch base tools — contract reference > The 44 tools built into InTouch (8.0.3). For each one: what it > takes, what it refuses to run without, and what it PUBLISHES for a later task to > reference as `{{taskName.key}}`. Never reference a key that is not listed under > PUBLISHES — it will resolve to nothing at run time. Machine-readable: [base-tools.json](./base-tools.json) ## anthropic Send a prompt to Claude (Anthropic) and use the response. - **Credential required:** yes (`anthropic`) - **Publishes:** `inputTokens`, `model`, `outputTokens`, `response`, `stopReason`, `thinking`, `totalTokens` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "topK" : -1, "extendedThinking" : false, "thinkingBudget" : 10000, "stopSequences" : "", "outputFile" : "", "thinkingOutputFile" : "", "timeoutSeconds" : 120 } ``` ## anthropic_agent Autonomous Claude agent that can drive InTouch over multiple steps. - **Credential required:** yes (`anthropic`) - **Publishes:** `iterations`, `model`, `response`, `toolCallCount`, `toolHistory`, `totalInputTokens`, `totalOutputTokens`, `totalTokens` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "intouchBaseUrl" : "http://localhost:2200", "intouchSessionToken" : "", "maxIterations" : 20, "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "extendedThinking" : false, "thinkingBudget" : 10000, "jobPollIntervalSeconds" : 10, "jobMaxWaitSeconds" : 600, "outputFile" : "", "toolHistoryFile" : "", "timeoutSeconds" : 120 } ``` ## anthropic_batch Process many prompts in bulk via Claude's Batch API (cheaper, async). - **Credential required:** yes (`anthropic`) - **Publishes:** `batchId`, `errored`, `expired`, `firstResponse`, `processingStatus`, `resultsRetrieved`, `resultsSucceeded`, `succeeded`, `totalRequests` ```json { "inputFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "outputDir" : "", "outputFile" : "", "pollIntervalSeconds" : 30, "maxWaitSeconds" : 3600 } ``` ## anthropic_document Ask Claude about a PDF or document, with source citations. - **Credential required:** yes (`anthropic`) - **Publishes:** `citationCount`, `citations`, `inputTokens`, `model`, `outputTokens`, `response`, `stopReason`, `totalTokens` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "documentFiles" : "", "imageUrls" : "", "enableCitations" : true, "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "extendedThinking" : false, "thinkingBudget" : 10000, "outputFile" : "", "citationsOutputFile" : "", "timeoutSeconds" : 300 } ``` ## anthropic_tools Claude with custom tool / function calling. - **Credential required:** yes (`anthropic`) - **Publishes:** `iterations`, `model`, `response`, `toolCallCount`, `toolHistory`, `totalInputTokens`, `totalOutputTokens`, `totalTokens` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "toolsFile" : "", "toolsJson" : "", "maxIterations" : 10, "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "outputFile" : "", "toolHistoryFile" : "", "timeoutSeconds" : 120 } ``` ## archive Create and open archives — zip, unzip, tar, untar, and list contents without extracting. - **Publishes:** `count`, `destination`, `entries`, `file`, `fileCount`, `files`, `format`, `operation`, `path`, `size`, `summary` ```json { "operation" : "list", "path" : "/tmp/example.zip", "destination" : "", "include" : "" } ``` ## aws Run AWS operations via the AWS CLI. - **Credential required:** yes (`aws`) - **Publishes:** `commandCount`, `exitCode`, `output` ```json { "service" : "", "operation" : "", "args" : "", "region" : "", "outputFormat" : "json", "query" : "", "outputFile" : "", "scriptFile" : "", "workingDir" : "", "successCodes" : "0", "timeoutSeconds" : 300 } ``` ## deepseek Send a prompt to DeepSeek and use the response. - **Credential required:** yes (`deepseek`) - **Publishes:** `completionTokens`, `finishReason`, `model`, `promptTokens`, `response`, `totalTokens`, `validationError` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "frequencyPenalty" : 0.0, "presencePenalty" : 0.0, "responseFormat" : "text", "stopSequences" : "", "outputFile" : "", "timeoutSeconds" : 120, "outputSchema" : "", "validationRetries" : 0, "redactPatterns" : "" } ``` ## discord Post messages to Discord (outbound). - **Credential required:** yes (`discord`) - **Publishes:** nothing — do not reference `{{discordTask.anything}}` ## document_chunker Split a document into chunks for AI processing. - **Publishes:** `chunkCount`, `chunks`, `totalChars`, `totalTokenEstimate` ```json { "inputFile" : "", "input" : "", "splitBy" : "tokens", "chunkSize" : 512, "chunkOverlap" : 50, "separator" : "", "metadata" : "", "outputFile" : "", "maxChunks" : 0 } ``` ## email-read Read messages from an IMAP mailbox (read-only; never marks mail read). - **Credential required:** yes (`email-read`) - **Publishes:** `count`, `ids`, `memory`, `messages`, `output` ```json { "name" : "", "folder" : "", "unreadOnly" : true, "sinceDays" : 0, "maxMessages" : 25, "includeBody" : true, "sinceState" : "" } ``` ## embeddings Turn text into a vector embedding for search and RAG. - **Credential required:** yes (`openai`) - **Exactly one of:** `input`, `inputFile` - **Publishes:** `dimensions`, `embedding`, `embeddingCount`, `model`, `promptTokens`, `totalTokens` ```json { "input" : "", "inputFile" : "", "model" : "", "dimensions" : 0, "encodingFormat" : "float", "outputFile" : "", "timeoutSeconds" : 120 } ``` ## fine_tuning Create and manage model fine-tuning jobs. - **Credential required:** yes (`openai`) - **Publishes:** `fineTunedModel`, `workflowId`, `operation`, `response`, `status` ```json { "operation" : "status", "model" : "", "trainingFile" : "", "validationFile" : "", "fineTuneJobId" : "", "suffix" : "", "epochs" : 0, "learningRateMultiplier" : 0.0, "batchSize" : 0, "outputFile" : "", "timeoutSeconds" : 300 } ``` ## gemini Send a prompt to Google Gemini and use the response. - **Credential required:** yes (`gemini`) - **Publishes:** `candidateTokens`, `finishReason`, `model`, `promptTokens`, `response`, `thinking`, `thinkingTokens`, `totalTokens` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxOutputTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "topK" : -1, "stopSequences" : "", "safetyThreshold" : "BLOCK_MEDIUM_AND_ABOVE", "outputFile" : "", "thinking" : false, "thinkingBudget" : 8192, "thinkingOutputFile" : "", "timeoutSeconds" : 120 } ``` ## google_workspace Work with Gmail, Calendar, Drive, Sheets, Docs and more. - **Credential required:** yes (`google_workspace`) - **Publishes:** `commandCount`, `exitCode`, `output` ```json { "service" : "", "operation" : "", "args" : "", "account" : "", "outputFormat" : "json", "outputFile" : "", "scriptFile" : "", "workingDir" : "", "successCodes" : "0", "timeoutSeconds" : 300, "query" : "", "max" : 0, "messageId" : "", "to" : "", "subject" : "", "bodyHtml" : "", "cc" : "", "bcc" : "", "calendarRange" : "", "parent" : "", "localPath" : "", "fileName" : "", "spreadsheetId" : "", "range" : "", "values" : "" } ``` ## groq Send a prompt to a Groq-hosted model and use the response. - **Credential required:** yes (`groq`) - **Publishes:** `completionTokens`, `finishReason`, `model`, `promptTokens`, `response`, `totalTokens`, `validationError` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "frequencyPenalty" : 0.0, "presencePenalty" : 0.0, "responseFormat" : "text", "stopSequences" : "", "outputFile" : "", "timeoutSeconds" : 120, "outputSchema" : "", "validationRetries" : 0, "redactPatterns" : "" } ``` ## http Call any web API or webhook over HTTP (GET, POST, …). - **Publishes:** `responseBody`, `responseCode` ```json { "url" : "", "method" : "GET", "headers" : { }, "body" : "", "contentType" : "application/json", "timeoutSeconds" : 30, "successCodes" : "200,201,202,204", "outputFile" : "", "followRedirects" : true } ``` ## huggingface Run a Hugging Face model (summarize, classify, generate, …). - **Credential required:** yes (`huggingface`) - **Publishes:** `embeddings`, `entityCount`, `label`, `model`, `rawResponse`, `response`, `score`, `similarities`, `task`, `topToken` ```json { "task" : "text-generation", "model" : "", "input" : "", "inputFile" : "", "parameters" : "", "candidateLabels" : "", "context" : "", "waitForModel" : true, "outputFile" : "", "timeoutSeconds" : 300 } ``` ## if Run steps only when a condition is met. - **Publishes:** nothing — do not reference `{{ifTask.anything}}` ```json { "arms" : [ ] } ``` ## image_generation Generate an image from a text prompt. - **Credential required:** yes (`openai`) - **Publishes:** `imageCount`, `imageUrl`, `model`, `outputFile`, `revisedPrompt` ```json { "prompt" : "", "model" : "", "size" : "1024x1024", "quality" : "standard", "style" : "vivid", "n" : 1, "responseFormat" : "url", "outputFile" : "", "timeoutSeconds" : 120 } ``` ## iml - **Credential required:** yes (`iml`) - **Publishes:** nothing — do not reference `{{imlTask.anything}}` ## intouch-skill Run an installed InTouch skill. - **Publishes:** `answer`, `inputTokens`, `model`, `outputTokens`, `skillName`, `toolCallCount` ```json { "skillName" : "", "input" : "" } ``` ## intouch_user - **Credential required:** yes (`intouch_user`) - **Publishes:** nothing — do not reference `{{intouch_userTask.anything}}` ## line Send messages via the LINE Messaging API (outbound). Department+. - **Credential required:** yes (`line`) - **Publishes:** nothing — do not reference `{{lineTask.anything}}` ## message Send a notification to your configured channels (email, Slack, Discord, …). - **Publishes:** nothing — do not reference `{{messageTask.anything}}` ```json { "alertName" : "", "subject" : "", "body" : "", "bodyType" : "text", "attachments" : [ ], "contactNames" : [ ], "userNames" : [ ] } ``` ## mistral Send a prompt to Mistral and use the response. - **Credential required:** yes (`mistral`) - **Publishes:** `completionTokens`, `finishReason`, `model`, `promptTokens`, `response`, `totalTokens`, `validationError` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "frequencyPenalty" : 0.0, "presencePenalty" : 0.0, "responseFormat" : "text", "stopSequences" : "", "outputFile" : "", "timeoutSeconds" : 120, "outputSchema" : "", "validationRetries" : 0, "redactPatterns" : "" } ``` ## oauth - **Credential required:** yes (`oauth`) - **Publishes:** nothing — do not reference `{{oauthTask.anything}}` ## ollama Send a prompt to a local Ollama model (private, no API cost). - **Credential required:** yes (`ollama`) - **Publishes:** `durationMs`, `model`, `outputTokens`, `promptTokens`, `response`, `totalTokens` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "temperature" : 0.7, "maxTokens" : 4096, "topP" : 0.9, "outputFile" : "", "timeoutSeconds" : 300 } ``` ## openai Send a prompt to OpenAI (GPT) and use the response. - **Credential required:** yes (`openai`) - **Publishes:** `completionTokens`, `finishReason`, `model`, `promptTokens`, `response`, `totalTokens`, `validationError` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "frequencyPenalty" : 0.0, "presencePenalty" : 0.0, "responseFormat" : "text", "stopSequences" : "", "outputFile" : "", "timeoutSeconds" : 120, "outputSchema" : "", "validationRetries" : 0, "redactPatterns" : "" } ``` ## openrouter Send a prompt to OpenRouter (any vendor's model via one API) and use the response. - **Credential required:** yes (`openrouter`) - **Publishes:** `completionTokens`, `finishReason`, `model`, `promptTokens`, `response`, `totalTokens`, `validationError` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "frequencyPenalty" : 0.0, "presencePenalty" : 0.0, "responseFormat" : "text", "stopSequences" : "", "outputFile" : "", "timeoutSeconds" : 120, "outputSchema" : "", "validationRetries" : 0, "redactPatterns" : "" } ``` ## os Common OS operations (files, search, disk, date, sleep) — declarative, no shell, fail-loud. - **Publishes:** `algorithm`, `bytes`, `content`, `count`, `cpuCores`, `date`, `deleted`, `dest`, `disk`, `entries`, `epochMillis`, `exists`, `files`, `free`, `hash`, `java`, `killed`, `lineCount`, `lines`, `matches`, `memory`, `modified`, `os`, `path`, `percentUsed`, `pid`, `replacements`, `set`, `size`, `slept`, `source`, `summary`, `total`, `type`, `used`, `user`, `value` ```json { "operation" : "appendfile", "path" : "/tmp/example.log", "text" : "hello" } ``` ## runtimeenv Last resort: run a custom script when no native tool covers the task. - **Required fields:** `runtimeEnvName` - **Publishes:** `exitCode`, `output` ```json { "scriptSource" : "inline", "script" : "", "scriptContent" : "", "args" : "", "environmentVariables" : "", "envVars" : { }, "credentialNames" : [ ], "credentialEnvVarOverrides" : { }, "successCodes" : "0", "timeoutSeconds" : 300, "outputFile" : "" } ``` ## slack Post messages to Slack (outbound). - **Credential required:** yes (`slack`) - **Publishes:** nothing — do not reference `{{slackTask.anything}}` ## sleep Pause the job for a set amount of time. - **Publishes:** nothing — do not reference `{{sleepTask.anything}}` ```json { "seconds" : 0 } ``` ## sms Send SMS via Telnyx, Twilio, Plivo or AWS SNS (outbound). - **Credential required:** yes (`sms`) - **Publishes:** nothing — do not reference `{{smsTask.anything}}` ## smtp Send email through an SMTP server — the server-wide outbound email transport. - **Credential required:** yes (`smtp`) - **Publishes:** nothing — do not reference `{{smtpTask.anything}}` ## speech_to_text Transcribe an audio file into text. - **Credential required:** yes (`openai`) - **Publishes:** `duration`, `language`, `model`, `transcription` ```json { "audioFile" : "", "model" : "", "language" : "", "prompt" : "", "responseFormat" : "text", "temperature" : 0.0, "outputFile" : "", "timeoutSeconds" : 300 } ``` ## teams Send messages to Microsoft Teams (outbound). Department+. - **Credential required:** yes (`teams`) - **Publishes:** nothing — do not reference `{{teamsTask.anything}}` ## telegram Send messages via a Telegram bot (outbound). - **Credential required:** yes (`telegram`) - **Publishes:** nothing — do not reference `{{telegramTask.anything}}` ## text_to_speech Convert text into spoken audio. - **Credential required:** yes (`openai`) - **Exactly one of:** `input`, `inputFile` - **Publishes:** `audioSize`, `format`, `inputLength`, `model`, `outputFile`, `voice` ```json { "input" : "", "inputFile" : "", "model" : "", "voice" : "alloy", "responseFormat" : "mp3", "speed" : 1.0, "outputFile" : "", "timeoutSeconds" : 120 } ``` ## vector_store Store and search vector embeddings (semantic search). - **Credential required:** yes (`vector_store`) - **Publishes:** `operation`, `response` ```json { "operation" : "query", "indexName" : "", "namespace" : "", "queryVector" : "", "queryText" : "", "topK" : 10, "filter" : "", "includeMetadata" : true, "includeValues" : false, "vectors" : "", "vectorsFile" : "", "deleteIds" : "", "deleteFilter" : "", "outputFile" : "", "timeoutSeconds" : 120 } ``` ## whatsapp Send WhatsApp messages via the Meta Cloud API (outbound). Department+. - **Credential required:** yes (`whatsapp`) - **Publishes:** nothing — do not reference `{{whatsappTask.anything}}` ## workflow Run, enable or disable ANOTHER workflow from inside this one. - **Required fields:** `ids` - **Publishes:** nothing — do not reference `{{workflowTask.anything}}` ```json { "operation" : 3, "ids" : [ ] } ``` ## xai Send a prompt to xAI (Grok) and use the response. - **Credential required:** yes (`xai`) - **Publishes:** `completionTokens`, `finishReason`, `model`, `promptTokens`, `response`, `totalTokens`, `validationError` ```json { "prompt" : "", "promptFile" : "", "systemPrompt" : "", "systemPromptFile" : "", "model" : "", "maxTokens" : 4096, "temperature" : 1.0, "topP" : -1.0, "frequencyPenalty" : 0.0, "presencePenalty" : 0.0, "responseFormat" : "text", "stopSequences" : "", "outputFile" : "", "timeoutSeconds" : 120, "outputSchema" : "", "validationRetries" : 0, "redactPatterns" : "" } ```