Outsider Stage 0.5
실제 봉인된 Outsider Stage 0.5 개입 체인을 재생하고 검증합니다
기본 ASCII만 사용, 이스케이프 파서 없음, 붙여넣기 경고와 표시 모드, 메모리 안전
ASCII-only by default, no escape parser, a paste warning and reveal modes, memory-safe. An opt-in TUI mode runs ssh, vim and htop, still filtering every character. Copy commands in and text out withou
보안Python · RoffGitHub @secure-terminal온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A terminal where paste is safe by construction: ASCII-only display, no escape interpretation, minimal signal keys. Python + Qt6.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A terminal where paste is safe by design.
Paste a command copied from the web, or read text a program printed, without
worrying about invisible characters, bidi overrides or escape sequences.
secure-terminal accepts plain printable ASCII and, in its default display mode,
shows only that -- so a pasted or printed lie has nothing to hide in. The other
display modes trade some of that back deliberately (see below); what holds in
every mode is that no invisible, bidi or control character reaches you unmarked.
This is the problem output lies documents,
removed at the source.README 전문 보기 ↗A terminal where paste is safe by design.
Paste a command copied from the web, or read text a program printed, without worrying about invisible characters, bidi overrides or escape sequences. secure-terminal accepts plain printable ASCII and, in its default display mode, shows only that -- so a pasted or printed lie has nothing to hide in. The other display modes trade some of that back deliberately (see below); what holds in every mode is that no invisible, bidi or control character reaches you unmarked.
This is the problem output lies documents, removed at the source.
secure-terminal does not sandbox the programs you run. If you choose to run something harmful, it runs, exactly as in any terminal; nothing at the terminal layer can change that.
What it guards is viewing untrusted data. The danger in a normal terminal is that bytes you did not author, and did not choose to execute, can act rather than merely display: a crafted file you open, a program's output, an SSH login banner, a filename in a listing or a commit message can carry escape sequences. On a normal terminal, merely reading such output can quietly change your clipboard (so a later paste inserts text you never copied), draw a link whose visible text lies about its destination, put text onto your input line, or paint text invisibly. A passive, low-suspicion action causes a side-effect you never intended, without you running anything.
secure-terminal removes those escapes so that reading untrusted output is safe, and sanitizes paste so untrusted text cannot smuggle a hidden command into your shell. It does nothing about the programs you deliberately run.
Printable-ASCII display by default. Program output is passed through a sanitizer: ANSI/OSC
escape sequences are removed and every byte that is not printable ASCII (plus
tab and newline) is dropped, the way stcat does for logs. A hostile filename
or a Trojan-Source comment cannot reorder what you read, and nothing a program
prints can reach a line you have already scrolled past.
No escape-sequence parser to attack. CLI mode runs no ANSI/OSC/APC/DCS
parser. Two narrow exceptions are honored, both deliberate: safe,
contrast-guarded colour (SGR), and the four line-local editing ops a shell's
line editor emits -- cursor forward/back, cursor-to-column, and erase-in-line
-- and those only within the line being written. Vertical and absolute
movement, alternate screens and OSC hyperlinks are stripped, so a program can
never reach an earlier line or the scrollback. The worst it can do is redraw
its own current line, exactly as a carriage return already does -- so a forged
status line can overwrite itself before you read it, the same way a progress
bar does. Those four ops are what tab completion needs: Tab makes the shell
rewrite the line you are typing in place. The Line editing setting
(Settings -> Text rendering) chooses how much of the current line a program may
redraw: full (the default), read-safe (drop the four escapes; carriage return
and backspace still act), or append-only (also neutralize those, so the current
line can never be overwritten -- each neutralized redraw is flagged in the left
gutter). See the line_editing entry in
usr/lib/secure-terminal.d/30_defaults.conf for what each gains and costs.
Sanitized paste, with a review. When a paste contains unicode or control characters, a review bar opens inside the window and holds the paste before it reaches the shell. The paste opens FULLY REVEALED in one editable box -- nothing is silently pre-dropped, so a trap cannot hide by being cleaned away before you see it: every hidden character stays in place, named and risk-class-coloured by the terminal's own renderer (a look-alike tinted, an invisible or a bidi override shown as a named badge). While any hidden character is present the Deliver button is disabled and red ("blocked -- N hidden"), so nothing unreviewed can cross. You clear the trap with one of the labelled transforms -- Strip unicode (ASCII only), ASCII-fold (replace look-alikes with the plain letter they imitate) or Keep printable unicode (drop the invisible/reordering characters, keep the rest) -- or by editing the box directly; Deliver then enables, amber for printable unicode or uncoloured for plain ASCII. Restore original re-reveals the untouched paste at any time. While the paste is held, terminal input is suspended and the paste's Deliver is countdown-gated (configurable; Enter or Esc rejects), so a stray key cannot wave a hostile paste through. In CLI mode a plain-ASCII paste is not interrupted; the warning is configurable to always, only-on-unicode (the default), or never.
The same review for copy, going the other way. Text leaving via copy is
reviewed too, with the same revealed box: after cat evil-log, selecting and
copying in Show mode (where real glyphs are kept) would otherwise put a look-alike
straight on the system clipboard, so the copy opens fully revealed and the same
transforms clean it before it crosses -- stripped to ASCII, with printable unicode
kept, or not at all. Configured separately from the paste warning (copy and paste
are opposite trust directions): always, only-on-unicode (the default), or never.
Tiny input allowlist. You type printable ASCII plus a small set of control keys that the pseudo-terminal turns into signals:
| Key | Signal |
|---|---|
Ctrl+C | SIGINT |
Ctrl+Z | SIGTSTP |
Ctrl+\ | SIGQUIT |
Ctrl+D | EOF |
We only write the control byte; the kernel line discipline does the rest. Backspace is honored so you can rub out a typo; it erases one character and never crosses a line, so it cannot rewrite earlier output.
The safety model above does not cost you the usual conveniences:
Ctrl+Shift+T, close with Ctrl+Shift+W; closing a shell closes its tab.Ctrl+Shift+C / Ctrl+Shift+V
(plain Ctrl+C stays SIGINT). Paste is still sanitized before it reaches
the shell.Ctrl+wheel, Ctrl+plus / Ctrl+minus, or the percentage box
in the top right (Up/Down keys or type a value). Ctrl+0 resets to 100%.<U+XXXX NAME> (the codepoint plus its
official Unicode name, what unicode-show annotates), so a homoglyph reads as its
identity rather than a bare number. Box replaces every
non-ASCII character with a coloured box, one per character, tinted by risk class
(a bidi override, a zero-width character and a plain foreign letter get different
colours); safe and hard to miss. The on-screen box is lossy, but a saved
transcript names each byte inline (<U+XXXX NAME>) so the record is not; a
copied box still maps to a plain ASCII _. Show renders legitimate unicode as glyphs so you can read a
log, but still tints each one by risk class -- a homoglyph confusable with ASCII
wears a louder colour than honest foreign text, and the invisible, bidi and
control classes (which have no visible glyph) still show as a coloured placeholder.
Reveal shows every non-ASCII character as a <U+XXXX> badge to inspect exactly
what is there (and badges the control chars BS/CR too; Detail names them, e.g.
<U+000D CARRIAGE RETURN>). State goes further, badging EVERY character (printable
ASCII included) as <U+XXXX>, each tinted by the program's OWN SGR attributes
(codepoint + attributes) -- the live sibling of Save Screen State Dump. It renders
inline in CLI mode; a TUI tab freezes the frame and renders the snapshot as badges,
since a badge cannot fit a fixed grid cell. Escapes are stripped in every mode./freeze, or
Ctrl+Shift+B). Pauses the live view in any mode so a fast or scrolling frame can
be read -- the program keeps running (output is still read; only the repaint is
suspended), and unfreezing catches up. Mainly a debugging aid: freeze a frame that
looks wrong and inspect it (while frozen, / return exactly
the frozen frame). Reveal/Detail/State auto-freeze in a TUI tab because their badges
cannot fit the grid; CLI never auto-freezes.The strict line mode above cannot run curses apps, because they are driven
entirely by the escape sequences it refuses to parse. TUI mode (top bar and
View -> TUI mode, per tab, default off, needs python3-pyte) relaxes that so
you can run ssh, an editor, htop, the Claude Code CLI, and use the shell's own
completion menus and progress displays. A yellow indicator and a hover tooltip
flag it while it is active, because it is a deliberate, lower-guarantee mode:
pyte)
that has no OS reach: it cannot touch the system clipboard, so that exfil
vector stays closed. A program MAY set the tab title (default on), but the title
is reduced to plain ASCII and shown on a separate, visibly-untrusted line of the
tab, so a spoofed title can never pose as the trusted, app-set label.TUI mode renders through the confined screen model at all times (with its own scrollback), so a program that positions the cursor renders faithfully: a completion menu, a progress bar, or a full-screen program on the alternate screen (which is snapshotted and restored so it normally leaves your scrollback untouched).
What you give up: because the cursor can be positioned, a program can draw a misleading interface (a fake prompt, say) or overwrite a line you already read, so only run programs you trust. This is "restricted-emulator safe," not "safe by design."
Security comparison with CLI mode. The line (CLI) mode, and everything the project's guarantees rest on, is unchanged: it runs no escape parser beyond safe colour and four line-local edits, the confined screen model is never fed in CLI mode, and vertical/absolute cursor movement is stripped, so a program can never reach back to an earlier line or the scrollback. Transcript integrity is therefore per-line: anything already scrolled past is append-only, while the line a program is currently writing can be redrawn by it (exactly as a carriage return does). TUI mode is the one place escapes are interpreted; the only change from earlier versions is that it now does so uniformly (at a shell prompt too, not only while a full-screen program holds the alternate screen). No new class of side-effect is enabled -- clipboard (OSC 52) and hyperlink escapes remain neutralized in both modes, and a program-set title is shown only on the quarantined, untrusted tab line -- and every on-screen cell is still filtered. The extension is contained entirely within the opt-in, clearly indicated TUI mode.
The default is a deliberately minimal, line-oriented display. Backspace works, but because line mode neutralizes the escapes readline uses to redraw, richer in-line editing (mid-line cursor movement, history recall, completion menus) is intentionally basic there; compose or paste a line, read the exact bytes, then run it. Turn on TUI mode when you want those interactive features to render.
The guarantees above are enforced by an extensive automated suite; independent human review is still pending. secure-terminal follows a three-stage review path: (1) written by AI and checked by that automated suite -- the current status; (2) human non-malicious review, confirming it works as intended with no backdoors; (3) a full human security audit of the whole design, the gold standard. See the review status page.
secure-terminal
Built with Python and Qt6. AI-assisted (see org-ai-assisted and the review status above).
secure-terminalA standard Debian source package. Build it from source (below) and install the
resulting .deb, or run it in place from a checkout (./usr/bin/secure-terminal).
Can be built using standard Debian package build tools such as:
dpkg-buildpackage -b
See instructions. (Replace generic-package with the actual name of this
package secure-terminal.)
secure-terminal requires donations to
stay alive!
ctl dump-statedump-tabCtrl+Shift+S). Writes the current tab's
scrollback to a file. Because the buffer is already sanitized plain ASCII, the
saved file is safe to open anywhere, unlike a normal terminal's raw log.~/.local/state/secure-terminal/session.json and restored next launch, with a
fresh shell under the restored history. The running programs are not
resurrected. Turn it off, or clear the saved session, from the File menu; when
off, nothing is written. An unlimited tab's saved scrollback is capped so the
file cannot grow without bound..conf files read, lowest precedence first, from
/usr/lib/secure-terminal.d/, /etc/secure-terminal.d/,
/usr/local/etc/secure-terminal.d/ and ~/.config/secure-terminal.d/ -- so a
distro or admin can seed defaults and the user overrides them. Only *.conf
files are read; within a directory they apply in lexical order, later winning.
The app writes its own settings to
~/.config/secure-terminal.d/20_auto-generated.conf (a higher-numbered .conf
you hand-maintain, e.g. 50_user.conf, wins over it). Settings -> Folders &
Files... shows every location with Copy and Open buttons.Ctrl+Shift+R). Opens
a tab straight into ssh host, tmux, claude, etc. instead of the login
shell. A plain new tab (Ctrl+Shift+T) still runs $SHELL.