Skip to main content

Overview

The AI AppSec Assistant is a persistent, per-organization agent that works alongside your security team. It can triage findings, investigate vulnerabilities, create patches, respond to scan events, answer questions in Slack, and schedule its own recurring tasks — all while remembering context from previous interactions. The assistant runs as an isolated, sandboxed environment per organization. It has access to your ZeroPath data through the platform’s MCP tools, and can interact with your team through Slack, Jira, Confluence, and Linear.
An organization admin can enable the Assistant from Configure → Settings or through the administrative API. Contact ZeroPath support if the Assistant is unavailable in your deployment.

Key Capabilities

Autonomous Security Operations

The assistant can perform multi-step security tasks without human intervention:
  • Triage findings — assess true/false positive status, evaluate severity, recommend remediation priority
  • Investigate vulnerabilities — clone repos, review code paths, assess reachability
  • Create patches — generate fixes, create PRs through the platform’s patch pipeline
  • Threat modeling — analyze application architecture and identify attack surfaces
  • SCA reachability — determine whether dependency vulnerabilities are actually exploitable in your code

Agent Teams

For complex tasks, the assistant can spawn teams of sub-agents that work in parallel. For example, when asked to triage 20 new findings, it can investigate multiple findings simultaneously across different repos rather than working through them one at a time. Each sub-agent has access to the same platform tools and memory, and the primary agent coordinates and synthesizes their results.

Self-Refinement

The assistant continuously learns and improves through three mechanisms:
  • Memory — stores and recalls decisions, team preferences, repo-specific knowledge, and investigation results across runs. Before each task, it searches memory for prior decisions on similar issues to stay consistent. After completing work, it saves key outcomes so future runs don’t re-investigate the same issues.
  • Natural language rules — when it identifies a recurring pattern (e.g., repeated false positives from a specific code pattern), it can create scanner rules so the platform catches or suppresses similar findings automatically in future scans. This means the assistant’s triage decisions permanently improve the scanner’s accuracy.
  • Recurring task context — for organization-wide scheduled tasks, the assistant automatically receives the results of its last 3 runs. It uses this to track trends, build on prior work, and avoid starting from scratch each time.

Event-Driven Automation

The assistant can be triggered automatically by platform events, each with fully customizable instructions:
  • A scan completes → the assistant triages new findings and posts a summary
  • A PR is blocked → the assistant reviews the blocking findings and suggests fixes
  • A new CVE is discovered → the assistant assesses reachability across your repos
  • A scan fails → the assistant investigates the error and notifies the team
Each trigger has its own prompt template with dynamic variables ({repo}, {vulnCount}, {prNumber}, etc.), so you control exactly what the assistant does for each event type. See Event Triggers below.

Persistent Environment

Each organization gets a dedicated, sandboxed pod with persistent storage:
  • Recurring task context — organization-wide schedules can reuse the previous three runs’ results to track trends. Scoped schedules reuse a conversation only while its resolved repository selection stays identical; each run gets a separate file workspace.
  • Cross-run memory — organization-wide tasks can store and retrieve organizational knowledge. Scoped schedules do not access shared organization memory.

Controllability

You have full control over the assistant’s behavior:
  • Global instructions: org-wide directives prepended to every task. Set policies like “always post in Slack before modifying records” or “escalate critical findings to @security-oncall.” Administrators edit them in Configure → Settings or through the administrative API. MCP tools cannot change them.
  • Event triggers — configure which platform events (scan complete, new vulnerabilities, etc.) automatically invoke the assistant, with customizable prompts per event type.
  • Cron scheduling — the assistant can create and manage its own recurring schedules (e.g., “triage new findings every Monday at 9am”).
  • Permissions — three granular permissions control who can view, manage, or run the assistant.

Dashboard

