Skip to content

Legal

Security

Last updated Version 1.7

In short

  • FireFunc never clones, fetches or stores a repository. Agents work in a checkout on a computer you pair, using the AI subscriptions you already have — or, if you choose, in an AI vendor’s cloud under your account.
  • FireFunc stores what coordinates the work: tickets and events from the tools you connect, and what each run reports — its status, its steps, the pull request link and the agent’s summary, with code taken out of the agent’s words before they are stored, whether a paired machine or a vendor’s cloud sent them.
  • It runs on Amazon Web Services in one region, us-east-1. The database is encrypted and cannot be reached from the internet, and each workspace’s data is kept apart by Postgres row-level security.
  • FireFunc holds no security certification yet. We answer security questionnaires at admin@firefunc.com, and the Responsible Disclosure page says how to report a vulnerability.
Contents
  1. 1. The model: the work happens on your side
  2. 2. Infrastructure
  3. 3. Encryption
  4. 4. Isolation between customers
  5. 5. Credentials for your tools
  6. 6. Agent guardrails
  7. 7. Access control for your team
  8. 8. Access by FireFunc staff
  9. 9. Monitoring and logging
  10. 10. Backups and recovery
  11. 11. Reporting a vulnerability
  12. 12. Incidents
  13. 13. Compliance status
  14. 14. Contact

1. The model: the work happens on your side

1.1 Where the work happens

A customer installs the FireFunc runner on computers it owns and pairs each one with a workspace. When an agent takes a task, the runner checks the repository out on that machine and starts an AI engine there — Claude Code, Codex, Copilot CLI, Gemini CLI, Cursor CLI or Antigravity — signed in to the customer’s own account with that engine’s vendor.

FireFunc writes the brief the engine starts from. Everything after that — the engine reading files, running commands and talking to its vendor — happens between the machine and the vendor. FireFunc runs no AI models of its own, so nothing it holds is used to train one.

A customer may instead give an agent an engine that runs in its vendor’s cloud — GitHub Copilot’s coding agent, Cursor’s cloud agents or a Claude Code routine. FireFunc then sends the vendor the brief with the key or connection the customer gave it, and the vendor works on the repository in its own cloud, under the customer’s account. The secret scan before a push and the local viewer below are the machine’s, and do not apply to those engines: with no scan of their changes, FireFunc never merges their pull requests on its own. Code is still taken out of what they report — their summary, their reasoning and why a run failed — before FireFunc stores it, and each removed block is marked “[code left out]”.

1.2 What FireFunc stores

  • From the tools you connect: tickets and messages (titles, descriptions, comments, labels, assignees and the attachments people add); pull request and issue details from GitHub, including the paths of changed files and how many lines changed, but not the changes themselves; Sentry issues and events, with the file, function and line of an error but without its source lines or local variables; and what your systems send to your FireFunc webhooks, as it was sent, less any diff it carries.
  • From the runner: each run’s status, branch and pull request link, and, if it failed, the reason in one line; each step it took, as one line (a file path, a command’s programs and subcommands such as “npm test”, a tool’s name, a website or search, or a remark from the agent), never the rest of a command, a file’s contents or a command’s output; the summary the agent wrote at the end; what the run used, as the engine counted it (tokens by model, turns, time, the engine’s own estimate of their price, whether the engine was signed in to a plan or an API key and whether the plan drew on its extra usage, the engine’s version, and the plan’s usage readings when the engine reports them); where the secret scan found something, if it did; and the machine’s host name, platform, runner version, the engines it found, how much of an engine’s usage allowance is used where it can read that, and the names of its sign-ins. Code is removed from the summary, the reason and the steps before FireFunc stores them.
  • Written by FireFunc: the brief each run starts from, kept until 7 days after the run finishes.

The Privacy Policy lists each item, and says how long each is kept.

1.3 What never reaches FireFunc

  • Your repository. The parts of tool events that carry code — the diff around a review comment, a CI check’s output, the source lines and variables in a Sentry stack trace — are removed before FireFunc stores an event. What people write into a ticket, comment or message is kept as they wrote it, code included.
  • File contents, diffs, command output and the engine’s transcript. The runner can show them on the machine, in its local viewer.
  • The keys and sign-ins the engines and tools use on the machine. The runner reports a sign-in’s name, state and expiry, never its token.

