惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
D
Docker
H
Help Net Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
C
Check Point Blog
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
M
MIT News - Artificial intelligence
B
Blog RSS Feed
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
美团技术团队
I
InfoQ
Blog — PlanetScale
Blog — PlanetScale

Show HN

Show HN: AI agents for UK GDAD PCF roles and their skills The Two Pillars: Mixer Mode and Meta-Software in the Reorganization of Software Work After AI GitHub - JaiCode08/teleport-env What 1,000+ Harness Experiments Taught Me About Self-Improving Agents Show HN: Liiists, a Markdown-first, iOS and CLI list app SwiperTab – Get this Extension for 🦊 Firefox (en-US) GitHub - kouhxp/fftext: Summarize, explain, fact-check, or translate any text, URL, or file. No GPU. No cloud. One command GitHub - sweetpad-dev/sweetpad: Develop Swift/iOS projects using VSCode GitHub - dogmaticdev/IRON: IRON a.k.a. Intermediate Representation Object Notation is a Interpreter/Database that is used to create Programming Languages. GitHub - sjhalani7/vaen: Package your AI coding harness into a portable .agent file, and share it across repos, teams, & the community without ever having to copy-paste instructions, skills, MCP config, or secrets. Show HN: Gandalf the Grader Show HN: Citadeld – replay any CI failure locally from a single file GitHub - tdortman/cuSBF: High-Performance GPU Super Bloom Filter coral-ai/claude-code-token-xray at main · Coral-Bricks-AI/coral-ai GitHub - ulyssestenn/funes: Funes is a Git-based framework for LLM-managed knowledge work: an AI Librarian ingests raw sources, builds an interlinked Markdown knowledge base, and uses it to produce cited reports, analyses, and other outputs. GitHub - ThatXliner/gah: Git Add Hunk, built for agents to use GitHub - harmont-dev/harmont-cli: Command-line client for the Harmont CI platform GitHub - brooksmcmillin/mcp-authflow: OAuth 2.0 Authorization Server framework for MCP servers GitHub - javaid-codes/audit-supply-chain-agents GitHub - amorey/gochan: A small library of common channel architectures for Go, inspired by Rust GitHub - arifozgun/OpenGem: Free, Open-Source AI API Gateway with Gemini, OpenAI & Anthropic Compatibility in 1 file GitHub - Pranesh950/BioPetals: 🌸 Run BIOxAI models at home, BitTorrent-style. Fine-tuning and inference up to 10x faster than offloading GitHub - cnguyen14/bounty-doctor: Diagnose a GitHub bounty issue before you waste hours: detects honeypot scam repos, AI-bot attempt swarms, and stale contests. Show HN: CoreMCP – MCP Server for On-Prem DBs Show HN: KittyHTML – Render HTML/CSS as an inline image in your terminal GitHub - bingud/filemat: Web-based file manager Show HN: TruthLens – Free multi-signal deepfake image detector GitHub - apexlocal-jz/claude-usage-tray: Windows system-tray app showing your Claude Code rate-limit usage at a glance. Zero deps, ~300 lines of PowerShell. Cross-IDE (works regardless of VS Code, Cursor, plain terminal). Release v0.1.2.1 · kouhxp/yapsnap GitHub - noopolis/moltnet: Self-hostable chat network for AI agents. Pre-built bridges for Claude Code, Codex, and the Claws. Rooms, DMs, history. No Slack bots, no Matrix, no glue code.
kitcat 2.0
Milad Alizadeh · 2026-06-23 · via Show HN

I released kitcat a while back: a matplotlib backend that draws plots directly into your terminal instead of opening a GUI window. The original release was barely a hundred lines and dead simple, and I’ve ended up reaching for it almost every day since.

The 2.0 release addresses the two things people asked for most:

  • Plots that behave inside tmux
  • Better default sizing

Both rely on features only kitty and Ghostty support, and better sizing needs kitty specifically. Everywhere else gets the old behaviour.

Plots that behave inside tmux

Previous versions drew plots at the cursor. They scrolled fine on their own, but the moment something other than the terminal itself started shuffling text around, things fell apart. tmux, for example, redraws its panes constantly with no idea there’s an image there — so the plot would sit at a fixed position while the text scrolled out from under it, fail to clip at a pane boundary, or linger after the pane was hidden.

This release switches to Unicode placeholders, a newer feature of the kitty graphics protocol that AFAIK only kitty and Ghostty implement. What’s different is that the image is no longer painted at a screen position. Instead we use a Unicode character as a placeholder to tell the terminal to display an image at that cell. The picture you see is really just text. And because it’s text, anything that moves text, e.g. tmux, moves the image for free — it scrolls with the buffer, clips at pane edges, and reflows when you resize the window:

Better default sizing

The other complaint was size. Previous versions always rendered at matplotlib’s default DPI, so on a HiDPI display the plot and its labels came out noticeably smaller than the surrounding terminal text. In 2.0 kitcat queries the display’s real DPI — something only kitty reports — and applies a scaling factor so the figure matches. Ghostty and everything else don’t expose a DPI, so we fall back to the old behaviour.

Detecting the terminal program

Surprisingly, most of my time went into figuring out which terminal program was in use. You can’t trust environment variables like $TERM or $TERM_PROGRAM for this: even when they start out correct, SSH or a multiplexer like tmux may overwrite them — and those are exactly the cases kitcat needs to work in.

The most reliable way I found was to ask the terminal directly — send it a query escape sequence and read its reply. kitcat’s first choice is XTGETTCAP, which queries a terminfo capability in real time; asking for the terminal-name capability (TN) gets the terminal’s own answer with no environment variable in the loop:

printf '\033P+q544e\033\\'

The reply comes back hex-encoded — on kitty it’s 787465726d2d6b69747479, which is just xterm-kitty spelled out in hex.

XTVERSION is the next option. It just asks the terminal to identify itself:

Not every terminal answers these — they vary wildly in what they support and how they identify themselves (there’s a running survey of terminal capabilities that shows just how uneven it gets) — so environment variables stay as a last resort. In practice we mostly care about detecting kitty and Ghostty, which both support replying to these queries.

Update

pip install --upgrade kitcat