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.
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.
← Scripts
Refund a customer v2
Refunds an order's payment through Stripe.
refund-customer
Run
Runs version 2, the published one, with these inputs.
Order pi_3Q8xLr2eZvKYlo2C
Reason requested_by_customer
Recent runs
Every run, from the app, the API, the command line, agents, schedules and triggers.
| Started | Status | Via |
|---|---|---|
| 9:41 AM v2 | Awaiting approval | Agent · token Claude |
| 9:38 AM v2 | Running | API · key billing |
| 9:12 AM v2 | Succeeded | App |
| 8:55 AM v2 | Succeeded | CLI |
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.
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"]})) $ 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}]"
Paste this prompt into Claude Code or Codex. It reads Reminix's agent skill and lists your scripts. Pick one, and it prepares it, tests a draft, and publishes only when you say so.
Read https://reminix.com/docs/skill/SKILL.md and follow it. List the scripts in this project that people run by hand, one line each, and wait for me to pick one to publish to Reminix.
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.
Refund customer Support team only
Order pi_3Q8xLr2eZvKYlo2C
await reminix.run("refund-customer", { orderId: invoice.paymentIntent, reason: "requested_by_customer", });
{
"name": "refund_customer",
"inputSchema": {
"properties": {
"orderId": { "type": "string" },
"reason": { "type": "string" }
}
}
} $ reminix run refund-customer \ --log --input \ '{"orderId":"pi_3Q8xLr2eZvKYlo2C"}'
When a run of nightly-sync fails, run alert-on-failure with its runId and error.
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
Order pi_3Q8xLr2eZvKYlo2C
const run = await reminix.run("refund-customer", { orderId: invoice.paymentIntent, reason: "requested_by_customer", });
{
"name": "refund_customer",
"inputSchema": {
"type": "object",
"properties": {
"orderId": { "type": "string" },
"reason": { "type": "string" }
}
}
} $ reminix run refund-customer \ --input '{"orderId":"pi_3Q8xLr2eZvKYlo2C"}' --log
Another of the team's scripts, on a timetable.
A script that runs when something happens.
When a run of nightly-sync fails, run alert-on-failure with its runId and error.
Slack, #ops: The nightly sync failed. Error: warehouse API returned 503
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. The script can read a key only if you turn that on for it.
{
"command": "python refund.py {orderId} [--reason {reason}]",
"hosts": ["api.stripe.com"],
"secrets": {
"STRIPE_KEY": {
"host": "api.stripe.com",
"header": "Authorization",
"format": "Bearer {secret}"
}
}
} POST api.stripe.com/v1/refunds 200 key added GET api.example.net/collect blocked, not in this version's hosts
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.
Approval request
Run a script Waiting for a decision
Support agent asks, in Acme Ops.
What will happen
Run refund-customer (version 2) in production.
Inputs
{
"orderId": "pi_3Q8xLr2eZvKYlo2C",
"reason": "requested_by_customer"
} Why
The customer asked for a refund; the parcel was lost.
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. The run's record stays; its log and files are kept 7 days on Free, 30 on Pro and 90 on Business.
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
refund-customer v2 Succeeded
Output
{
"id": "re_3Q8xM02eZvKY",
"amount": 4000
} Log
POST api.stripe.com/v1/refunds 200
Each of these has a guide in the docs. Using something else today? See how Reminix compares.
unlock-account Support unlocks a customer who was locked out, from a form. Guide monthly-report Finance gets last month's revenue as a CSV file on the 1st. Guide nightly-sync A script copies the day's orders from the shop to the warehouse every night. Guide refund-customer An agent refunds an order after a person approves it. Guide alert-on-failure Slack hears when the nightly sync fails, with the error. Guide Free for up to 3 authors (people who upload or publish scripts), 10 more people who run them, and 1,000 runs a month; Pro is $20 a month per workspace during the beta. No card needed.