Runner 0.8.3 and later scan an agent’s change for secrets on the machine, before the change is pushed, so the change never has to be sent to FireFunc to be checked. A key or token of a known kind stops the push. A weaker match — a value assigned to a name like password, as often a test fixture as a secret — is pushed and reported, and FireFunc will not merge that pull request on its own: a person decides. The scan reports a file, a kind and a line for each finding — never the secret. An older runner reports no scan, and FireFunc does not merge its pull requests on its own either.

When an agent asks a connected tool a question in the middle of a run, FireFunc fetches the answer with the organization’s own connection and passes it to the engine. It does not keep the answer.

2. Infrastructure

FireFunc runs entirely on Amazon Web Services, in one region: us-east-1, in Northern Virginia. It has no servers of its own. The website is served by Amazon CloudFront; the API runs on AWS Lambda, reached through CloudFront and Amazon API Gateway; the background workers run on Lambda too, and work moves to them on Amazon SQS queues; data is kept in Amazon RDS for PostgreSQL; sign-in is Amazon Cognito; and secrets are kept in AWS Systems Manager Parameter Store under AWS Key Management Service keys.

The database sits in a private network and is not publicly reachable: it accepts connections only from FireFunc’s own services inside that network.

Physical security of the data centers is Amazon’s. The full list of AWS services FireFunc uses, and what each one handles, is on the Subprocessors page.

3. Encryption

  • In transit. Every connection to FireFunc uses TLS, ended at CloudFront or API Gateway. Answers from firefunc.com tell browsers to use HTTPS only (HSTS), refuse to be shown inside another site’s frame, and forbid content-type guessing.
  • At rest. The database’s storage and its backups are encrypted.
  • Secrets. The tokens a tool issues when you connect it, and the credentials an organization enters for an MCP server, are stored as encrypted parameters in AWS Systems Manager Parameter Store under AWS Key Management Service keys. The database holds only a pointer to each.
  • Hashes only. Workspace API keys, machine tokens, incoming-webhook tokens, invitation links and the passes a run uses to reach FireFunc’s tools are shown once and stored only as hashes. The signing secret of an outgoing webhook is kept encrypted instead, because FireFunc needs it to sign each delivery.

4. Isolation between customers

Every row of a workspace’s data names the workspace or organization it belongs to, and Postgres row-level security admits a query only to the rows its workspace may see. The policies are forced, so they bind the tables’ owner as well as the application, and a query that names no workspace sees no rows at all.

Account records sit outside those policies, because an account belongs to a person rather than to one workspace: the name and email you sign in with are kept once, however many workspaces you join, and are reached only through FireFunc’s own queries. So are the requests sent from the early access form, whose senders have no workspace yet.

The few jobs that must work across workspaces — the staff console and background tasks such as renewing tool tokens — use a separate database role. Every change made through the staff console is recorded in the audit log.

5. Credentials for your tools

The tokens a tool issues when you connect it to FireFunc never leave FireFunc and are never sent to your machines. A run is given only what it needs:

  • For GitHub, a token FireFunc issues for that run alone, limited to one repository and to its contents and pull requests, which expires within an hour. The runner asks for it only to clone a repository the machine does not have yet and, once the engine has finished, to push the change and open the pull request. It hands the token to git and to that one call to GitHub, never to the engine.
  • If the agent may use GitHub’s own MCP server, a second GitHub token for the same repository, which only reads, and which the engine holds.
  • For an MCP server the agent has been granted, the credential your organization entered or signed in with for that server, which is sent to the machine the run is on.
  • For reading a connected tool mid-run through FireFunc, a pass that names the run and the tools it may call. FireFunc makes each call with the organization’s connection, so the connection’s token stays with FireFunc.

Tokens that expire are renewed by FireFunc before they do. A vendor that fails to answer a renewal is tried again while the current token still works, rather than being reported as disconnected.

6. Agent guardrails

