Custom Skills
Extend what Dot can do.
This is a premium feature. Please contact us for access.
Custom skills allows you to teach new things to Dot. It's mostly intended for connecting to external systems. Here are some of the things you might want to do.
Common Use Cases
Workflow automation based on data analysis results from Dot: Create Jira/Linear tickets, update Notion docs, send Slack/email messages with findings from Dot.
Enrich Analysis with Additional Data: Connect data that is not available in your data warehouse, like customer info from a CRM or real-time data from a WMS.
Advanced Analysis Beyond SQL: Run small ML models inside the sandbox, or host them on a server behind an API that Dot can call. This opens up a whole new world of ML and other analysis. For example forecasting important metrics on the fly.
How Custom Skills Work
Custom skills appear as natural extensions of Dot's capabilities. Users simply ask questions in plain language, and Dot automatically:
Identifies when a custom skill is relevant based on the query
Extracts required parameters from the conversation context
Executes the skill and presents results accordingly.
Creating Custom Skills
Skills live on the Skills page. Open the Model page and go to the Skills tab, or go straight to /skills.
A skill is mostly a set of written instructions. You describe, in plain words, what the skill does and when Dot should use it, and Dot follows those instructions the same way it follows your notes. If the skill needs to run code, you add a Python script next to the instructions.
To add one, click Add skill and fill in:
A short name, for example
add_issue_to_jira.A description of what it does and when to use it. Be specific. This is what helps Dot pick the right skill for a question.
The instructions, written as plain markdown. Explain the steps, mention any script Dot should run, and call out common mistakes so it avoids them.
Any Python scripts the skill needs.
Secrets, like API keys, stored as named environment variables. Dot passes them in when the skill runs, so nothing sensitive sits in the instructions.
Two toggles control how a skill behaves. Active turns it on or off. Network decides whether the script can reach the internet, and it's off by default, so a skill can't make outside calls unless you allow it. A skill that talks to a service like Jira or Notion needs it on. You can also limit a skill to certain user groups if not everyone should use it.
Install a ready-made skill
You don't have to write everything yourself. The Skills page has a small marketplace of prebuilt skills you can add with one click, including skills for working with PDF, Word, Excel, and PowerPoint files. You can also install a skill from a link someone shares with you. Under the hood every skill is just a SKILL.md file plus any supporting scripts, so you can download one, adjust it, and upload it again.
Technical Architecture
Execution Environment
Isolation: Each execution runs in a Docker container with process-level isolation and resource limitations.
Timeout: 600 seconds maximum per execution
Python Version: 3.12
Available Packages
Common data packages come pre-installed, including pandas, numpy, requests, scikit-learn, xgboost, prophet, pyarrow, python-pptx, and python-dotenv. If you need something else, get in touch and we'll help.
Best Practices
1. Parameter Validation
There is a chance Dot makes a mistake. Try to catch as many errors as possible programmatically. Be defensive and provide good feedback. Validation need not be limited to just typesβit can be more complex (e.g., len(df) < 1000, check if combinations of parameters are valid).
2. Result Handling
You can pass back results using the print() statement.
You can pass back a dataframe to Dot by doing:
print(dataframe) β we will automatically handle the logic to convert this into a format that Dot can understand.
Currently we only support print statements with one argument inside (print(a,b) will not work).
Structure your print statements to be clear and easily understandable for Dot. Include only the relevant info and no unnecessary logs.
If something goes wrong during execution, handle it gracefully. Be explicit. Always try to pass back the status of the tool execution (complete/partial/failed). If failed or partial, provide feedback to Dot on what went wrong and how to fix it.
Last updated