Safe terminal text tools

Your terminal believes the file. You shouldn't.

Bytes from a log, a paste, or a download can hide text, forge your prompt, disguise what a character really is, and on a vulnerable terminal run commands. "Lie" undersells it: cat does not just believe the file, it obeys it. These tools show you what is actually there.

reveal hidden Unicode / neutralize escape sequences / sanitize untrusted strings

What cat shows you

It renders the bytes as instructions. A control character reorders the line, an escape erases text or repaints your prompt, a look-alike letter passes for another. cat trusts the file completely.

What's really there

The same bytes, revealed or rendered inert. Every suspicious codepoint named, every escape neutralized, every untrusted value stripped before it reaches your screen, or your logs.

How to reproduce these: each card below shows the exact command. Run the safe tool on any file and you see the same thing. Unlike the diff corpus, where every trick is a real git branch you can git diff master..<branch>, terminal and paste attacks are techniques, not stored fixtures, so they are demonstrated by the commands shown here and by the live demo on the paste page.

The live terminal

The tools below inspect one file when you remember to run them. secure-terminal is the display itself: a terminal that renders hostile output inert as it arrives, for every command, paste and log line, with nothing to run first.

cat vs secure-terminal

Every byte inert, by default

A normal terminal obeys the bytes: an escape repaints the prompt or forges the title, a bidi control reorders a line, a hidden character rides along unseen. secure-terminal parses no escape sequences at all -- colour is clamped legible, cursor and screen control are neutralized, and every non-ASCII byte is named <U+XXXX> or shown as an inert risk-tinted box.

any terminal
$ cat deploy.log
Deploying to ⁧production⁩... done

# reads clean; an isolate reordered it and an OSC forged the title
secure-terminal
$ cat deploy.log
Deploying to [U+2067]production[U+2069]... done
! blocked OSC title escape

The catch: the per-file tools are opt-in -- you have to suspect a file first. secure-terminal makes the safe view the default for the whole session, and an automated test asserts it writes zero bytes back to any query. The measured, side-by-side comparison against ten emulators is on secure-terminal's comparison page.

Reveal

Hidden, invisible and look-alike characters are the whole point of a Trojan-Source attack, and cat never mentions them.

secure-terminal does this live: its Reveal mode shows every non-ASCII byte as a <U+XXXX> badge as output arrives, so you see what a program printed without re-running anything. The unicode-show command below is the scriptable, one-file-at-a-time counterpart.

cat vs unicode-show

See the characters, not the story

unicode-show flags every byte outside printable ASCII, every control character, trailing whitespace and a missing final newline: with line number, [U+XXXX] marker, name and category.

cat
$ cat withdraw.py
# Subtract funds from the account, then ⁧refund the user⁩

# reads clean; an isolate char quietly reorders it
unicode-show
$ unicode-show withdraw.py
withdraw.py:1: # Subtract funds ... then [U+2067]refund the user
   -> U+2067 RIGHT-TO-LEFT ISOLATE (Cf)
$ echo $?
1

The catch: the exit code reports it too: 0 clean, 1 suspicious, 2 error (unreadable or undecodable). Scriptable, not just visible. (docs)

unicode-show run on a file named auth.py that reads like ordinary code. Each hidden character is flagged inline as a red bracketed codepoint such as [U+202E], and annotated on the next line in cyan with its codepoint, official name and category (RIGHT-TO-LEFT OVERRIDE, CYRILLIC SMALL LETTER A, ZERO WIDTH SPACE, NO-BREAK SPACE, SPACE), plus a note that the final newline is missing.
The real tool in a terminal: run on a file that reads clean, unicode-show names and colors every hidden character right where it hides.

Find

Before you can reveal a hidden character, you have to know which file it is in. unicode-show inspects one file; grep-find-unicode-wrapper hunts a whole tree.

grep vs grep-find-unicode-wrapper

Which file is hiding it?

A grep wrapper that walks files and folders for non-ASCII and suspicious Unicode, so you can audit an entire repository for injected backdoors, not just the one file you already suspect.

grep
$ grep --recursive "validate" src/
src/clean.js:function ok(){ return validate(true) }
# grep matched the honest file and skipped
# the backdoored calls: the byte you read as
# "a" is a Cyrillic look-alike.
grep-find-unicode-wrapper
$ grep-find-unicode-wrapper --recursive src/
src/auth.js
src/pay.py
$ echo $?
0   # grep convention: 0 == matches found