Open Assistant in the sidebar, under Automation. The Assistant page has Overview, Activity, and Chat tabs, plus a Configure tab that only organization admins see (it requires the Manage Agent permission, which is reserved to admins). The page shows an Early access badge.
  • Overview: the Jobs running, Jobs completed today, Active schedules, and Active triggers counts and whether Slack is connected, a Running now list of jobs in progress with live duration counters, and Recent actions, a feed with AI-generated summaries of the concrete actions taken (for example, findings triaged, PRs opened, scans triggered).
  • Activity: a searchable list of all conversations with AI-generated titles that summarize each conversation’s purpose. You can filter by source (Chats, Issues, PRs, Scheduled, Events, Slack) and click any row to open the full conversation thread with real-time streaming.
  • Chat: start new conversations or continue existing ones. The conversation history lists all conversations grouped by day (Today, Yesterday, then by date) with search and source filtering (All, Chat, Issue, PR, Scheduled, Event, Slack). On narrower screens the conversation history collapses behind a Conversation history toggle button. Conversations from scheduled tasks and event triggers are read-only, while Slack-linked conversations direct you to reply in the original Slack thread. The assistant automatically receives the full conversation history when responding to follow-up messages, so it maintains context across multiple exchanges in the same thread. A Stop button cancels all currently pending or running jobs in the conversation at once, which halts a multi-step task mid-flight. Stopping a conversation with no active jobs does nothing. If the Assistant is switched off for your organization, the chat input is disabled and displays a message indicating this; an admin can re-enable it under Assistant → Configure → Settings.
  • Configure: the Assistant’s configuration sections, described below.

Configure

Configure has a sidebar menu with Schedules, Triggers, Playbooks, Skills, Memory, and Settings. On a narrow screen the sidebar collapses into a Configure section dropdown.
  • Schedules: create and manage recurring tasks with cron expressions, templates, and repo/tag scoping.
  • Triggers: configure which platform events invoke the assistant, with per-trigger prompts and repo/tag scoping.
  • Playbooks: browse and manage reusable playbook templates that define multi-step workflows the assistant can execute. Playbooks codify common security operations (for example, triage runbooks or incident response procedures) so they run the same way across your team.
  • Skills: manage the reusable know-how the assistant reaches for while it works. Built-in skills are enabled automatically and can be disabled or duplicated into an editable copy, and New skill adds a custom one. Changes apply to the next run.
  • Memory: view, search, edit, and delete the assistant’s stored organizational knowledge.
  • Settings: turn the assistant on or off, set the Slack channel for updates, set global instructions, and restart the assistant.
Members without Manage Agent do not see Configure. A link to one of its sections opens Overview for them.

Quick chat from any page

The Assistant button in the top bar opens a quick chat in a drawer over the page you are on. Press ⌘J on macOS or Ctrl J elsewhere to open and close it from anywhere in the app (see keyboard shortcuts). The button and the shortcut are shown to members with the Run Agent permission.
  • With no conversation open, the drawer offers starting prompts such as Triage the newest critical issues.
  • Conversation history lists your conversations, and New conversation starts a fresh one.
  • Open in Assistant opens the current conversation on the Assistant page.
  • Closing the drawer keeps your draft and the conversation, so reopening it picks up where you left off.
If the Assistant is switched off for your organization, the drawer says Assistant is off for your organization. Admins see a link to turn it on in Assistant settings; other members see Ask an admin to turn it on.

Getting Started

Enable the Assistant

  1. Navigate to Assistant in the ZeroPath dashboard.
  2. Open Configure, then Settings.
  3. Turn on the switch under Assistant status.
Once enabled, ZeroPath provisions a dedicated pod for your organization. This may take up to a minute.

Run Your First Task

  1. Click the Ask button in the top right, or go to the Chat tab.
  2. Type a message in the input at the bottom of the page to start a new conversation, for example:
    • “List all critical severity findings from the last scan and triage them”
    • “Review the latest PR scan results and flag any true positives”
    • “What are the top 5 most common vulnerability types across our repos?”
  3. Watch the results stream in real-time. You can send follow-up messages in the same conversation thread.

Set Up Global Instructions

Global instructions are prepended to every agent task — manual runs, event triggers, Slack interactions, and scheduled jobs. Use them for org-wide policies.
  1. Open Assistant → Configure → Settings and find Global instructions.
  2. If the field is empty, click Load example instructions for a starting template.
  3. Write your instructions. For example:
  1. Click Save instructions.

Event Triggers

Event triggers let the assistant respond automatically to platform events. Each trigger has a customizable prompt that tells the assistant what to do.

Configuring Triggers

You can create multiple triggers per event type, each with its own prompt and scope. For example, you could have two “Scan Complete” triggers — one scoped to production repos that escalates critical findings, and another scoped to internal tools that generates a simple summary.
  1. Open Configure → Triggers.
  2. Click “Add trigger” on the event type you want, or toggle on an existing trigger:
  1. Click “Edit prompt” to customize what the assistant does for each event.
  2. Optionally scope each trigger to specific repositories or tags so it only fires for a subset of your codebase.

