Nothing to enable
Once an app is connected, its tools are offered to every agent in your organization automatically. An agent that doesn’t setallowed-tools
already has them; an agent that does needs to list the ones it should use.
That’s true in chat, too. Ask an agent to “post a summary of this to #security” and, with Slack connected,
it can.
Naming tools in allowed-tools
Integration tools follow the pattern <App>_<Action>, and the name must match exactly:
- No wildcards.
Jira_*matches nothing. List each tool. - Case matters.
Jira_CreateIssue, notjira_createissue. - The app prefix is the toolkit’s name, not always the app’s. Slack’s send and react tools are
SlackApi_…, Asana’s comment tool isAsanaApi_…, Google’s are allGoogleDocs_…. Each app’s page has the exact list.
Prompting
The tools carry their own guardrails, baked into the descriptions agents read: create an issue only when asked and never in bulk, post in a finding’s existing Slack thread rather than starting a new one, read a page before replacing its content. You don’t need to repeat those. What your agent’s instructions should add is the where and what:- Name the destination. The Jira project key, the Slack channel, the Confluence space, the Notion parent
page. Agents can discover these —
Jira_ListProjects,Slack_ListConversations— but an agent told “the SEC project” doesn’t have to guess. - Say what one item looks like. A title format, which fields to fill, what to link back to. Console’s findings have ids and URLs; ask for them in the issue body so the two stay connected.
- Say what to do with nothing. Post “no issues found”, or post nothing? An agent will pick one if you don’t.
Adding a delivery step to a workflow
The natural place for integration tools in a workflow is a final step that takes what earlier steps produced and puts it where your team will see it. Console’s built-in outputs deliver to the triggering pull request; a step with integration tools can deliver anywhere an app is connected. Such a step consumes findings, and themode you choose decides
its shape.
One message per run
A summary step consumes withmode: all. It runs exactly once, with every finding from earlier in the
chain — including none — so it can say “clean” as readily as it can list problems:
One issue per finding
A filing step consumes withmode: each. It runs once per finding, and if there are none it’s recorded as
skipped rather than running with nothing to file:
group-by: [id] matters here. amplify:finding groups by detection and file by default, which is right for
patching but would file one issue for several findings. See group-by.
Putting them in a chain
Add the delivery step after the steps that produce findings. A step can only consume a kind an earlier step in the chain produces, and Console checks that when you save the workflow:
Two delivery steps that don’t depend on each other may run at the same time. That’s fine for these — they
write to different apps — but if ordering matters, have the later one consume something the earlier one
produces.
In chat
Everything above applies to chat, minus the contracts. With an app connected you can ask directly:Next steps
Slack
Tools and limits for posting and reading.
Atlassian
Jira issues and Confluence pages.
Writing an agent
The AGENT.md format,
consumes, and produces.Tool reference
Everything else an agent can call.