The catch: the flagged files look ordinary, and the wrapper reports file names, not lines. Each named file hides a non-ASCII byte. The exit code follows grep, not unicode-show: 0 means it found suspicious Unicode, non-zero means the tree is clean. Pass each flagged file to unicode-show to name the exact codepoint. (docs)

A terminal where plain grep for validate matches only src/clean.js and silently skips the backdoored files, while grep-find-unicode-wrapper --recursive src/ names src/auth.js and src/pay.py with exit 0, and unicode-show src/auth.js identifies the hidden character as U+0430 Cyrillic small letter a.
The real tools: a plain grep for the word you read matches the honest file and skips the backdoored ones, grep-find-unicode-wrapper names the files that hide a look-alike, and unicode-show pins the exact codepoint.

Scan everything

Unicode is not the only way a file reprograms the tool that opens it. text-safety-scan runs every safety check in one pass.

text-safety-scan / text-safety-scan-find

One command, every check

A single run fires all configured plugins: today unicode-show plus modeline-show, which flags Vim/Emacs modelines: a comment like # vim: ... that can reconfigure (historically, execute code in) the editor that opens the file. text-safety-scan-find walks a whole tree, with recursion and pruning under your control via plain find expressions.

one check at a time
$ unicode-show file      # unicode only

# but did you also check for editor
# modelines? and every file in the repo?
text-safety-scan
$ text-safety-scan ./changelog
# runs unicode-show AND modeline-show
$ echo $?
1   # 0 clean, 1 finding, 2 hard error
$ text-safety-scan-find /repo \
      -not -path '*/.git/*'   # whole tree

The catch: it is an auditing tool, not a race-proof guard. Run it on a tree the attacker cannot write to during the scan. Modelines are not hypothetical: opening a crafted file has meant code execution (CVE-2019-12735). (docs)

A terminal running text-safety-scan on ./repo/changelog. One pass fires both plugins: unicode-show names a hidden U+0430 Cyrillic character, and modeline-show warns that a Vim modeline was found, quoting the line. text-safety-scan then reports FAIL with two findings, and echo $? prints 1.
The real tool: a single text-safety-scan run fires every plugin at once, here catching both a hidden Unicode character and a Vim modeline, and returns 1 (0 clean, 1 finding, 2 hard error). text-safety-scan-find runs the same checks over a whole tree.

Neutralize

Kicksecure's docs put it plainly: "Dangerous terminal control codes can change what you see, hide text, alter the prompt, or otherwise mislead you." stcat is cat that refuses to be fooled.

secure-terminal applies the same idea to a whole session: in its default line mode escape sequences in program output are neutralized and only safe colours are kept, so nothing a program prints can repaint the screen or reach a line you have already scrolled past. It is not identical to stcat: it honours four edits clamped to the line being written so a shell's line editor works, which stcat -- a one-shot filter with no line editor to serve -- neutralizes outright.

cat vs stcat

Colors survive. Cursor tricks don't.

An escape sequence can erase a line and repaint it. To cat that means "hide the failure". stcat turns the ESC byte into an inert _ and keeps only safe color codes.

cat
$ cat build.log
[ ok ] all checks passed