Inbound Webhooks

Inbound webhooks let external systems trigger the assistant by sending an HTTP POST request. Use them to integrate the assistant with tools outside the ZeroPath platform — CI/CD pipelines, bug bounty platforms, alerting systems, custom scripts, or any service that can send HTTP requests.

Creating an Inbound Webhook

  1. Open Configure → Triggers.
  2. Under the Webhooks section, click “Add trigger”.
  3. Give the trigger a name and write a prompt template. Use {webhookBody} as a placeholder for the incoming request payload.
  4. Click “Save”. ZeroPath generates a unique webhook URL with a secret token.
The webhook URL has the format:
Send a JSON body to this URL and the assistant will receive it as {webhookBody} in your prompt template.

Example

Prompt template:
The external system POSTs:
The assistant receives the full JSON as part of its prompt and executes the instructions.

Scoping

Like other triggers, inbound webhooks can be scoped to specific repositories or tags. If scoped, the webhook still fires but the assistant’s context is narrowed to the selected repos.

Trusted Mode

Event triggers and scheduled tasks have a Trusted toggle that controls the assistant’s execution permissions.
  • Trusted — organization-wide runs can use shell access, file read/write, and configured MCP tools. Use this only when the prompt content is controlled by your team.
  • Untrusted (default) — the assistant runs with no shell access and blocked access to sensitive configuration files. Use this for triggers that process external input, such as inbound webhooks carrying payloads from outside your organization.
Repository- or tag-scoped schedules always use restricted execution. Their saved trusted setting records the requested setting; effectiveTrusted reports the execution setting. Scoped runs have no shell, built-in web browsing or search, shared organization memory, custom MCP servers, or previous-run file context. They use only the selected repositories through approved ZeroPath tools. The configured Slack channel can still receive the run’s summary. Scoped runs use a fixed set of built-in tools to read, write, and edit their own workspace and discover approved ZeroPath tools. Built-in agent delegation and skill loading are unavailable. Repository-bound chats and PR-bot conversations use the same repository boundary. They investigate source through ZeroPath code tools rather than shared local clones. A Plan first job can investigate and propose a plan, but platform changes require the separate execution job created after approval.

When to Use Untrusted Mode

Mark a trigger as untrusted when its prompt includes content from outside your trust boundary:
  • Inbound webhooks receiving payloads from external systems
  • Triggers processing bug bounty reports, vendor advisories, or customer-submitted data
  • Any trigger where {webhookBody} or other placeholders carry externally-authored text
Untrusted mode protects against prompt injection — if a malicious payload attempts to instruct the assistant to read secrets or execute commands, those capabilities are not available.

What Changes in Untrusted Mode

The table describes organization-wide runs. Scoped schedules use a separate workspace for each run and cannot read other runs’ files. Configuration, secrets, and environment files remain blocked. The assistant can still perform platform operations (triage findings, trigger scans, create patches via MCP, post to Slack, manage schedules) in untrusted mode.

Prompt Variables

Event trigger prompts support placeholder variables that are filled in when the event fires:

Scheduled Tasks

You can create recurring schedules from Configure → Schedules, the public API, or API-token local MCP. Organization-wide Assistant conversations can also author schedules. Remote MCP connections can run existing schedules but cannot author them. Cron expressions use UTC. Schedules require five cron fields. Existing unsupported expressions remain visible as Needs update, with a configurationError in API responses. Edit the cadence to resume; expressions with seconds are not converted automatically.

Creating Schedules from the UI

  1. Open Configure → Schedules and click “New Schedule”.
  2. Choose a template to start from (Daily Triage, Weekly Security Digest, or SCA Monitoring), or build one from scratch.
  3. Enter a name, select a cron expression (or use one of the built-in presets like “Weekdays at 9am UTC” or “Every hour”), and write the prompt that tells the assistant what to do.
  4. Optionally scope the schedule to specific repositories or tags so the assistant only operates on a subset of your codebase.
  5. Click Save. You can enable, disable, edit, or trigger any schedule manually from the list.
