AI writes the script.Now your team can run it, safely.

$ npm install -g @reminix/cli

Publish a script and your team gets a form for it. Your software and your agents can run it too, with a person approving where you want one.

Start freeRead the quickstart

  • Every run on its own machineFresh and isolated, and removed when the run ends.
  • Keys stay out of the codeReminix adds a key only to requests to the hosts you allow.
  • Every run on recordWho ran it, from where, with which inputs, and what happened.
Acme Ops

Scripts / refund-customer

Refund customerVersion 2, published by Sam Rivera

Order The Stripe payment, starting pi_pi_3Q8xLr2eZvKYlo2C

Reasonrequested_by_customer

Run
Started byFromWhenStatus
Support agentMCP09:41Awaiting approval
Billing appAPI09:38Running
Maya ChenForm09:12Done in 1.2s
Sam RiveraCLI08:55Done in 0.9s

It starts as a script on your laptop

Python, shell or Node, as it is. One command publishes the folder, and the parts in braces become inputs. Files the script writes come back as downloads.

The five-minute quickstart

refund.py
import argparse, json, requests

parser = argparse.ArgumentParser()
parser.add_argument("order_id")
parser.add_argument("--reason", default="requested_by_customer")
args = parser.parse_args()

# No key here: Reminix adds it to requests to api.stripe.com.
refund = requests.post(
    "https://api.stripe.com/v1/refunds",
    data={"payment_intent": args.order_id, "reason": args.reason},
).json()
print(json.dumps({"id": refund["id"], "amount": refund["amount"]}))
~/scripts/refund
$ ls
refund.py  requirements.txt
$ python refund.py pi_3Q8xLr2eZvKYlo2C
# works, but only here, and only for you

$ reminix login
$ reminix publish \
    --command "python refund.py {orderId} [--reason {reason}]"

Your coding agent can do the porting

Connect Claude Code or Codex to Reminix's MCP server and paste a prompt like this one. It writes the script, tests a draft, and publishes only when you say so.

How it works, step by step

Prompt

Publish scripts/refund.py to Reminix as refund-customer. Search the team's scripts first in case one exists. Describe its inputs, write a short README, keep every secret out of the code and declare only the hosts it calls. Make agents' runs wait for approval. Upload it as a draft, test-run it, show me the result, and ask me before publishing.

People run it without the code

Each way checks the same inputs and shows up in the same list of runs. Share a script with your whole workspace or only with certain teams. Other members don't see it at all, not even through the API.

Form for your team

Refund customer Support team only

Orderpi_3Q8xLr2eZvKYlo2C

Run

API for your software

await reminix.run("refund-customer", {
  orderId: invoice.paymentIntent,
  reason: "requested_by_customer",
});

MCP for your agents

{
  "name": "refund_customer",
  "inputSchema": {
    "properties": {
      "orderId": { "type": "string" },
      "reason": { "type": "string" }
    }
  }
}

Command line from any laptop

$ reminix run refund-customer \
    --log --input \
    '{"orderId":"pi_3Q8xLr2eZvKYlo2C"}'

Schedule nightly-sync

Runs
Every night at 02:00
Timezone
Europe/London
Last run
Done in 4m 12s

Trigger alert-on-failure

When a run of nightly-sync fails, run alert-on-failure with its runId and error.

People run it without the code

Support gets a form. Your billing app calls the API. Claude or Codex sees it as a tool. Other scripts run on a timetable, or when something happens. Each one checks the same inputs and shows up in the same list of runs.

Share a script with your whole workspace or only with certain teams. Other members don't see it at all, not even through the API.

Refund customer Support team only

Orderpi_3Q8xLr2eZvKYlo2C

Run

The key never reaches the script

You save the Stripe key in Reminix once. When the script calls api.stripe.com, Reminix adds the key to that request on the way out. It blocks any host the script didn't list, and every request lands in the run's log.

How Reminix handles security

reminix.json (optional)
{
  "command": "python refund.py {orderId} [--reason {reason}]",
  "hosts": ["api.stripe.com"],
  "secrets": {
    "STRIPE_KEY": {
      "host": "api.stripe.com",
      "header": "Authorization",
      "format": "Bearer {secret}"
    }
  }
}
STRIPE_KEY••••••••••••Sent only to api.stripe.com, as the Authorization headerCan't be viewed again
Run 4821, network
POST api.stripe.com/v1/refunds      200   key added
GET  api.example.net/collect        blocked, not in this version's hosts

Agents ask before they act

Set a script so runs started by an AI agent wait for an owner or admin. The person sees exactly what the agent asked for, then approves or denies it. On Business, every run can wait for approval.

Set up approvals

Approvals

Awaiting approvalrefund-customerasked by Support agent over MCP at 09:41

orderId
pi_3Q8xLr2eZvKYlo2C
reason
requested_by_customer
version
2, published by Sam Rivera

ApproveDeny

Every run is on record

Who ran it, from where, with which inputs, what it printed and any files it wrote. If a run prints a key it had access to, the log shows [secret] instead.

Every change is a new version, and runs keep using the published one until someone publishes another. Rolling back is publishing the one before.

Runs / 4819

Done in 1.2srefund-customer, version 2, run by Maya Chen from the form at 09:12

Output

{ "id": "re_3Q8xM02eZvKY", "amount": 4000 }

Log

POST api.stripe.com/v1/refunds 200

Versions

3Uploaded by Support agent, todayDraft
2Published by Sam Rivera, MondayRuns use this one
1Published by Sam Rivera, 2 weeks agoEarlier

What teams publish first

Each of these has a guide in the docs. Using something else today? See how Reminix compares.

  • unlock-accountSupport unlocks a customer who was locked out, from a form.Guide
  • monthly-reportFinance gets last month's revenue as a CSV file on the 1st.Guide
  • nightly-syncA script copies the day's orders from the shop to the warehouse every night.Guide
  • refund-customerAn agent refunds an order after a person approves it.Guide
  • alert-on-failureSlack hears when the nightly sync fails, with the error.Guide

Start with the free plan

Free for up to 3 authors and 1,000 runs a month; Pro is $20 a month per workspace during the beta. People who only run scripts are included. No card needed.

Start freeCompare plansTalk to us