# an escape erased the FAILED line before it printed
stcat
$ stcat build.log
FAILED: auth bypass_[2K_[ ok ] all checks passed

The catch: the erase (ESC[2K) and the carriage return are neutralized to _, so the hidden FAILED line is right there in plain sight. That is stcat specifically: it renders a byte stream and applies no line editing. A live terminal, secure-terminal included, honours the erase within the current line, so use stcat when you need the byte-exact record.

A terminal comparing cat and stcat on build.log. cat shows three green [ ok ] lines including all checks passed, hiding the failure. stcat reveals the red FAILED: auth bypass in login() line, with the erase and carriage return neutralized to _[2K_ and the green [ ok ] all checks passed kept.
The real tool: cat replays the escape and shows only the green pass, while stcat neutralizes the erase and carriage return to _, keeps the colors, and surfaces the hidden red FAILED line.

Sanitize

Reading is one thing; embedding an untrusted value into your own output is another. A value dropped into a log line or an HTML tag can forge structure.

sanitize-string

Make a value safe to put anywhere

sanitize-string strips terminal escapes and HTML markup, and caps the length. Safe for a terminal and for HTML tag contents (not attributes).

raw
$ printf '[INFO] name: %s\n' "$name"
[INFO] name: <script>alert(1)</script>

# and the value also recolored the whole log
sanitize-string
$ printf '[INFO] name: %s\n' \
    "$(sanitize-string nolimit "$name")"
[INFO] name: alert(1)

$ sanitize-string nolimit '<b>Hello</b>'   -> Hello
$ sanitize-string 10 'This is a long...'  -> This is a 

The catch: it runs strip-markup + stdisplay twice, so neither markup nor escapes can smuggle the other past the sanitizer. (docs)

A terminal showing sanitize-string. An untrusted value with an embedded escape prints as red DROP TABLE users when echoed raw; after sanitize-string the escape is inert (shown as _[31m...) and no longer recolors. sanitize-string on a script tag returns plain alert(1) with tags stripped, and sanitize-string 12 caps a long value to leak: secret.
The real tool: an escape in an untrusted value recolors a raw log line (red), but the sanitized value is inert; HTML markup is stripped and the length is capped.

One file, every trick

The cards above isolate one class each. Real hostile output stacks them. Here is one safe, self-labeling board that carries every display class at once -- download it, cat it, and x-ray it right here. It mirrors the combined board on the secure-terminal comparison.

download + live x-ray

The combined board

A single file that paints a full-screen "what you see vs what is there" table: a hijacked window title, a DEC line-drawing frame, a homoglyph example.com, a bidi report exe.doc, zero-width and invisible bytes, combining marks, fullwidth look-alikes, a control-byte repaint, an SGR-hidden string, an OSC 8 link whose text is not its target, and a ?1049h alternate-screen switch -- with honest Greek as the non-attack contrast.

Safe to run. It is display-only: it sets the window title and switches to the alternate screen (both undone by reset), and copies, types and runs nothing. Its first bytes are a plaintext warning; it runs on the alternate screen so your scrollback is preserved. The dangerous classes (clipboard, notification, input reflection, RCE) are deliberately NOT in a cat-able file.

Download the board (2.4 KB .txt) -- then read it SAFELY before you cat it, or paste it into the x-ray tool: send to x-ray tool

curl -O https://output-lies.github.io/demos/terminal-attack-demo-WARNING-display-only-safe.txt unicode-show terminal-attack-demo-WARNING-display-only-safe.txt # names every hidden byte
what cat shows
$ cat terminal-attack-demo...txt
exаmple.com
goοgle.com
rnicrosoft.com
report ‮cod.exe‬
veri​fied
balance
ḥ́̀̈ẹ́̀̈llo
ABC
Ελληνικά
# reads clean: every trick invisible or disguised
what is really there
# each hidden/disguised codepoint, named (the same analyzer the x-ray tool runs):
Homoglyph (Cyrillic)  ex[U+0430]mple.com
Homoglyph (Greek)     go[U+03BF]gle.com
ASCII look-alike      rnicrosoft.com  (pure ASCII -- rn reads as m)
Bidi override (RTL)   report [U+202E]cod.exe[U+202C]
Zero-width space      veri[U+200B]fied
Invisible / BOM       [U+FEFF]balance
Combining (Zalgo)     h[U+0301][U+0300][U+0323][U+0308]e[U+0301][U+0300][U+0323][U+0308]llo
Fullwidth forms       [U+FF21][U+FF22][U+FF23]
Honest foreign (Greek)[U+0395][U+03BB][U+03BB][U+03B7][U+03BD][U+03B9][U+03BA][U+03AC]  NOT an attack

The catch: the x-ray on the right is the same analyzer the x-ray tool runs -- every non-ASCII byte named by codepoint, live in your browser. The escape-sequence classes (title, charset, OSC 8, alt-screen) are not codepoints; see the hyperlink and alt-screen demos below. Feed the whole file to secure-terminal and it neutralizes the entire set in one frame.

A terminal after cat-ing the combined board: a catchy full-screen table renders, the window title bar is hijacked to 'terminal attack-class demo (safe)', and each row shows a live example of an attack class -- example.com, google.com, report exe.doc, verified, balance, hello, ABC, Greek text -- with every trick either invisible or disguised as ordinary text.
What cat shows: the board renders as a catchy full-screen table and the window title is hijacked -- every trick hidden or disguised. The x-ray beside it, and the safe tools, expose them. (secure-terminal naming every codepoint.)
OSC 8 hyperlink spoof

The link text is not the link

The OSC 8 escape turns terminal text into a clickable hyperlink -- and, like an HTML <a>, the visible label and the real target are set separately. So program output can print a link that reads example.com but points at example.org. You see the label; the target hides in the escape.

what you see
$ cat release-notes.txt
Get the installer: example.com
# an ordinary-looking, clickable link
what is really there
$ stcat release-notes.txt
Get the installer: _]8;;https://example.org_\example.com_]8;;_\
   -> label "example.com"  --  target https://example.org

The catch: the label and the target are independent, so the text you read is not the site you reach -- the terminal twin of an HTML link whose text lies about its href. stcat neutralizes the OSC 8 escape to an inert _, so the real target is in plain sight, and secure-terminal ships OSC 8 off by default. Real class: CVE-2023-46322 and the hyperlink rows in the attack-class table.

alt-screen restore

The screen it painted leaves no trace

The alternate screen (?1049h) is the full-screen buffer vim, less and htop use: enter it, paint, then leave and your original scrollback is back untouched. Legitimate -- until a log enters it, paints fake output, and leaves. The forged full-screen view flashes by and vanishes, and your scrollback looks like nothing ever happened. Press Play:

primary screen
$ cat deploy.log
a safe re-enactment -- no real terminal is touched

The catch: the fake "ALL GREEN" dashboard was painted on the alternate screen, so leaving it (the log never draws a scrollbar or newline into your buffer) restores your primary screen exactly as it was -- no trace in scrollback. Alt-screen itself is a legitimate feature every terminal supports; the deception is painting a convincing fake, then restoring so you never scroll back to catch it. secure-terminal's default line mode strips ?1049h and shows the log as inert text with your scrollback intact, offering opt-in TUI mode if you actually want full-screen programs.

Every attack class

Twenty years of terminal escape attacks, by class. Each is a way program output tricks the terminal into acting; secure-terminal answers them the same way, by construction -- with one scoped exception, noted in the cursor-spoof row. Most rows are answered by ABSENCE -- the class needs a parser or feature secure-terminal does not implement, so it is not applicable rather than defended. Worth stating plainly: that is not a claim of being defect-free. A long list of known CVEs in other terminals is largely inapplicable here, and says nothing about undiscovered bugs in secure-terminal's own (much smaller) surface. Live, canary-forked proofs for every class are in the terminal-poc-corpus.

Every publicly-disclosed terminal escape-attack class, with example CVEs and how secure-terminal defeats it. The corpus references 41 CVEs across these classes and proves secure-terminal neutralizes all of them.
ClassWhat the terminal is tricked intoExample CVEssecure-terminal defense
Reflection / echobackanswering a query (window title, DECRQSS, font, cursor/status report, ENQ answerback) by writing the reply into your shell's inputCVE-2003-0063, CVE-2022-45872, CVE-2024-38396, CVE-2021-33477interprets no escapes; nothing on the output path can write to the pty (by construction)
Clipboard read (OSC 52)a program silently reading your clipboard (passwords, keys) onto its inputOSC 52 readoff by default; a human ask-once-per-tab gate that output can trigger but never answer
Clipboard write / paste hijack (OSC 52)overwriting your clipboard so your next paste inserts text you did not copyOSC 52 writeoff by default
Hyperlink phishing / URL scheme (OSC 8)a link whose visible text differs from its target, or a scheme (ssh://) that injects argumentsCVE-2023-46321, CVE-2023-46322, CVE-2022-46663OSC 8 off by default
Trojan Source (bidi)bidi overrides reordering the display so code reads differently than it runsCVE-2021-42574bidi controls neutralized and revealed
Homoglyphlook-alike code points disguising one identifier as anotherCVE-2021-42694non-ASCII revealed and marked
Charset shifta charset shift (DEC special graphics) rendering ASCII as line-drawing to disguise itcharset shiftcharset shifts stripped
Cursor spoofcursor-up + erase + overwrite hiding earlier output in line modecursor addressingpartly: vertical/absolute cursor addressing is stripped, so an EARLIER line is unreachable. Erase-in-line is honoured, so a program can still overwrite the line it is writing -- as \r does. stcat neutralizes both.
Notification spoofa desktop notification (OSC 9 / 99) carrying attacker textCVE-2022-41322notifications off by default
Window operationsset/report window title, icon or working directory to reach injection or execCVE-2003-0065, CVE-2022-44702window operations stripped
Denial of servicea title-change flood or a huge repeat count hanging or exhausting the terminalCVE-2021-28847, CVE-2012-2738interprets no escapes; bounded processing
Decoder overflowa Sixel or ReGIS image overrunning a decoder bufferCVE-2022-24130, CVE-2023-40359never runs a Sixel or ReGIS decoder
Bracketed-paste bypassan escape breaking the paste guard so pasted text auto-runsCVE-2021-31701paste sanitized to ASCII; the guard-breaking escape stripped

These attacks arrive as ordinary program output -- a compromised program, a log you cat or less, an unfiltered passthrough (kubectl, CVE-2021-25743), or an LLM CLI smuggling escapes from a prompt-injected model. secure-terminal neutralizes them whatever the source.

The family

Safe drop-in replacements for the usual text commands.

secure-terminal is the interactive terminal that builds all of this in: it interprets no escape sequences, sanitizes what you paste, and can strip, show or reveal unicode live. The commands below are the scriptable CLI counterparts for one-off audits and pipelines.
ToolReplacesDoes
unicode-showcat (audit)reveals every suspicious codepoint by name; exit 0/1/2
grep-find-unicode-wrappergrep (audit)finds files/lines with suspicious Unicode across a whole tree; grep-style exit code
text-safety-scan(all checks)runs every safety plugin (unicode-show + modeline-show) on files/stdin; exit 0/1/2
text-safety-scan-findfind + scanruns text-safety-scan across a whole tree; recursion via find expressions
modeline-show(none)flags Vim/Emacs modelines that can reconfigure or execute in your editor
stcat / stcatncatdisplay files/pipes safely; escapes neutralized, colors kept
stechoechoprint args safely, space-separated + newline
stprintprintfprint exactly as given, sanitized
stteeteedisplay and save a sanitized copy
stspongespongesanitize a file in place
sanitize-string(none)strip escapes + HTML markup, cap length

All ship in Kicksecure's helper-scripts. Docs: unicode-show, stdisplay.

Honest about the limits

These make display safe, nothing more. They do not make copy-pasting untrusted commands safe, do not sanitize data used inside shell scripts, and their output must never be re-interpreted with echo -e or printf %b (that re-enables the very sequences they removed).

Proof of concept

Why safe display matters: merely viewing untrusted terminal output is a real, high-severity vulnerability class with a 20-year CVE trail. Honest caveat: for this specific escape-sequence class we found no confirmed in-the-wild exploitation, only CVEs and researcher demonstrations; high severity is not the same as actively abused. But the wider idea it belongs to, weaponizing characters your eyes and tools render differently from the parser, is being exploited right now: the GlassWorm supply-chain worm (2025-2026) hid live malware in invisible Unicode across 400+ code repositories. Different mechanism, same blind spot.

Proof of concept Escape-sequence RCE

Merely viewing a file can run commands

A terminal is not only a display. Some escape sequences ask it a question - report the window title, a DECRQSS status, the cursor position - and the terminal answers the only way it can: by writing the reply to its own input, exactly as if you had typed it. A hostile file can set that answer to a command and then ask for it back, so merely cating a poisoned log or README (or tail -f-ing a booby-trapped log, even one arriving over SSH) injects keystrokes, and once a newline rides along, a full command runs.

Backdoor path: ship a poisoned log, README, or git repo; when a developer or admin views it in a vulnerable terminal, attacker bytes are echoed into the shell and run.

Proof of concept: a well-documented class: iTerm2 CVE-2019-9535 and CVE-2022-45872 (RCE), xterm CVE-2021-27135, Windows Terminal CVE-2022-44702, and the ten CVEs David Leadbeater catalogued in 2023. And it keeps recurring: iTerm2 CVE-2024-38396 and the brand-new terminal Ghostty (CVE-2024-56803) were both hit by the same window-title-into-keystrokes trick in 2024, with a public proof of concept that opens the calculator from a single cat. The origin paper is HD Moore's "Terminal Emulator Security Issues" (2003); see also CyberArk. All responsibly disclosed; none observed in the wild.

A terminal where cat notice.txt prints only 'Update installed. System healthy.' while the file secretly carries an OSC terminal-control sequence. stcat reveals the hidden payload as _]0;attacker@evil:~# _ before the visible text, and unicode-show names the hidden bytes U+001B (ESC) and U+0007 (BEL).
A safe demonstration of the mechanism: cat shows one innocuous line, but the file smuggles a terminal-control sequence that cat feeds straight to the terminal. stcat neutralizes it and unicode-show names the hidden ESC and BEL bytes. On a vulnerable terminal, this same channel is what escalates to injected keystrokes.

Logs are the surface. You cat and tail logs from places you do not control: CI output, container and kubectl logs, a remote server over SSH, a honeypot. A log is just a file an attacker can write into. Build a safe stand-in and watch it neutralized (no real terminal is harmed, the payload only sets a title and erases a line):

# write a "log" that hides a title-change and a line-erase redraw
$ printf 'deploy: OK\n\033]0;pwned\007\033[2K\rbuild: FAILED\n' > demo.log

# cat obeys the bytes: the window title is hijacked and FAILED is erased
$ cat demo.log
deploy: OK

# stcat neutralizes every escape to _, so nothing is hidden or run
$ stcat demo.log
deploy: OK
_]0;pwned__[2K_build: FAILED

# unicode-show names the smuggled bytes with line numbers
$ unicode-show demo.log
demo.log:2: [U+001B]]0;pwned[U+0007]...
   -> U+001B ESCAPE (Cc), U+0007 BELL (Cc)
git diff master..content/ansi-escape
Proof of concept Logs as a surface

Logs can attack the person reading them

Escape sequences smuggled into a log line do nothing to the file, but when an admin views that log in an ANSI-capable console, they can rewrite what is shown, forge entries, or manipulate the clipboard to trick the admin into running a command.

Backdoor path: get attacker-controlled text into a log (via a crafted URL, a username, a header), then wait for someone to read the log in a terminal.

Proof of concept: Apache Tomcat's CVE-2025-55754 did not escape ANSI in log messages. Note the honesty gap these tools argue against: NVD scores it 9.6, but Apache rates it Low ("no attack vector was found"): theoretical, not demonstrated end to end. There is no ATT&CK technique for this display-layer forgery; the nearest, T1070.003, is about deleting logs, not deceiving the reader of an intact one.

A terminal where cat access.log prints a benign-looking line, 10.0.0.9 - GET /health 200 ok, while the log line hides an OSC 52 clipboard-write escape. stcat reveals the payload as _]52;c;ZWNobyBwd25lZAo=_ and unicode-show names the hidden U+001B (ESC) and U+0007 (BEL) bytes.
A safe demonstration: viewing the log looks like a routine health check, but the line hides an OSC 52 sequence that silently loads the reader's clipboard (here with a harmless echo pwned). stcat and unicode-show expose what plain cat hid.

Reproduce the forgery. The log file is honest; only the rendering lies. An attacker-controlled field (a username, a URL, a header) carries a carriage return that overwrites the real entry with a forged one:

# the field value hides a \r that returns the cursor to column 0
$ printf 'ERROR: breach detected\rINFO: system all-good!\n' >> access.log

# cat renders the CR: "all-good" repaints over the real ERROR line
$ cat access.log
INFO: system all-good!

# stcat neutralizes the CR to _, so the real ERROR is right there
$ stcat access.log
ERROR: breach detected_INFO: system all-good!
git diff master..content/lone-cr

The same defense, for diffs

Code review is just reading untrusted text with extra steps. The same neutralization drives the safe git review tools.

FAQ

How do I get these tools?

They are open-source Kicksecure utilities (unicode-show, stcat, sanitize-string and friends). They ship in Kicksecure and Whonix; the source lives in Kicksecure's helper-scripts and developer-meta-files, and each is documented on the Kicksecure wiki.

Are these safe to run on untrusted files?

That is the point: they exist to read untrusted output safely. unicode-show and text-safety-scan only inspect and report; stcat and sanitize-string neutralize the dangerous characters instead of letting the terminal interpret them.

Is the source available?

Yes. This site is static HTML and CSS on GitHub, and the tools it points to are open-source Kicksecure projects.

Was this built with AI?

Yes: this page and its demonstrations are AI-assisted.