Releases
Download the latest builds and see what changed in each version.
tis-agent 0.8.1
Fixes
- The default platform URL is
https://api.scrany.net(washttps://tis.cap-net.cz). The platform moved to its own hosts in v1.44.0 and serves/api/v1on the API host too (v1.44.2), so the agent works unchanged. Existing configurations withtis.cap-net.czkeep working while it stays an alias; setplatform.url(orTIS_URL) tohttps://api.scrany.netwhen convenient. - Documentation links point to https://developers.scrany.net/agent/.
Documentation: https://developers.scrany.net/agent/configuration/
Packages
Each with its .sha256 in the package registry.
tis-agent 0.8.0
Features
- fail2ban (#6 (closed), !18 (merged)):
"fail2ban": { "source": "fw-01-fail2ban", "hits": true }reads fail2ban's log – no change to fail2ban – and every minute sends the new bans ([<jail>] Ban <ip>;Restore Ban,UnbanandFounddon't count): as indicators imported per jail into the import-only source, taggedfail2ban,jail:<jail>, and as hits for the IPs the TIS lists already have (listedOnly, platform v1.43.0+). Hits go before the import, which waits for them; what couldn't be sent is kept for 24 h.tis-agent hits -dry-runlists the new bans, Report hits now sends them. - Log lines with Python logging's time (
2026-10-24 10:15:01,234) get their own time.
Other
- The e2e test runs against the platform image
tis/tis-platform:v1.43.0and checks fail2ban (tags, hits only for listed IPs, restored bans skipped).
Documentation: https://docs.tis.cnt.cz/agent/configuration/#fail2ban
Packages
Each with its .sha256 in the package registry.
tis-agent 0.7.0
Features
- Hits from NFLOG (#3 (closed), !17 (merged)), Linux:
"hits": { "nflog": { "group": 100, "targets": ["tis_v4", "tis_v6"] } }counts the packets nftables rules log to a netlink group (ip saddr @tis_v4 log group 100 drop), each for the element of the listednftables-settargets its source – or else destination – address falls in, in the hour the kernel logged it. Next to the element counters: nothing is lost when a set is reloaded and the sets need nocounter. The agent binds the group itself (128-byte copies); a full receive buffer is warned about once a minute. The elements are re-read everyreload_interval(5m); counts are reported everyintervallike the divert's.
Other
- The documented system-test command (real nft and kernel in a container) runs the packages one at a time (
-p 1) – they share the network namespace.
Documentation: https://docs.tis.cnt.cz/agent/configuration/#nflog
Packages
Each with its .sha256 in the package registry.
tis-agent 0.6.0
Features
- Central configuration (#5 (closed), !16 (merged)): with
"managed": truethe pull jobs come from the platform – the template of the customer's token and the device's own jobs, edited on the Devices page – and replace the local pull jobs; targets, push jobs and hit counting stay local. A central job sets only a name, a schedule and what to pull into which of the device's targets – never a command, a file or a URL (any other field is refused). Central jobs go through the same checks as the file; valid ones are saved tocentral.savedin the state directory and the jobs restart with them, invalid ones are refused as a whole (the running jobs stay, the reason shows on the platform). Before the first central configuration, or with none, the local pull jobs run. Needs platform v1.42.0+. healthchecks: healthcheck URLs of central jobs, by job name (the platform never sets URLs).- Commands: the platform can ask to pull now (a job or all) and report hits now (logs and nftables sets); the outcome goes back with the next check-in.
tis-agent statusmarks central jobs with*,checksays which central configuration runs,runtakes central jobs.
Other
- The e2e test runs against the platform image
tis/tis-platform:v1.42.0and checks a managed daemon (template applied, pull command acknowledged).
Documentation: https://docs.tis.cnt.cz/agent/configuration/#managed
Packages
Each with its .sha256 in the package registry.
tis-agent 0.5.0
Features
- Check-in with the platform (#4 (closed), !15 (merged)): the daemon reports its state to
POST /api/v1/agent/checkinright after it starts, then as often as the platform asks (60 s by default) and shortly after a scheduled job ran – version, host (hostname, OS, release, arch, uptime), a SHA-256 of the configuration, the targets (names and types only) and per job its list or source, schedule, last and next run, result, error, failed runs in a row and entries. The device shows up on the platform's Devices page, which marks it offline after 5 minutes without a check-in and a job failing after 3 failed runs in a row. Needs platform v1.41.0+ and theagent/*right (in the guest and user defaults); an older platform answers 404, retried hourly."checkin": { "enabled": false }turns it off. - The job state counts failed runs in a row.
- Durations print as written:
15m, not15m0s(also intis-agent status).
Other
- The e2e test runs against the platform image
tis/tis-platform:v1.41.0and checks the check-in.
Documentation: https://docs.tis.cnt.cz/agent/configuration/#checkin
Packages
Each with its .sha256 in the package registry.
tis-agent 0.4.0
Features
- Hits from nftables set counters (!14 (merged)):
"hits": { "nftables": ["tis_v4", "tis_v6"] }reads the per-element counters of the listednftables-settargets everyintervaland reports what they grew by, for the listed address or network – no logging needed. Sets the agent creates getcounter; a set declared innftables.confneedscounter;. The counters read are kept until a report is accepted, like log positions. - nftables-set updates keep counters (!14 (merged)): a filled set gets only the changes (deleted and added elements) in one transaction; a failed update falls back to flush and fill.
- Deployment counts in the log (!11 (merged)):
deployed 20125 entries to nftables set inet filter tis_v4 (+14 -14), also in dry runs.
Other
- The e2e test runs against the platform image
tis/tis-platform:v1.40.1(!12 (merged), !13 (merged)).
Documentation: https://docs.tis.cnt.cz/agent/configuration/#nftables-sets
Packages
Each with its .sha256 in the package registry.
tis-agent 0.3.0
Features
- Backoff after failed runs (!10 (merged)): a scheduled job waits longer after failures in a row – the first failure keeps the interval, then 2×, 4×, …
everyup to an hour (oreverywhen it is longer); a success brings the interval back. The log says when the next run comes. A run that finds the job busy (atis-agent runof it) doesn't count. The passes over the hit logs back off the same way. Retry-After(!10 (merged)): a429(the platform's export limit per token) or503withRetry-Afteris retried after the time asked for, up to a minute; a longer one ends the attempts and the backoff takes over.
This completes phase 1 of the agent (#2 (closed)).
Packages
Each with its .sha256 in the package registry.
tis-agent 0.2.0
Features
-
nftables-set target (!9 (merged)): an nftables set (Linux) replaced in one
nft -ftransaction – rules using it see the old or the new list. A missing set is created with its table; a set declared innftables.confkeeps its definition; a set emptied by a reload of the ruleset is noticed and loaded again. Networks inside others are left out, as interval sets refuse overlaps. One family per set: the job'stypeisipv4oripv6."targets": { "tis_v4": { "type": "nftables-set", "table": "filter", "set": "tis_v4" } } -
The Linux sample configuration (
/usr/share/doc/tis-agent/examples/config.json) uses an nftables set; the deb suggestsnftables.
Documentation: https://docs.tis.cnt.cz/agent/configuration/#firewall-tables
Packages
Each with its .sha256 in the package registry.
tis-agent 0.1.0
The first release with jobs – the agent replaces tis-pull.sh, tis-push.sh, tis-hits.sh and tis-cron.sh of tis-scripts. Documentation: https://docs.tis.cnt.cz/agent/ (with a migration guide from tis-cron.d).
Features
- Pull jobs (!3 (merged)): exports deployed to files, BIND (zone/rpz), Unbound and dnsmasq configuration, ipfw and pf tables and ipsets – checked, replaced atomically, reloaded and rolled back; ETags skip unchanged lists;
run,check,statuscommands with the exit codes oftis-pull.sh. - Push jobs (!4 (merged)): a file, a URL or a command's output sent to an import-only source when it changed and at least once a day (
refresh), so the indicators don't expire. - Hits from logs (!5 (merged)): the BIND RPZ log and the ipfw log counted incrementally, per hour of the line's timestamp, positions kept until the report is accepted;
tis-agent hits [-dry-run]. The ipfw divert socket as before. - Healthchecks (!6 (merged)): Healthchecks.io-style pings around each run with the run's output.
- Packages (!7 (merged)): FreeBSD
.pkgwith rc.d, Debian/Ubuntu.deb(amd64, arm64) with a systemd unit. - End-to-end test in CI against the platform image (!8 (merged)).
Breaking changes
The configuration has a new structure (platform, targets, jobs, hits); the flat keys, flags and tis_agent_* rc.conf variables of the earlier hit reporter are gone. See the configuration reference.
Packages
Each with its .sha256 in the package registry.