
Security alert triage and investigation agents
- Company
- Figma
- Approach type
- Agent family
- Work
- Security, On-call, Coding
- Human involvement
- Drafts reviewed
- Invocation
- Event-driven, Interactive
- Interfaces
- Slack, Github, Webhook
- Deployment stage
- Deployed
- Evidence strength
- Detailed primary
- Entry reviewed
Purpose
Figma's security engineering team assembled an alert-response system from commercial parts rather than writing an agent framework: agent loops run inside Tines workflow automation on Claude models, and retrieval runs on AWS Bedrock Knowledge Bases and Amazon Kendra. Figma built the layers around them, including the Lambda handlers that index every Panther SIEM alert, intent routing to specialized agents, the scoped tool contracts, and the memory stores. A tagged Slack bot triages the alert with Okta, endpoint, Wiz, Slack, and Panther tools, delegates deeper questions to a sub-agent that writes Snowflake SQL against the security data lake, and can open pull requests against the detections repo or the monorepo.
How it works
Representative workflow: Panther alert through retrieval precedent, intent routing, scoped-tool investigation, and a draft pull request the on-call engineer reviews. Research details
A Lambda handler converts each Panther alert into a standardized document with structured attributes and indexes it into Kendra; the next similar alert queries Bedrock for semantic matches, biased toward recent alerts and alerts carrying on-call investigation context
The Lambda stream handler posts the alert to Slack with the first-pass LLM summary and similar-alert references, then auto-tags the Tines Security Slackbot in the thread; on-call engineers can also tag the bot manually to ask follow-up questions
The tag fires a webhook into Tines, where a lighter model reads the full Slack thread and classifies the request as alert triage, a platform security question, an app approval inquiry, or something else, and routes it to a specialized agent with its own scoped tool inventory, authorization layer, and system prompt
The alert triage agent pulls the actor's Okta profile and access, checks endpoint rules and events in Workshop, checks cloud findings in Wiz, reads linked Slack threads for past reasoning, and retrieves raw Panther events
For questions the direct tools cannot answer, the triage agent passes a natural-language query to a sub-agent that writes and runs Snowflake SQL against the Panther data warehouse, which ingests AWS CloudTrail, Okta system logs, GitHub audit events, GCP audit logs, osquery endpoint telemetry, Workshop and Santa events, Wiz findings, and about a hundred other tables
Detection rule, allowlist, and suppression changes go to the Panther detections repo, and infrastructure, service config, Terraform, RBAC, and IdP changes go to the monorepo; the agent picks up reviewer comments through a GitHub webhook, can respond or make further changes, and can rebase stale branches onto the latest master
Where people stay involved
Each scope pairs its normal attention boundary with supporting evidence. See the supervision definitions for the level mapping and limits.
Reported: Four workflows have different boundaries. The on-call engineer reviews what the triage agent found; remediation returns as a pull request that a deterministic post-step forces to draft, so the agent can open a pull request but the post never says it merges or deploys; high-confidence benign or duplicate alerts are downgraded before anyone is paged; and the post documents no review step for the non-triage intents.
Panther alert in a Slack thread → agent investigation and evidence chain → on-call engineer confirms or corrects
Work-product review · Level 3confirmed finding → agent-authored detection, suppression, or configuration change → draft pull request review
Work-product review · Level 3alert matching a high-confidence benign or duplicate precedent → automatic severity downgrade before anyone is paged
Exception-only · Level 5platform security question or endpoint software approval inquiry routed to a non-triage agent
Unknown · Level unknown
Catalog interpretation: Level 3 for Panther alert in a Slack thread → agent investigation and evidence chain → on-call engineer confirms or corrects; human attention boundary: work-product-review.
Observed in July 2026
Catalog interpretation: Level 3 for confirmed finding → agent-authored detection, suppression, or configuration change → draft pull request review; human attention boundary: work-product-review.
Observed in July 2026
Catalog interpretation: Level 5 for alert matching a high-confidence benign or duplicate precedent → automatic severity downgrade before anyone is paged; human attention boundary: exception-only.
Observed in July 2026
Catalog interpretation: Unclassified for platform security question or endpoint software approval inquiry routed to a non-triage agent; human attention boundary: unknown.
Observed in July 2026
Implementation details
- Model
- Claude models, named by tier rather than by version. A lighter model such as Claude Sonnet performs intent routing and memory formatting; a model such as Claude Opus runs the alert triage agent and the Panther investigation sub-agent.The post names Claude Sonnet and Claude Opus as examples of the tier used at each step, hedged as "a model like"; no version is given.
- Harness
- Agent loops run inside Tines, a commercial workflow-automation product, which supplies the LLM loop and the explicit tool interfaces; Figma built the surrounding system: AWS Lambda handlers that index and post each Panther alert, a retrieval layer on AWS Bedrock Knowledge Bases and Amazon Kendra, webhook-triggered intent routing to specialized agents, the deterministic tool-calling contracts, and the memory stores. The core tool set is managed outside any individual agent as configuration-as-code.
- Sandbox
- Not reportedTines runs the agent loops and the sub-agent executes SQL against Snowflake, but no execution isolation boundary is described; the legacy unknown claim stays in research details.
- Tool access
- Each routed agent has its own scoped tool inventory and authorization layer. The alert triage agent's tools cover Okta profiles, groups, and login history; North Pole Security Workshop rule and event search, host sync status, and rule push for the Santa endpoint agent; Wiz audit logs, inventory, findings, and exposed resources; Slack thread reads, profile lookups, and progress updates; Panther alert details, raw triggering events, and related alerts; opening pull requests in the Panther detections repo or the monorepo; and delegation to the Panther investigation sub-agent.
- Knowledge
- Case memory is the Kendra and Bedrock corpus of past alerts plus investigation context, which is the comment an on-call engineer leaves in the Slack alert thread or the Asana ticket and which is indexed back onto the original alert. Retrieval is biased toward recent alerts and alerts that carry investigation context. The investigation sub-agent keeps a separate procedural memory store organized by data-source tags such as aws, okta, osquery, and workshop, holding schema findings written by a lighter model. Tines database records hold stateful objects such as open agent-created pull requests and Panther investigation state.
- Context management
- The triage agent receives the full Slack thread history plus its steering-memory markdown document, loaded into context at the start of every run. It has no ambient access to whole Slack channels, and outside direct messages it can read a thread only when it is re-tagged on the latest message.
- Credentials
- Authorization controls limit the agents to security team members, and Figma states that the agent works on behalf of an authorized team member and that its tools are scoped, authorized, and monitored. Pull requests the agent opens are authored by a service account, so the PR description carries the requesting engineer's name and a link to the originating Slack thread. The post does not document how the agent authenticates to each connected system.Authorization scoping, the service-account pull-request identity, and the on-behalf-of rule are stated; the authentication mechanism for each connected system is not.
- Interfaces
- slack, github, webhookAlert summaries also reach Asana tickets and investigation context is indexed from them, but Asana is not an interface value in the schema.
Mechanisms
Panther alert → retrieval summary and precedent → intent routing → scoped-tool investigation → draft pull request
Case memory holds past alerts and investigation context, steering memory holds behavioral rules the agent can update when an engineer corrects it, Tines database records hold stateful objects, and the sub-agent's tagged procedural memory holds schema findings it saves after a discovery query
Validation and failure handling
Every pull request the agent creates is set to draft by a deterministic post-step in the Tines workflow rather than by a prompt instruction, and the same tool-calling contract keeps sensitive employee information out of Okta responses and stops the agent closing or modifying pull requests it did not author
Reported observations
The catalog records what the sources report, with the scope and the denominator of every figure. A qualification below limits the figure it sits under.
Cost latency · Estimate · Time-to-resolution on complex security alerts handled by the agent system
“Around 70% reduction in time-to-resolution on complex alerts, reported by Figma in July 2026”
- Reported by
- Figma
- Scope
- Time-to-resolution on complex security alerts handled by the agent system
The source does not report the denominator of this figure.
Observed in July 2026
Cost latency · Reported measurement · On-call pages after automatic severity downgrading of high-confidence benign or duplicate alerts
Figma reports a 20% drop in on-call pages from automatically downgrading the severity of alerts the retrieval layer scored as high-confidence benign or duplicate
- Reported by
- Figma
- Scope
- On-call pages, after automatically downgrading high or critical alerts scored as high-confidence benign or duplicate
The source does not report the denominator of this figure.
Observed in July 2026
Cost latency · Reported measurement · Endpoint software approval requests reaching the security team
Figma reports 25% fewer endpoint software approval requests, which it attributes to the agent detecting when a user is asking about a tool and directing them to comparable approved alternatives
- Reported by
- Figma
- Scope
- Endpoint software approval requests reaching the security team
The source does not report the denominator of this figure.
Observed in July 2026
Effectiveness · Qualitative · On-call engineer confidence in resolution quality
Figma reports meaningfully higher on-call engineer confidence in resolution quality, which it attributes to the agent's evidence chain being explicit and reviewable; no measurement is given
- Reported by
- Figma
- Scope
- On-call engineer confidence in resolution quality
The source does not report the denominator of this figure.
Observed in July 2026
Cost latency · Qualitative · Queries the investigation sub-agent needed for one repeated data-lake question before and after saving a schema memory
Figma reports that the first question the investigation sub-agent was asked about Zoom activity needed multiple schema-discovery queries, and that the same question cost a single query after the sub-agent saved a procedural memory
- Reported by
- Figma
- Scope
- Queries the investigation sub-agent needed for one repeated data-lake question, before and after it saved a schema memory
The source does not report the denominator of this figure.
Observed in July 2026
Adoption output · Qualitative · Share of initial security response work the system handles for Figma's security team
Figma states the system handles all initial security response work for the security team, and that the on-call engineer's job shifted from investigating from scratch to reviewing what the agent found
- Reported by
- Figma
- Scope
- Initial security response work for Figma's security team
The source does not report the denominator of this figure.
Observed in July 2026
Lessons
Figma separates precedent from policy across memory layers, after saving everything as steering memory started overriding the agent's behavior in unwanted ways; a one-off lesson about a specific alert type goes into retrieval investigation context, and a behavioral rule that should change how the agent approaches all alerts goes into steering memory.
Reported opinion: Figma's security team says procedural memory should have been in the system from the start, because the investigation sub-agent's self-built schema memory was a late addition whose improvement was dramatic enough that the earlier work feels wasted in retrospect.
Figma manages its core agent tool set in configuration-as-code outside any individual agent, after team members iterating quickly produced divergent copies of the same core agent with different tool configurations.
Figma enforces controls as deterministic post-steps in the Tines workflow rather than as prompt instructions, after finding that relying on the model to remember an instruction such as always creating a pull request as a draft was not reliable enough.
Figma includes the requesting security engineer's name and a link to the originating Slack thread in every agent-authored pull request, because bot-authored pull requests make git blame point at a service account; the team says it should have done this from the start.
Reported opinion: Figma's security team says it is more comfortable with agent autonomy when the action is bounded, reversible, and supported by clear evidence than when it is broad, destructive, or hard to audit, and that read-heavy investigation, duplicate detection, precedent retrieval, and draft remediation fit agentic execution better than generic high-powered write paths.
Reported opinion: Figma's security team advises designing the Slack trust model for public channels up front rather than bolting it on, because user-activity detail that is fine in a private security thread becomes a problem in a channel with a hundred people; Figma handles this with channel-aware prompt design and other deterministic controls.
Sources and research details
Citations link to the original publisher. Each source also keeps a preserved copy in the repository, so a changed or removed page stays checkable.
- How we secure Figma's internal systems with agentshttps://www.figma.com/blog/how-we-secure-figmas-internal-systems-with-agents/
Question coverage and scope
- purpose
- Reported
- workflow
- Reported: The alert-to-resolution loop and the memory layers are mechanisms that support the run rather than steps in it, and the deterministic safeguards are recorded under validation.
- human involvement
- Reported: Four workflows have different boundaries. The on-call engineer reviews what the triage agent found; remediation returns as a pull request that a deterministic post-step forces to draft, so the agent can open a pull request but the post never says it merges or deploys; high-confidence benign or duplicate alerts are downgraded before anyone is paged; and the post documents no review step for the non-triage intents.
- implementation
- Reported
- validation
- Reported: What is documented is deterministic tool-call safeguards and pull-request review. Figma names better evaluation of agent conclusions as future work, so no evaluation harness or accuracy check is reported.
- observations
- Reported
- lessons
- Reported
Research details for every claim on this page
- Summary
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 28, 32, 100-104
- Headline claim
- Statement type
- Metric
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- Figma reports the figure in its own engineering blog with no measurement method, denominator, or interval, and hedges it as "around 70%". The page also states the result two ways: the standfirst says time-to-resolution was cut by 71% with no scope, while the body says around 70% on complex alerts. This record keeps the body wording because it is the more precise and more bounded of the two.
- Reported by
- Figma
- Scope
- Time-to-resolution on complex security alerts handled by the agent system
- Denominator
- Not reported
- Method
- Not reported
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 212 (Where we are now, and what's next)
- ContextualizesHow we secure Figma's internal systems with agentsArticle standfirst under the title, which states the same result as cutting time-to-resolution by 71% and omits the complex-alerts scope; the standfirst is outside the preserved capture and was read on the live page on 2026-09-21
- Sandbox
unknown
- Statement type
- Inference
- Provenance
- Catalog judgment
- Confidence
- Medium
- Confidence reason
- The post places the agent loops in Tines and has the sub-agent execute SQL against Snowflake, but documents no execution isolation boundary for agent-run code; unknown does not mean absent.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 100, 121
- Harness
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 32, 100-104, 205
- Model
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 104, 110, 127, 158
- Interfaces
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 102, 104, 180
- Tool access
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 104, 112-121
- Knowledge
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 46-48, 137, 149, 151
- Credentials
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 178, 186, 206
- Context management
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 110, 139, 188
- Alert-to-resolution loop
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 28
- Index the alert and retrieve precedent
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 32, 38, 46-48
- Post a first-pass summary and tag the bot
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 102
- Route the request by intent
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 104
- Investigate with scoped tools
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 110-119
- Delegate data-lake questions to the investigation sub-agent
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 121, 127-129
- Segment memory by precedent, policy, state, and schema
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 135-151
- Open a draft pull request for the fix
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 176, 180
- Enforce deterministic tool-call safeguards
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- A linked first-party source states the claim.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 184-186
- Key observation
- Statement type
- Metric
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- Figma attributes the drop to the automatic severity downgrade alone and repeats it in the results paragraph, but reports no baseline period, denominator, or method. The downgrade runs in the retrieval layer on a confidence threshold, not in the triage agent.
- Reported by
- Figma
- Scope
- On-call pages, after automatically downgrading high or critical alerts scored as high-confidence benign or duplicate
- Denominator
- Not reported
- Method
- Not reported
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 84-94, 212
- Key observation
- Statement type
- Metric
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- The figure appears only in the summary list of results, with the mechanism Figma credits for it but no baseline, denominator, or method.
- Reported by
- Figma
- Scope
- Endpoint software approval requests reaching the security team
- Denominator
- Not reported
- Method
- Not reported
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 212
- Key observation
- Statement type
- Metric
- Provenance
- Reported
- Confidence
- Low
- Confidence reason
- Figma states engineer confidence is meaningfully higher but gives no survey, scale, or other measurement, so this is a qualitative impression reported alongside the numeric results.
- Reported by
- Figma
- Scope
- On-call engineer confidence in resolution quality
- Denominator
- Not reported
- Method
- Not reported
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 212
- Key observation
- Statement type
- Metric
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- The before-and-after query counts come from one worked example about Zoom activity that Figma uses to illustrate procedural memory; the post says the pattern repeated across data sources but gives no aggregate.
- Reported by
- Figma
- Scope
- Queries the investigation sub-agent needed for one repeated data-lake question, before and after it saved a schema memory
- Denominator
- Not reported
- Method
- Not reported
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 158
- Key observation
- Statement type
- Metric
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- Figma states the coverage directly, but gives no alert counts, exclusions, or period, so the scope of "all initial security response work" rests on the team's own characterization.
- Reported by
- Figma
- Scope
- Initial security response work for Figma's security team
- Denominator
- Not reported
- Method
- Not reported
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 210
- Lesson
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- The memory section states the split and names the early mistake of saving everything as steering memory, including the consequence it produced.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 147
- Lesson
- Statement type
- Opinion
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- This is the team's own hindsight preference in the "In hindsight" list. The underlying improvement is illustrated by one example and a general claim that the pattern repeated, not by measured results across data sources.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 204
- Lesson
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- The hindsight list states both the fragmentation problem and the configuration-as-code arrangement Figma runs today.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 205
- Lesson
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- The guardrails section states that the draft setting is a deterministic post-step in the Tines workflow and gives the reliability failure that led to it.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 184
- Lesson
- Statement type
- Fact
- Provenance
- Reported
- Confidence
- High
- Confidence reason
- The code-changes section states the practice, the git blame reason behind it, and the team's view that it should have been there from the start.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 178
- Lesson
- Statement type
- Opinion
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- This is Figma's stated comfort boundary for autonomy, not a measured finding, and it is bounded to the action types this security workflow performs.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 190
- Lesson
- Statement type
- Opinion
- Provenance
- Reported
- Confidence
- Medium
- Confidence reason
- The hindsight list gives this as advice from Figma's experience with a Slack-integrated security agent, with the controls Figma uses; the post reports no incident that tested them.
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 206
- Operating model assessment
- Statement type
- Inference
- Provenance
- Catalog judgment
- Confidence
- High
- Confidence reason
- The post states that the on-call engineer's job shifted to reviewing what the agent found and confirming or correcting it, which locates human attention at the investigation write-up rather than during it.
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 210
- Operating model assessment
- Statement type
- Inference
- Provenance
- Catalog judgment
- Confidence
- High
- Confidence reason
- The post says the agent opens pull requests and that a deterministic post-step sets every one of them to draft, so the review of the change is the documented boundary. Opening a pull request is the agent's authority; nothing in the post says the agent merges or deploys.
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 176, 184
- Operating model assessment
- Statement type
- Inference
- Provenance
- Catalog judgment
- Confidence
- Medium
- Confidence reason
- The severity-downgrade code path runs on a retrieval confidence score without a described human checkpoint, and Figma credits it with fewer on-call pages. The post does not say what happens to a downgraded alert afterwards, so the exception boundary is inferred from the reduced paging rather than stated.
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, lines 84-94
- Operating model assessment
- Statement type
- Inference
- Provenance
- Catalog judgment
- Confidence
- Unverified
- Confidence reason
- The post names platform security questions and app approval inquiries as separate routed agents with their own tools and prompts, but describes no review step for their answers. The boundary is undocumented, and the triage boundary must not be assumed to carry over.
- Observation date
- 2026-07
- SupportsHow we secure Figma's internal systems with agentsPreserved content.md, line 104