RSSAmplifier

Blog

Marek Šuppa

Personal site of Marek Šuppa — writing, teaching, and learning.

mareksuppa.comRSS feed ↗24 posts

Latest posts

Hermes Agent formats its output based on the platform you connect as

I ran into this while building a chat UI against Hermes Agent , Nous Research’s self-hosted agent gateway. Replies over its HTTP API came back as plain text with bare URLs – no **bold** , no ## headings, no [label](url) – even though my UI renders Markdown. The same agent formats answers with Markdown when used from Slack. The reason why is that Hermes injects a per-platform hint…

Making HTTP requests from a container that has no curl, using bash /dev/tcp

Edit: This has generated a nice discussion on Hacker News – check it out too! I needed to check that one container could reach another over an internal Docker network: a plain GET /health against a service on a shared network. The obvious move is curl http://service:8642/health . But this app image was stripped right down, with no curl or wget and nothing else around that I could use to open…

VER 2026 Results Viewer

VER 2026 is Slovakia’s periodic evaluation of research, development, artistic, and other creative activity at public universities and public research institutions. I put together this small open-source viewer because I was frustrated by how hard the original website made it to interpret and share the public results. The viewer is a friendlier interface over the original public sources: it…

"Load-bearing" is becoming LLM speak

A civil-engineering metaphor seems to have become part of Claude’s LLM speak.

Displaying account-specific Claude Code rate limits with ccstatusline

ccstatusline is a status bar for Claude Code – it makes it easy to see model info, git branch, token count, cost, context window, and all sorts of other things right from the Claude Code CLI. Since v2.1.0 (March 2026) it can also show rate limit utilization via the Anthropic OAuth API: SessionUsage – how much of the current 5-hour block you’ve already burned through WeeklyUsage…

Cooldown periods for package updates

The last two weeks of March 2026 were brutal for software supply chains. A cascading campaign by a threat actor tracked as TeamPCP started with a compromised credential in Trivy (Aqua Security’s vulnerability scanner), which was then used to hijack Checkmarx KICS and then LiteLLM (an LLM proxy with ~97M monthly PyPI downloads). On top of that, axios – the most popular HTTP client on…

Storing API keys for Claude Code providers in KeePassXC

A growing number of providers expose Anthropic-compatible API endpoints for Claude Code: MiniMax Z.AI DeepSeek Moonshot/Kimi Alibaba/DashScope OpenRouter They all work the same way: set ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN , and Claude Code talks to them instead of Anthropic. Their docs typically suggest putting the key straight into ~/.claude/settings.json : json Copy { 'env' : {…

Claude Code Cheat Sheet

A nicely organized cheat sheet of Claude Code commands, many of which are not widely known (e.g. /insights , /review ). Automatically updated daily . See also the Hacker News discussion .

Using --wraps to get tab completions on fish shell aliases

When you write a wrapper function in fish, you can use the --wraps flag to inherit tab completions from the wrapped command: fish Copy function claude -minimax \ --wraps = 'claude' \ --description 'Run Claude Code against MiniMax M2.7 API' ANTHROPIC_BASE_URL = 'https://api.minimax.io/anthropic' \ ANTHROPIC_MODEL = 'MiniMax-M2.7' \ claude $argv end The --wraps='claude' tells fish that…

Uploading images to GitHub PRs from the CLI

GitHub has no public API for uploading images to PR descriptions. The drag-and-drop in the web UI uses an undocumented endpoint ( /upload/policies/assets ) that requires browser session cookies – you simply can not call it with an API token or gh . The GitHub CLI team explicitly closed this as “not planned”, with the explanation that the upload flow requires a browser to obtain…

How to get the deployed Git commit hash in Portainer CE

When Portainer Community Edition deploys a stack from a git repository , it clones the repo, runs docker compose up , and then deletes the .git directory . This means the usual git rev-parse HEAD trick doesn’t work inside the running container – there’s no git history left. But Portainer does remember the commit it deployed. The stack API endpoint exposes it in…

Google Docs can be exported to Markdown via URL change

Google Docs now supports exporting directly to Markdown by tweaking the URL. Take any Google Doc URL like: Copy https://docs.google.com/document/d/1mt8aYM88Jj5qkep1xYC5vj0wBlbX2u6gdxhf_puaiQI/edit?tab=t.0 Replace everything after the document ID with export?format=md : Copy https://docs.google.com/document/d/1mt8aYM88Jj5qkep1xYC5vj0wBlbX2u6gdxhf_puaiQI/export?format=md If you use curl to test it…

Hugo can merge multiple sections into one stream

When building a Hugo site with multiple content types (blog, TIL, links), you can merge them into a single stream on the homepage using union : go-html-template Copy {{ $blog := where site .RegularPages 'Section' 'blog' }} {{ $links := where site .RegularPages 'Section' 'links' }} {{ $all := union $blog $links }} {{ range sort $all 'Date' 'desc' }} ... {{ end }} This is how sites like…

Write the Paper First

Jason Eisner ’s timeless advice on academic writing. The core idea is simple but very impactful: start writing the paper before you have all the results. Writing forces you to clarify your thinking, reveals gaps in your argument, and often redirects the research itself (e.g. what other experiments to do in order to arrive at a coherent story).

skLEP: A comprehensive Slovak NLU benchmark

First comprehensive benchmark for evaluating Slovak natural language understanding. Presented at ACL 2025.

Five things I wish I knew the day I started University

Things I wish someone told me the day I become a university student (for the first time).

How to get the most out of RoboCup(Junior)

The international RoboCup(Junior) is a unique event. This post summarizes what I would want to know before I participated for the first time.

How I built an app for FirefoxOS

… and nearly funded a company.

Lavabit

A few notes on a privacy focused email service and its shutdown.

Notes from Nederlands: take two

Been there, seen that. Nederlands for the first time.

Notes from Belgium

Not being somewhere for the first time also has its bright sides. Especially for Belgium.

Notes from Nederlands

Been there, seen that. Nederlands for the first time.

A tale of a physicist and a craftsman

Time is the only limit when a physicist meets a craftsman.

Writing a blog

Those who blog often say that others should start too. Unfortunately, they don’t say when.