Pipe Mastra agent responses through jq to colorize reasoning and tool calls in the terminal

Mastra’s agent HTTP API returns a JSON structure with steps, each containing content items typed as reasoning, tool-call, tool-result, and text. The raw output is dense. Start by exploring it: # Hit the API and see raw structure http localhost:4111/api/agents/weather-agent/generate \ messages[0]="what's the weather in montreal?" | jq . # Get just the final answer http localhost:4111/api/agents/weather-agent/generate \ messages[0]="what's the weather in montreal?" | jq -r '.text' # Explore what's inside steps http localhost:4111/api/agents/weather-agent/generate \ messages[0]="what's the weather in montreal?" | jq '.steps[].content[] | .type' # "reasoning" # "tool-call" # "tool-result" # "text" # "reasoning" # "text" # See what fields each type has http localhost:4111/api/agents/weather-agent/generate \ messages[0]="what's the weather in montreal?" | jq '.steps[].content[] | select(.type == "tool-call")' Once the structure is clear, pipe through jq -r with inline ANSI escape sequences to colorize each piece: ...

OpenClaw custom skills silently disappear without quoted YAML descriptions and openclaw metadata

If a custom OpenClaw skill doesn’t show up in openclaw skills list and the agent can’t see it either, the SKILL.md frontmatter is likely the culprit. OpenClaw fails silently, so the debugging feedback is minimal. Two things must be right. First, any name or description containing a colon must be wrapped in double quotes, otherwise YAML interprets the colon as a key-value separator and the parse fails. Second, the frontmatter must include an openclaw metadata block declaring the emoji icon and any required binaries or environment variables. Without it, OpenClaw won’t register the skill at all. ...

A website can serve a full ANSI terminal UI when curled instead of HTML

Curling ysap.sh does not return HTML. It returns a fully rendered terminal UI: pixel-art header, bordered panels, a two-column layout, colored links. The kind of thing you’d expect from a TUI app, delivered over plain HTTP. The trick: check the User-Agent header. When it starts with curl/, respond with ANSI escape codes and box-drawing characters. When it’s a browser, respond with HTML. Same URL, two completely different experiences. The source is on GitHub and shows a clean Node.js implementation. What’s worth stealing: the layout approach (panels, columns, a legend of available curl endpoints) and the idea that your API docs or personal site can have a zero-install CLI interface for free. ...

HTTPie needs --ignore-stdin in non-TTY environments like Claude Code

HTTPie detects whether it’s running in a TTY. When there’s no TTY, like when Claude Code invokes it as a subprocess, HTTPie assumes stdin might have data coming and interprets the request as a POST, even if you meant a GET. The fix is --ignore-stdin: http --ignore-stdin GET localhost:3000/things The catch: once you tell Claude Code to always use --ignore-stdin, it will also use it when piping data, which breaks that use case entirely: ...

HTTPie interprets numeric keys as array indexes, breaks Asana custom field updates

Asana custom field GIDs are long numeric strings. When you pass them as nested keys in HTTPie’s bracket syntax, HTTPie sees a numeric key and assumes you’re building an array, then tries to allocate memory up to that index. With a 16-digit GID, that’s enough to OOM the process. This breaks: https --session pat PUT https://app.asana.com/api/1.0/tasks/1208765432100001 \ data[custom_fields][1205432109876543]="1205432109876544" HTTPie reads 1205432109876543 as an array index and tries to build a sparse array of that size. It never gets to make the request. ...

glow strips color when called from a subprocess: force it with env vars

glow detects whether it’s writing to a real terminal. When called from a script or subprocess (like Python’s subprocess.run), it sees no TTY and strips all ANSI color codes, you get plain text. Fix it with two env vars: CLICOLOR_FORCE=1 COLORTERM=truecolor glow --style dark file.md CLICOLOR_FORCE=1 tells color-aware CLI tools to emit color regardless of TTY detection. COLORTERM=truecolor tells glow to use 24-bit color instead of falling back to 8-color mode. ...

Zvec is an embedded vector database aiming to be the SQLite of vector search

Zvec is an open-source embedded vector database from Alibaba, built on their Proxima engine. The pitch is simple: vector search that runs in-process, no server required, with the same frictionless setup as SQLite. The gap it fills is real. Faiss gives you indexes but no CRUD or crash recovery. DuckDB-VSS has limited vector features. Milvus needs its own process and network hop. Zvec aims to be the option that just works when you’re building a local RAG pipeline, a CLI tool, or anything on-device where you need semantic search without infrastructure. ...