Repository and tag selections are combined. Before each run, ZeroPath resolves the tags’ current repository membership and saves that run’s repository selection. Later tag changes affect future runs. A selected scope with no remaining repositories fails with HTTP 412; deleting its last tag or repository never turns it into an organization-wide schedule. To broaden it deliberately, choose Use all repositories when editing. API callers explicitly clear both repositoryIds and tagIds.

Creating Schedules via Chat

In an organization-wide Assistant conversation or through API-token local MCP, you can ask:
  • “Create a weekly triage of all new findings every Monday at 9am”
  • “Check for critical SCA vulnerabilities daily at midnight”
  • “Run a security posture summary every Friday at 4pm”

Failure Notifications

If a scheduled task exceeds its runtime limit without completing, ZeroPath automatically marks it as failed and sends a notification to the Slack channel configured in your assistant settings. The notification includes the task name and a link to view the run, so you can quickly investigate what went wrong. Failure notifications are retried with exponential backoff if the initial delivery does not succeed.

Recurring Task Context

Organization-wide scheduled runs can use results from the previous three runs as context. This enables:
  • Trend tracking — “Last week there were 12 critical findings, this week there are 8. Improvement in repos X and Y.”
  • Incremental work — the assistant can pick up where it left off rather than starting from scratch.
  • Audit trail — every run’s output is preserved for review.
Repository- and tag-scoped schedules do not reuse organization memory or previous runs’ files. Recurring runs with an identical resolved selection share a conversation; a changed selection starts a new one. History reads stay within the current job’s repository boundary. Results remain available in Assistant activity and through the API. See Trusted Mode for execution limits. If a selected scope has no matching repositories, a recurring occurrence is recorded as FAILED and the cadence advances. An immediate run returns HTTP 412 so you can repair the selection before retrying. View all active schedules under Configure → Schedules.

Slack Integration

The assistant can interact with your team through Slack — respond to questions, take direction, and post updates.

Setup

  1. Ensure your organization has a Slack integration connected.
  2. Open Assistant → Configure → Settings, enter the channel ID under Slack updates, and click Save.
  3. The assistant will respond to @-mentions in channels and direct messages.

Talking to the Assistant

In channels: @-mention the ZeroPath bot with a request:
@ZeroPath Can you triage the 5 new critical findings from today’s scan?
In DMs: Send a direct message to the ZeroPath bot — no @-mention needed:
What’s the current security posture across our repos?
The assistant reacts with an :eyes: emoji immediately to acknowledge your message, creates a job, and posts results back in the thread. It sends progress updates for longer tasks so you know what it’s doing. For automated runs triggered by scheduled tasks or event triggers, the assistant keeps Slack quiet: it posts one headline message to the channel, keeps all activity in that thread, and delivers a single consolidated summary when the run finishes rather than sending frequent progress updates. This prevents notification noise for runs that nobody is watching live. When the assistant uses sub-agents to work in parallel (for example, triaging multiple findings simultaneously), sub-agents return their results to the main run — only the main run posts to Slack, so each automated job produces at most one channel message and one summary reply.

Supported Actions

Thread conversations are persistent — you can reply to any thread the assistant has participated in, and it will automatically respond to follow-up messages without needing another @-mention.

Jira & Confluence Integration

When your organization has a Jira integration connected, the assistant can create and update Jira tickets and query Confluence for documentation, runbooks, and architecture context. This lets the assistant:
  • Create remediation tickets linked to ZeroPath findings
  • Look up existing tickets for context when triaging
  • Search Confluence for architecture documentation to inform threat modeling and reachability analysis
Confluence access is available when explicitly enabled in your Jira integration settings.

Linear Integration

When your organization has a Linear integration connected, the assistant can create and update Linear issues. Use this to:
  • Create remediation tickets directly from triage results
  • Query existing tickets for remediation context

PR Workflow for Linear Tickets

When the assistant opens a pull request to fix a Linear ticket, it:
  • Includes the Linear ticket key (for example, ZP-123) in the branch name, PR title, and PR body so Linear automatically links the PR to the ticket.
  • Moves the Linear ticket to Todo after posting the PR link, so the ticket owner can review and verify the fix. The ticket is not moved to a completed or closed state — it stays in Todo until you verify the fix and close it manually.
If a PR already exists for a Linear ticket when the assistant re-encounters it, the assistant moves the ticket to Todo and reports the existing PR URL rather than opening a duplicate. For tickets that need human escalation instead of a PR, the ticket stays in Triage (or the closest equivalent) so it remains in the queue for review.

