A collection of general-purpose data transformation and processing CLI utilities maintained under the nlink-jp organisation.
Each tool is a standalone project with its own repository, release cycle, and documentation. This umbrella repository tracks them together as git submodules and hosts shared conventions.
| Tool | Language | Description |
|---|---|---|
| active-lens | Go | Content-free Mac activity tracker — classifies operating/present/away and derives a per-day work log. darwin/arm64 |
| active-lens-gui | Swift | macOS menu-bar front-end over active-lens — current session state and a calendar-style work timeline |
| ask-gemini-mcp | Go | MCP server exposing ask_gemini(prompt) — second-opinion consultations via Vertex AI Gemini |
| ask-llm-mcp | Go | MCP server exposing ask_llm(prompt) — second opinions via an OpenAI-compatible endpoint (e.g. LM Studio) |
| cclaude | Bash | Containerized Claude Code — run Claude Code in an isolated container with project isolation |
| chrome-pilot-mcp | Go | Zero-dependency browser-automation MCP — 27 tools speaking the Chrome DevTools Protocol directly |
| claude-usage-lens | Go | Token usage & cost analysis for Claude Code — parses local session logs into a durable SQLite store |
| claude-usage-lens-gui | Swift | macOS menu-bar app showing today's Claude usage cost, with Swift Charts analysis |
| csv-editor | Go + React (Wails) | (archived) CSV/TSV viewer & editor GUI — superseded by grid-edit |
| csv-to-json | Go | Convert CSV data to a JSON array |
| data-agent | Go + React (Wails) | (archived) Data-analysis desktop GUI — superseded by shell-agent-v2 |
| data-analyzer | Go | Large-scale JSON/JSONL analysis using local LLMs — sliding window + progressive summarization |
| data-toolbox-mcp | Go | MCP server exposing DuckDB analysis and containerized Python execution — workspace-scoped |
| eml-to-jsonl | Go | Parse .eml files and output structured JSONL — headers, body, attachments |
| gem-image | Go | Image generation and editing CLI via Vertex AI Gemini |
| gem-query | Go | Natural language data analysis CLI — SQL generation for DuckDB/SQLite via Vertex AI Gemini |
| gem-rag | Python | Gemini-powered RAG CLI for Markdown documents — Vertex AI embeddings + DuckDB |
| gem-search | Go | Agentic web search via Vertex AI Gemini with Google Search Grounding |
| gem-summary | Go | Text summarisation CLI via Vertex AI Gemini — chunked/parallel fallback for long inputs |
| gem-transcribe | Python | Audio transcription CLI on Vertex AI Gemini — speaker inference, structured JSON |
| grid-edit | Swift | Native macOS CSV/TSV editor (AppKit) — csv-editor's successor; Japanese-encoding & delimiter auto-detection, IME-safe editing |
| image-forge | Go | Local diffusion image-generation engine + model manager for Apple Silicon (stable-diffusion.cpp, CLI + MCP) |
| image-forge-gui | Swift | Native macOS front-end for image-forge — composer, batch generation, gallery |
| instant-translate | Swift | macOS menu-bar translator on the on-device Translation framework — no LLM, no network; reports its state and explains its failures. darwin/arm64 |
| json-filter | Go | Extract, validate, prettify, and repair JSON from arbitrary text streams |
| json-to-sqlite | Go | Load JSON data into SQLite with automatic schema inference and evolution |
| json-to-table | Go | Format a JSON array into text, Markdown, HTML, CSV, PNG, or Slack Block Kit tables |
| jstats | Go | SPL-style stats aggregations for JSON streams — count, avg, p95, stdev, values, and more |
| jviz | Go | Visualize JSON arrays as interactive charts in the browser — bar, line, pie, table with live SSE updates |
| load-spinner | Swift | macOS menu-bar CPU/GPU load indicator — spinner speed proportional to load. darwin/arm64 |
| lookup | Go | Enrich JSON/JSONL streams by matching fields against CSV/JSON data sources |
| mail-analyzer | Go | Suspicious email analyzer — rule-based indicators + Gemini content analysis for .eml/.msg |
| mail-analyzer-gui | Rust + Svelte (Tauri) | macOS desktop GUI for mail-analyzer — drag & drop email analysis |
| mail-analyzer-local | Go | Local LLM version of mail-analyzer — via OpenAI-compatible API (LM Studio, Ollama) |
| markdown-viewer | Go | Single-binary local Markdown viewer — renders GFM, Mermaid, and syntax-highlighted code in the browser |
| mcp-bridge | Go | Bridges stdio MCP clients to Streamable HTTP MCP servers that require a pre-registered OAuth client (Slack, GitHub Apps, Entra ID) — zero dependencies |
| mcp-guardian | Go | (archived) MCP governance proxy — bridging half superseded by mcp-bridge; the governance layer was never adopted in practice |
| msg-to-jsonl | Go | Parse Outlook .msg files and output structured JSONL — same schema as eml-to-jsonl |
| nvme-lens | Swift | macOS menu-bar monitor for NVMe SSD temperature and endurance — reads SMART through IOKit directly (no smartmontools, no root, no daemon) and judges on the hottest Temperature Sensor rather than the composite value, which understates the hotspot by 17–21 °C; six-hour sparklines in the panel, up to ninety days across seven metrics in History with outages drawn as gaps, and alerts on sustained heat, endurance, media errors and abnormal power-cycle rates. Internal and Thunderbolt/USB4 NVMe only — macOS has no SMART path to USB-attached drives, which are listed with the reason |
| pptx-to-markdown | Python | Convert .pptx presentations to structured Markdown for LLM analysis |
| quick-translate | Swift | macOS menu-bar translation via a local LLM (OpenAI-compatible API) |
| rex | Go | Extract fields from text using named regex capture groups — outputs JSON |
| sdate | Go | Calculate timestamps using Splunk-like relative time modifiers (e.g., -1d@d) |
| sensor-lens | Go | Collect SwitchBot temperature, humidity and CO2 into a local SQLite history — quota-aware polling, CSV backfill for what the API cannot serve |
| sensor-lens-gui | Swift | macOS menu-bar readout of your SwitchBot sensors — six-hour sparklines, CO2 alerts, and it collects while it runs |
| share-mounter | Swift | macOS menu-bar app that auto-mounts SMB shares at login without opening a Finder window (NetFS) |
| shell-agent | Go + Swift | (archived) macOS LLM chat & agent — superseded by shell-agent-v2 |
| shell-agent-v2 | Go + React (Wails) | Desktop app for interactive data analysis — session DuckDB, hybrid LLM, container sandbox |
| splunk-mcp | Go | MCP server for Splunk search over the REST API — async job pattern, exact result counts |
| status-lens | Swift | macOS menu-bar watcher for Statuspage-hosted status pages (Claude, GitHub, …) — per-profile label + shape symbol, degradation/recovery notifications |
| url-shelf | Swift | macOS menu-bar shelf of URL notes kept as plain .webloc files — per-entry private-window opening. darwin/arm64 |
| video-studio-mcp | Go | MCP server assembling narrated presentation MP4s from image + audio page manifests (ffmpeg) |
| voice-scribe | Go | Local speech-to-text with speaker diarization (whisper.cpp + sherpa-onnx); CLI and MCP server |
| voice-studio-mcp | Go | MCP server for local multi-speaker Japanese speech synthesis (AivisSpeech Engine) |
| webhook-relay | Go | Authenticated webhook receiver — writes payloads to GCS via Cloud Run Service |
| zip-porter | Swift | Windows-safe ZIP creation/extraction GUI+CLI — junk-free, NFC/CP932 names, AES-256/ZipCrypto passwords; hardened extraction (zip-slip, decompression bombs, quarantine propagation). darwin/arm64 |
- Pipe-friendly: stdout is data, stderr is diagnostics. Every tool reads from stdin and writes to stdout.
- Unix composable: output in plain text or JSON; designed to work with
jq,grep,xargs, and each other. - Single binary: no runtime dependencies; download and run.
- Minimal surface: each tool does one thing well.
All tools use a unified Makefile with consistent targets:
make build # Build for the current platform → dist/<binary>
make build-all # Cross-compile for all platforms → dist/<binary>-<goos>-<goarch>[.exe]
make package # Build and create .zip archives → dist/<binary>-<version>-<goos>-<goarch>.zip
make test # Run the test suite
make clean # Remove dist/Target platforms: linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64.
Note for
json-to-sqlite: this tool depends ongo-sqlite3(CGO). Linux and Windows cross-compilation uses Podman (or Docker) containers.Note for
pptx-to-markdown: this is a Python project managed withuv. It does not usemake; useuv syncto install dependencies anduv run pytestto run tests.
See CONVENTIONS.md for coding, documentation, and release standards that apply across all tools in this series.
- Develop in the workspace root
_wip/following the org CONVENTIONS.md (Starting a New Project), then create the repository undernlink-jp/. - Add it as a submodule here:
git submodule add https://github.com/nlink-jp/<tool>.git - Add a row to the table above (
check-org.shfails otherwise).