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-customer
Refund customerVersion 2, published by Sam Rivera
Order The Stripe payment, starting pi_pi_3Q8xLr2eZvKYlo2C
Reasonrequested_by_customer
| Started by | From | When | Status |
|---|---|---|---|
| Support agent | MCP | 09:41 | Awaiting approval |
| Billing app | API | 09:38 | Running |
| Maya Chen | Form | 09:12 | Done in 1.2s |
| Sam Rivera | CLI | 08:55 | Done in 0.9s |
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}]"
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.
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.
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
Orderpi_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
Orderpi_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.
{
"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.
Awaiting approvalrefund-customerasked by Support agent over MCP at 09:41
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.
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
| 3 | Uploaded by Support agent, today | Draft |
| 2 | Published by Sam Rivera, Monday | Runs use this one |
| 1 | Published by Sam Rivera, 2 weeks ago | Earlier |
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.Guidemonthly-reportFinance gets last month's revenue as a CSV file on the 1st.Guidenightly-syncA script copies the day's orders from the shop to the warehouse every night.Guiderefund-customerAn agent refunds an order after a person approves it.Guidealert-on-failureSlack hears when the nightly sync fails, with the error.GuideFree 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.