Say it, Gatesys sets it up
Describe a watch, a tunnel or a host in one sentence. Rules read it, a model helps only with placeholders, and code checks and enforces every value.
Pro
Farabi and every AI feature are part of Gatesys Pro — free for 3 months, then $20 a year. See plans
Watches, tunnels and hosts can be described instead of filled in. You write one sentence; code turns it into a draft you can check, and one click starts or saves it.
Included in every plan
Rules read your sentences on every plan, with no model. A model helps with sentences the rules cannot fully read only with Gatesys Pro and the assistant on.
Where you can say it
| Where | Examples |
|---|---|
| Watch in the terminal header | tell me when the migration finishes or if any ERROR shows up, ping me if disk stays above 90% for 2 min, migration bitince ya da hata çıkarsa haber ver |
| Describe a tunnel in Port forwarding | reach postgres on db-primary, 10.0.3.40:6379 through edge-bastion, socks through edge-bastion, a pasted ssh -L, -R or -D command, db-primary’daki postgres’e bağlan |
| The Hosts search box | add 10.0.3.4 as deploy behind edge-bastion, a pasted ssh -J edge-bastion -p 2223 [email protected], an ssh:// link |
Sentences work in English, Turkish and Portuguese, such as conectar ao postgres no db-prod. Nothing past 300 characters is read.
AI compiles, code enforces
A model that types commands asks you to trust what it typed. These features go the other way round: a model may turn what you meant into a small typed draft, and code does everything that matters.
- You say it, in one sentence.
- Rules read it first, on this computer. Only when they cannot place every word, and the assistant is on, is a model asked, for one small JSON object. The sentence’s hosts, addresses, paths,
user@hostlogins, ports and quotes (and for a tunnel or host, every number) are replaced by placeholders on every runtime, local ones included. The model never sees the terminal, the host’s facts or the names of your saved hosts. - The reply is inert data. Code checks it field by field. A condition your sentence never asked for is offered unticked, a number it changed is put back, each placeholder may fill only one field of a kind that field accepts, and a value the model wrote itself is dropped.
- Code reads it back in its own words, with where every value came from and a footer saying who read the sentence and whether anything left the computer.
- One click, Start watching, Create & start or Save, and the main process checks the draft again rather than trusting the window. A watch the rules would now read differently does not start and comes back to you. A tunnel is resolved afresh, so a port taken a moment ago is swapped and the card says so. A host is checked field by field as it is saved.
- Enforced with no model. From the click on, the watch engine, the forward and its test connection, and the host save run without any model, so none can change its mind mid-run.
- A receipt in the audit log: what started, from which sentence (with secrets masked) and who read it.
With no model, a slow or failed one, or the assistant off, the rules’ draft stands, and the footer says so.
What a model may decide
| Feature | A model may | Code decides and enforces |
|---|---|---|
| Watchers | Read a sentence the rules could not place into conditions | The conditions and limits, phrase matching, when a command finished or asks for input, metric thresholds, expiry, every alert |
| Tunnels and hosts | Say which placeholder is the host, service, port or login | The host (exact match or Did you mean), the local port, the 127.0.0.1 bind, read-only hints, no remote tunnel from a sentence, the test connection |
| Farabi | Explain, and suggest commands | Each command’s risk rating and confirm, the impact line and its confirm, what reaches the shell (only on Insert or Run) |
| Hop Doctor | Phrase the report (Explain) | The checks, the cause, the fixes and the patch each one applies |
| Host facts | Rank measured changes, citing them (Explain) | What is read, what changed, the citation check, the timing ranking when no model helps |
| Safe Change | Name set or unset of sshd keywords; summarise a diff, advisory only | The file’s kind, which operations survive and how they are written, the server’s check, the findings, the buttons offered, the backup, the install, the safety net and Keep |
Where each value came from
Every value on a draft card carries its source:
| Label | Meaning |
|---|---|
| you said | Taken from your sentence |
| saved host | Matched exactly to one of your hosts |
| catalog | A well-known service’s default, such as PostgreSQL’s 5432 |
| measured | What the host was measured listening on, with its age |
| picked by Gatesys | Chosen by code, such as a free local port |
| model: check it | Placed by a model. Check it before you click |
Watch conditions also show preset or you for ones you picked or added.
The footer says who read the sentence, for example:
- The assistant is off — read by rules
- Read by qwen3:8b · local endpoint · 2 values masked
- sent your sentence with 2 values masked to Anthropic
Secrets never survive the first step
Before anything else reads a setup sentence, the word after password, passwd, pass, pw, passphrase, secret or token (and Turkish şifre and parola), the argument of sshpass -p, and the password in an ssh:// link become [redacted]. The draft, the card, the audit log and any model see only that cleaned sentence. You are asked for passwords on first connect, as always.
Tunnels from a sentence
- Hosts match exactly, by name, address or
user@address. Anything close shows Did you mean db-primary? with Use db-primary. - Local ports are picked by code: data services offset by 10000 (15432, 16379), web ports under 1024 moved up by 8000, SOCKS from 1080, and the last port remembered per host and service.
- Tunnels listen on 127.0.0.1 only, and no port probe ever binds a wildcard address.
- Remote tunnels come only from a pasted
ssh -R. Free text never makes one. - Create & start proves it with one test connection through the tunnel before it says Running. A PostgreSQL server logs that test as one “incomplete startup packet” line.
The details are in Port forwarding.
Hosts from a sentence or command
- A pasted command is read by its own parser, which lists what it did not keep:
StrictHostKeyChecking=no(host keys are always checked), a remote command, agent and X11 forwarding, a wide bind. - Add as a host opens the host editor prefilled. Nothing is saved until you click Save.
- Questions, firewall rules,
kubectl port-forwardand commands meant for a server are not setup, and the app says so.
Receipts
Every tunnel start and stop, every host added this way and every watch is written to the audit log with its host. A start and a new host also carry the cleaned sentence, never the raw one, and who read it: read by rules, or the model and where it ran. The CSV export never lets a cell run as a spreadsheet formula.
Something unclear or wrong? Tell us.