LeashIndex Get the report

Guard Team

One policy for every machine, every machine's receipts in one log, and a message when a server you guard widens what it can do — all kept in storage you control. Leash never receives what your agents did.

A flat price, so nobody decides which laptop to leave out

  • One policy for the team, not six files on six laptops
  • Every machine’s receipts in one verifiable log
  • Told when a server you guard widens what it can do
  • Any number of engineers and any number of machines
  • Works with an S3-compatible bucket or any HTTPS address you can read from and write to
  • A machine's own policy file can tighten the team's limits and can never loosen them
$250 a month, or $2,500 a year · renews until you cancel
No account · no seat count
$250 a month → $2,500 a year → The price is the whole amount: any tax is already in it. Checkout is run by Link, by Stripe, so that is the name on your statement, and you can cancel there at any time.

How it works

  1. Write the two files. npx @leashkit/guard team init writes a starter policy.json and team.json. The policy starts as Guard's own defaults, so nothing changes until you edit it. The team file says where the policy is, where receipts go and which webhook takes alerts.
  2. Put them where your team can reach them. Any S3-compatible bucket, or any HTTPS address that accepts GET and PUT.
  3. Each engineer joins once. npx @leashkit/guard team join https://…/team.json. Guard fetches the policy, keeps a copy, and re-reads it every ten minutes while a guarded server is running.
  4. Every decision is written to your storage. Each machine writes its receipts as small files under its own name. Download them and run leash-guard team verify <folder>: an edited receipt or a missing file fails the check.
  5. Run alerts on a schedule. leash-guard team alerts posts to your webhook when the index records a change to a server you guard. Once a day from one machine is enough.

The two files

The team file. The licence line is filled in for you after checkout.

{
  "licence": "…",
  "policy": "https://files.example.com/leash/policy.json",
  "receipts": "https://files.example.com/leash/receipts/",
  "alerts": "https://hooks.example.com/your-webhook"
}

The policy file. default applies to every guarded server; an entry under servers replaces it for that one. The fields are the same ones a local Guard policy takes.

{
  "default": { "caps": { "write": 50, "send": 10, "delete": 5, "pay": 3 }, "approve": ["delete", "pay"] },
  "servers": {
    "payments": { "caps": { "pay": 1 }, "approve": ["pay", "send"], "tools": { "issue_refund": { "block": true } } }
  }
}

For a bucket, use s3://bucket/path for the two locations and add "s3": {"endpoint": "https://…", "region": "…"}. Keys are read from AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY on each machine and are never written to a file. For an HTTPS address that needs a header, set LEASH_TEAM_HEADERS on each machine, for example {"authorization":"Bearer ${env:TEAM_TOKEN}"}.

Manage your subscription

Manage or cancel your subscription. Enter the email you paid with and Stripe sends you a link. From there you can change the card, download invoices and cancel. A cancelled subscription runs to the end of the period already paid for.

The licence is sent only to the address the subscription was bought with, and only if one is active. We do not keep the address you type.

What reaches Leash, and what does not

Good to know

Do we need an account?

No. The purchase is proven by a signed licence that each machine checks for itself. Keep the team file somewhere your team can read it; that is the only thing to hand out.

How do we cancel?

Use manage your subscription above, or the receipt Link, by Stripe emailed you. The licence runs to the end of the period you paid for.

We lost the licence. Now what?

Machines that have joined keep working and renew by themselves. For a new machine, have it emailed to the address you paid with.

Can we get a refund?

Yes. Ask within 14 days of a payment, from the receipt Link sent you. Terms.

What if our storage is down?

Guard keeps enforcing the last policy it fetched, keeps every receipt on the machine, and sends them when the storage answers again. A call is never held up waiting for a write.

What does a machine need before it has fetched the policy?

Nothing: joining fetches it. If a team file names a policy and the machine has never been able to read it, guarded servers decline calls and say why, rather than run on looser local limits.

Is this the same Guard?

Yes. Free Guard is unchanged and stays MIT-licensed. Guard Team is the same package with a licence in the team file. @leashkit/guard.

Does buying change any listing?

No. Buying anything here never changes a listing, a score or a ranking — see Independence.