6.1 What an agent may use

What FireFunc gives a run is bounded by the agent’s grants, which are shown on its page: the connected tools it may read or write through FireFunc, the MCP servers put on its configuration, and the writes FireFunc carries out for it when the run ends. For an agent to write to a tool through FireFunc in the middle of a run, it needs a write grant for that tool and Writes switched on for the account under Organization → Connections; FireFunc carries out each such write and leaves a receipt on the task. The grants do not bound the machine: an engine on a paired machine also has that machine’s shell, files and network, and can reach whatever they reach — a command-line tool already signed in there, for one.

For engines whose command line takes a list of forbidden tools — today Claude Code and Copilot CLI — FireFunc names the tools it knows the run may not use and passes them as denied: the write tools a shipped connection withheld, every tool an organization’s own MCP server was seen to publish that was not ticked for agents, and — for an agent that may read that server but not write to it — every ticked tool not marked read-only. The organization marks each tool itself on Organization → MCP servers; where it has not, the server’s own mark is used, and a tool nobody marked counts as one that writes. Neither mark is something FireFunc checked. A tool FireFunc has never seen listed cannot be named. We say “denied” rather than “impossible”: we have not shown that every engine enforces its own list in every mode.

In FireFunc itself, creating, editing, activating, pausing and deleting an agent take one permission. Owners, Admins and Members hold it by default — Members through the organization’s Contributor role, which the organization can edit to take it away — and Viewers and Guests do not. Giving an agent steps that write to your tools takes a second permission, which the same roles hold by default. Each agent can be limited to a number of runs a day and a number at once, and each project to a daily budget of runs.

A workspace API key does what its scopes allow, chosen by the owner or admin who makes it, and only scopes that person’s own role holds when the key is made. With agents:write it makes and edits draft agents, which take no work, and pauses and resumes an agent that was switched on before. Switching an agent on, and editing one that is on, needs agents:activate, which is off unless ticked. Installing or writing a skill, and setting a project’s standing instructions, repositories or the work it claims, needs workspace:configure, also off unless ticked — with one exception: making an agent from a template also installs the skills that template names, from FireFunc’s own directory, as launching it from the gallery does. A skill goes into every run of every agent that carries it, so every skill change, that one included, is recorded in the audit log with the skill’s fingerprint, never its text. An app connected through FireFunc sign-in — Claude, for one — acts as the one person who connected it, in one workspace, with the scopes that person allowed and never more than their role allows; the role is checked again on every call. Through such an app, switching an agent on also needs a role that may activate agents: Owners and Admins by default, not the Contributor role. Otherwise what the app makes waits as a draft, with a link for a person to review it and switch it on.

6.2 Merging

Agents open pull requests, and FireFunc merges one in only two ways, each a person’s choice. The first is auto-merge, which is off unless a person whose role allows it — Owners and Admins, by default — switches it on for a project and chooses which kinds of work it covers. Even then, FireFunc merges a pull request only when all of these hold:

  • its CI checks have passed, as GitHub reports them;
  • no changed file is CI configuration, infrastructure code, a Dockerfile, a dependency lockfile, a database migration, a key or .env file, or under a path the project marks off-limits;
  • every run that pushed to it reported the machine’s secret scan, the scan found nothing, and the pull request’s head is still the commit the last scan covered — FireFunc merges that commit and no other, so a commit added after the scan holds the merge for a person;
  • the change is within the size the project allows.

The second is a merge step: someone who may give an agent steps that write to your tools can add GitHub’s “Merge a pull request”, which FireFunc carries out after the run. That merge keeps the same secret-scan rule and merges only the commit the scan covered; it refuses a draft or a conflicted pull request and, unless the step turns it off, requires the checks to have passed. It does not apply the project’s off-limits paths or size limit.

Either way the merge is made through GitHub, so the repository’s branch protection and code owners still apply.