Custom MCP Servers

You can extend the assistant’s capabilities by installing additional MCP servers. Ask the assistant to install a server (e.g., GitHub, PagerDuty, or any MCP-compatible tool), and it will configure the server for your organization’s pod. Custom MCP servers persist across restarts and are available on the next message after installation.

Memory

The assistant stores organizational knowledge in persistent memory using mem0. This includes:
  • Triage decisions and reasoning
  • Team preferences and security policies
  • Repository-specific knowledge (architecture, common patterns, known issues)
  • Remediation plans and outcomes

Viewing and Managing Memory

Open Configure → Memory to browse all stored memories. You can:
  • Search memories by keyword to find specific entries.
  • Edit any memory entry inline to correct or refine what the assistant has stored.
  • Delete individual entries that are no longer relevant.
  • Clear all memories to reset the assistant’s organizational knowledge entirely. This action cannot be undone.

Best Practices

  • The assistant automatically searches memory before each task and stores outcomes after. You don’t need to tell it to remember things explicitly.
  • If you want to correct a past decision, tell the assistant directly — it will update its memory.
  • Use global instructions to guide memory behavior (e.g., “always check memory for prior decisions on similar CVEs before triaging”).

Permissions

Access to the assistant is controlled by three permissions: These are assigned through Teams in the platform settings.

Repository-Level Access Control

Assistant conversations and jobs that are bound to a specific repository respect your organization’s repository-level access controls. If a user loses access to a repository (for example, through a team permission change), conversations and jobs tied to that repository are no longer visible to them. This applies uniformly across listing, viewing, sending messages, and archiving conversations — access is evaluated at read time, so revoking repository access takes effect immediately without any stored visibility state to update.

Audit Logging

Key assistant actions are recorded in the organization audit log, including creating conversations, sending messages, archiving and unarchiving conversations, and canceling jobs. Each audit entry includes the conversation and job IDs so downstream SIEM integrations can correlate events. Actions taken by the assistant are attributed to ZeroPath Assistant in the audit log and in individual finding timelines, so they are clearly distinguishable from actions taken by human team members. Background system operations (automated maintenance tasks) are labeled System.

API Access

The public Assistant API supports configuration, schedules, event triggers, and reading run results. Conversation management, memory administration, job listing/cancellation, and live streaming use the dashboard. Use an organization service token for unattended administration. It belongs to one organization, has organization-wide authority, and needs no human owner or browser session. A personal token acts with its owner’s current permissions. Configuration and schedule management require Manage Agent. Actions record the acting credential rather than impersonating its creator. Set these variables to use the examples. Replace the organization and tag IDs with your own:
Every call is POST with JSON and these headers:
  1. Read settings with POST /api/v2/agent/getConfig:
    The response contains config, with effective settings and nullable savedConfig metadata. Reading does not create configuration and never returns webhook secrets.
  2. Enable the Assistant with POST /api/v2/agent/updateConfig:
    Optional fields are slackChannelId, globalInstructions, maxConcurrentRuns, and chatRetentionDays. Omitted fields stay unchanged. Authorize Slack in Settings → Integrations before setting its channel. Configuration is available through administrative API tokens and the dashboard, not MCP tools.
  3. Create an untrusted, tag-scoped schedule with POST /api/v2/agent/createCronSchedule:
    This runs Mondays at 09:00 UTC. Save the returned schedule.id. trusted is the requested setting; effectiveTrusted is false for repository- and tag-scoped schedules.
  4. Run it immediately with POST /api/v2/agent/triggerCronSchedule:
    Save the returned jobId. An immediate run keeps the recurring cadence unchanged and is available for paused schedules. A disabled Assistant fails with HTTP 412.
  5. Poll POST /api/v2/agent/getJob with that ID:
    resultSummary contains a brief outcome. Complete reports from scoped scheduled runs are saved as ASSISTANT messages before temporary run files are removed. job.status becomes COMPLETED, FAILED, or CANCELLED. The response includes resultSummary, customer-visible messages, and the run’s effective trusted value. Pending or running jobs can have a null summary. Results respect current organization, authorship, and repository permissions.
The V2 OpenAPI specification describes the supported request and response schemas. The v1 specification does not include Assistant schedules.