Arachne docs Home Open app

Learn

Concepts

The nouns Arachne uses everywhere: organisations and roles, projects, findings, advisories, jobs, modes, approvals, the evidence bundle, and plans and usage.

Organisations and roles#

Every person gets a personal organisation at first sign-in. All data (projects, findings, jobs, approvals) belongs to an organisation, and you only ever see the organisation you are acting in. Your role there decides what you can do, in the web app and over MCP alike:

RoleRead projects, findings, jobsConnect reposSubmit fixes (and scan in the app)Approve, open PRs
owner, adminyesyesyesyes
memberyesnoyesno
vieweryesnonono

Over MCP the read tools (advisories, repos_affected, propose_version, job_status) need only read access, so every role can use them; fix_submit needs the submit permission and pr_open the PR permission. See Tools reference.

Projects#

A project is one connected repository plus its settings. Connecting is cheap and read-only; it counts towards your plan's repository limit (3 on Hatchling). Re-saving an already connected repository is not a new connection.

Connecting repositories#

A project comes from any source control: GitHub, GitLab (gitlab.com or a self-hosted host your operator allows), Bitbucket Cloud, Azure DevOps, or Any Git (a public HTTPS clone URL). Each connection records its provider, the normalised repository, whether it is public or private (detected anonymously when you connect) and whether a token is stored.

Step by step, with the token scopes per provider: Quickstart, Connecting repositories.

Findings#

A finding is one vulnerable dependency in one project: package, version, whether it is declared directly, the advisory, a summary, the fix state (fixed with fixed_versions, or no_fix_known), KEV and EPSS, and the advisory's source and licence. Findings come from declared dependencies in your manifests and lockfiles; nothing is installed during a scan. The fix job later checks the installed tree independently.

Advisories, KEV and EPSS#

An advisory is a published vulnerability record (OSV / GitHub Security Advisory ids such as GHSA-j8r2-6x86-q33q, with aliases such as CVE-2023-32681), with affected version ranges per ecosystem and package. Arachne keeps its own copy, licence-filtered and attributed, and enriches CVE aliases with:

The database is served from its last good sync. When sources have not synced for 48 hours the app shows a "data stale" banner.

Jobs#

A job is one sandboxed fix attempt for a project. It has a status (queued, running, done, dead) and, when done, an outcome (verified, needs_approval, failed, unverifiable, no_fix_available, nothing_to_fix). Each job is created with an idempotency key: submitting the same key again returns the existing job and never reserves a second use. Jobs are retried on infrastructure failure up to 3 attempts, then marked dead. See the job lifecycle diagram.

Modes#

Each project stores a mode, one of:

ModeIntended meaningToday
suggestFind and propose; a person drives every fix.The default for every project, and the behaviour you get.
create_with_approvalRun fixes on its own, open PRs only after approval.Stored value only; nothing acts on it yet.
auto_safeOpen PRs for high-confidence fixes automatically.Stored value only. Gated to plans with the auto_safe feature (Warden, King).

Note

There is no screen or API route to change a project's mode yet, and no code path opens a PR without a human approval. Whatever the stored mode, every PR today requires an explicit approval.

Approvals#

An approval is a pending human decision attached to a job. There are two kinds:

Approvals are decided in the web app by an owner or admin. No MCP tool can approve; pr_open refuses with not_approved until someone has.

The evidence bundle#

Every finished job keeps its evidence, and the PR body is rendered from it:

Plans and usage#

Plans belong to a person, not an organisation, so creating more organisations never raises a limit. A use is one opened pull request (1 PR = 1 use): reserved when a fix is submitted, consumed when the PR opens, released otherwise. Allowances reset at 00:00 UTC on the first of each month.

PlanUses / monthReposSeatsPast the allowancePrice
Hatchling331blockedfree
Weaver25101metered overagenot set
Warden1005010metered overagenot set
King50020050metered overagenot set

When you run out, the refusal (quota_exhausted, or payments_not_enabled on a metered plan while payments are off) carries resets_at and three options:

Your usage is shared across all of your accounts that use the same verified email or identity, so a second sign-up does not reset it.