7. Access control for your team

  • Roles. Each person holds a role in each workspace — Owner, Admin, Member, Viewer or Guest — and an organization can write its own roles, permission by permission. An organization’s owners and admins are admins in every one of its workspaces, and its auditors are viewers; its billing role reaches none of them. People can also be named on single projects.
  • Seats. Suspending a person’s seat suspends their access: every workspace refuses them until the seat is reinstated. The last active owner of an organization cannot be suspended.
  • Sign-in. Passwords and second factors are handled by Amazon Cognito. Passwords must be at least 12 characters, with upper and lower case letters, a number and a symbol. FireFunc’s sign-in form asks for an authenticator-app code whenever an account has one set up; there is not yet a screen in FireFunc for you to set one up yourself.
  • Machines. Each paired machine has its own token, and it can be revoked on its own without touching the others.
  • Audit log. Pairing a machine, creating an agent, changing what an agent is granted or what it writes to your tools, installing, writing, changing or removing a skill, changing a project’s standing instructions, repositories or the work it claims, taking a template’s changes into an agent, restoring an earlier version of an agent, linking, confirming or removing work outside FireFunc on a task, filing a finding in a tracker or handing it to an agent, changing a person’s role, and connecting or disconnecting a tool are recorded with who made them and when. Not every change is in the log yet: other edits to an agent, activating, pausing or deleting one from the dashboard, and revoking a machine leave no entry. Each save of an agent is kept instead as a version on the agent’s History, with who saved it and when, until the agent is deleted. Entries cannot be edited or deleted by FireFunc’s application or its staff console: the database roles they use can only add entries. Only the role that applies database migrations, which owns the log, keeps that right, because the database needs it to unlink an entry from a workspace or account that is deleted.

8. Access by FireFunc staff

FireFunc staff work through a separate console with its own sign-in. It requires a second factor from an authenticator app on every account, and passwords of at least 14 characters. Access is limited to a small number of named people, and every change they make through the console is recorded in the audit log, which the console cannot edit or delete.

FireFunc stores no repository, and nothing on FireFunc’s servers — the staff console included — reads a repository’s files. FireFunc’s GitHub App does hold GitHub’s Contents permission, read and write, because what FireFunc asks of GitHub needs it: the token a run uses to clone, push and open its pull request, the read-only token a run may hand to GitHub’s own MCP server, and merging a pull request through GitHub. A token made with that App could read a repository, so this rests on what FireFunc’s code does, not on something it could not do.

9. Monitoring and logging

  • FireFunc’s servers write operational logs to Amazon CloudWatch, kept for 30 days. When a web address is written to a log, the values of parameters that can carry a secret — tokens, keys, codes, signatures — are removed first.
  • An unexpected error returned to you carries a request ID for us to trace, never a stack trace.
  • Alarms on function errors and throttling, and on work that could not be processed, notify the team by email.

10. Backups and recovery

The database is backed up automatically, and backups are kept for 7 days. It runs in a single availability zone, so a failure of that zone makes FireFunc unavailable until the database is restored. FireFunc does not yet make an uptime commitment.

An outage of FireFunc does not reach your repositories: they stay on GitHub and on your machines, where FireFunc never held a copy.

11. Reporting a vulnerability

If you find a weakness in FireFunc, write to admin@firefunc.com. The Responsible Disclosure page sets out what is in scope, how to report and how we protect researchers acting in good faith. Our contact details are also published at /.well-known/security.txt.

12. Incidents

If a breach affects customer data, we tell the affected customers without undue delay, and within 72 hours of confirming it, by email to each organization’s owners: what happened, what data was involved, and what we have done and will do about it. The Data Processing Addendum sets out this commitment and what follows it.

13. Compliance status

QuestionAnswer
CertificationsFireFunc holds none of its own. It has no SOC 2 report and no ISO 27001 certificate, and it has not been audited by an independent firm.
The infrastructure layerAmazon Web Services holds its own certifications and audit reports for the data centers and services it runs. They are AWS’s, and they cover AWS’s layer only — not FireFunc’s code or practices.
Security questionnaires

On request, at admin@firefunc.com.

Data processing terms

The Data Processing Addendum is part of the Terms of Service and applies without a separate signature. Our subprocessors are listed on the Subprocessors page.

14. Contact

FireFunc is operated by SoftHawker LLC. For any security question, write to admin@firefunc.com.