Git sync is the recommended way to sync custom integrations into Tracecat in production.For local development, you can specify the environment variables:
TRACECAT__LOCAL_REPOSITORY_ENABLEDtotrueTRACECAT__LOCAL_REPOSITORY_PATHto the path of the local repository
What you’ll learn
By the end of this tutorial, you’ll learn how to:- Sync custom integrations into Tracecat
- Build custom integrations in YAML and Python
Prerequisites
- Access to a private Git repository (e.g. GitHub, GitLab)
- Basic knowledge of Python,
uv(orpip), and YAML
Sync remote git repository
We install sync the custom integrations git repo using
pip’s git+ssh scheme.
The correct scheme is: git+ssh://git@github.com/<username>/<repo>.git.
This differs from the standard Git URL scheme (git@github.com:<username>/<repo>.git), which uses a colon (:) instead of a slash (/).1
Create new repo
The first step is to create a new repo from the custom-integrations-starter-kit template.

2
Configure remote repo URL
Go to the
Git repository section in Organization settings and configure the remote repo URL to point to your private repository:
git+ssh://git@github.com/<username>/<repo>.git (notice the ”/” not ”:”)3
GitHub SSH deploy key
Create a SSH public / private key pair (without a passphrase) and store the public key in GitHub.
Store the public key in GitHub.
4
Private key in Tracecat
Go to the
SSH keys section in Organizations settings and add the private key with the name github-ssh-key.Do not change the key name. The
github-ssh-key key name works for both GitHub and GitLab.5
Refresh repos in Tracecat
Go to the
Repositories section in the Registry page and refresh the repos.
Your custom repo should now be visible.6
Sync custom repo
In the same
Repositories section, select your custom repo and press the Sync from remote.
Your custom integrations should now be visible in your Tracecat instance’s registry.7
View custom integrations
Go to the
Actions view in the Registry page and filter by Origin to view synced actions.8
🎉 That's it!
Feel free to add your own custom Python UDFs and YAML templates to the custom integrations repo.Just push to your changes to the git repo and press sync in Tracecat Registry.
Updates and new actions will show up immediately.
Action Templates
Action Templates are custom integrations built on Tracecat’s YAML-based DSL (domain specific language). A template comprises of the following elements:- A unique
title,description, anddisplay group - A
namespace(e.g.tools.falconpy) andname(e.g.call_command) for the action - Inputs defined in the
expectssection - Steps defined in the
stepssection - An optional
secretssection
core.http_request, configured to call an external API.
These steps are also parameterized with the inputs defined in the expects section.
Only data specified in the
returns field of the template is logged in Tracecat workflows.
Outputs between steps are not logged unless specified in returns.Example templates
Example templates
Actions in templates
Templates support all actions defined in the Tracecat Registry. Actions, such ascore.http_request and tools.falconpy.call_command, can all be used in templates by specifying the steps.action field.
Expressions in templates
Templates support the following expressions:inputs: Reference inputs into the action as defined in theexpectssection.steps: Reference results from previous steps in the same template.SECRETS: Reference secrets.FN: Reference functions.
inputs and steps are expressions specific to templates.
SECRETS and FN are used in the same way as in workflows.
This means that templates have full support for Tracecat’s powerful inline functions.
For example:
Secrets in templates
Secrets used in templates must be defined in thesecrets section.
You must specify the secret’s name, key, and (if applicable) optional_keys.
Secrets stored in the secrets manager can be accessed using the SECRETS context: ${{ SECRETS.<name>.<key> }}.
For example:
Python UDFs
Tracecat makes it easy to turn your Python scripts into no-code workflow actions, which we call user-defined functions (UDFs). All you need is a:- Single Python decorator
from typing import Annotatedfrom typing_extensions import Doc
Secrets used in UDFs must be defined as
RegistrySecret objects in the secrets argument of the @registry.register decorator.
They are retrieved from Tracecat’s secrets manager at runtime and garbage collected after the action is executed.Next steps
- Join our Discord community and meet other Tracecat users and contributors.
- Have integrations you’d like to share with the community? Open up an issue on GitHub and start contributing to open source!
- Check out integrations best practices.