AI 资讯
Terminal themes optimize for syntax. This one optimizes for prose.
Spend a few hours in Claude Code and the screen is mostly English — tool output, reasoning traces, permission prompts asking you to read and decide. Syntax highlighting is almost irrelevant. What matters is whether body-size prose stays comfortable after six hours of sessions. Most terminal themes weren't built for that. They're tuned for token-colored code, where the eye jumps between short fragments. Prose reading is different: you need higher contrast on body text, tolerably soft contrast on secondary text that doesn't compete, and accent colors that don't burn. I built klein-blue around Yves Klein's IKB pigment as the anchor color — a specific blue I wanted to look at all day. There are four variations, each making a different tradeoff. Klein Void Prot is the strict one: every color role passes APCA Lc gates (body >= 90, subtle >= 75, muted >= 45, accent >= 60). The others trade some strictness for aesthetics. One thing APCA exposed immediately: pure IKB (hex 002FA7) is effectively invisible as text on a dark ground — Lc -12. So IKB lives only in the decorative slot (ansi:blue, borders and highlights). The readable blue — permission-prompt text and similar — is a lifted Klein-family color (hex A8BEF0) in ansi:blueBright, which actually passes. The other differentiating choice is what to do with Claude Code's claude-sand brand color, which lands in ansi:redBright. Two of the four variations neutralize it so nothing competes with IKB. Two accept it as a second hero. That's the meaningful split between variations in daily use. Ships as macOS Terminal.app .terminal profile files with CommitMono or IBM Plex Mono depending on variation. One prerequisite worth knowing: Claude Code's /theme picker has to be set to dark-ansi, otherwise Claude Code uses its hardcoded RGB palette and ignores your ANSI theme entirely. https://github.com/robertnowell/klein-void
AI 资讯
Gemini 3.5 Flash as your Cursor and Cline backend in 2026: $1.50/M tokens, 76.2% on Terminal-Bench, and how it stacks up against Claude Sonnet
This article was originally published on aicoderscope.com TL;DR : Gemini 3.5 Flash went GA on May 19, 2026 and costs 50% less than Claude Sonnet 4.6 on input tokens ($1.50 vs $3.00/M). It generates code at ~284 tokens per second — roughly 4.7× faster than Sonnet 4.6. Cursor already lists it natively; Cline needs one extra config step. The trap: Flash's default thinking level is "medium," which is slower and pricier than "low," the setting Google specifically tuned for coding and tool-use loops. Gemini 3.5 Flash Claude Sonnet 4.6 DeepSeek V4-Flash Best for Fast agent loops, context-heavy analysis Complex refactors, instruction fidelity Cost-capped high-volume tasks Input / Output per 1M tokens $1.50 / $9.00 $3.00 / $15.00 $0.14 / $0.28 Context window 1M tokens 200K tokens 1M tokens Terminal-Bench 2.1 76.2% — — Output speed ~284 t/s ~60 t/s — Max output per request 65,536 tokens 64K tokens 64K tokens The catch Output at $9/M erodes savings on code-gen 15× pricier output than Flash No vision, MIT-licensed Honest take : Use Gemini 3.5 Flash with Cline for multi-step agent tasks where round-trip latency compounds and context windows run large. Stay on Claude Sonnet 4.6 when you need a hard refactor to land perfectly on the first try — Sonnet's 79.6% SWE-bench Verified score still leads Flash's on correctness benchmarks. The cost math that does and doesn't work Gemini 3.5 Flash charges $1.50 per million input tokens and $9.00 per million output tokens. Against Claude Sonnet 4.6 at $3.00/$15.00, the input side is a genuine 2× saving. The output side is almost the same story: $9 vs $15 is 40% cheaper per generated token. Run the numbers on a typical Cline coding session: 8 tool calls, reading 12 files (roughly 20,000 context tokens), generating 500 lines of code output (~7,000 output tokens). Sonnet 4.6: (20K × $3 + 7K × $15) / 1,000,000 = $0.165/session Gemini 3.5 Flash: (20K × $1.50 + 7K × $9) / 1,000,000 = $0.093/session That's 44% cheaper per session. At 50 sessions a m
科技前沿
Your empty cuppa could capture carbon
Polystyrene can be upcycled into carbon sponge material.
AI 资讯
one last peek 👀🍵 docs, a demo, and a goodbye for now
Hello, I'm Maneshwar. I'm building git-lrc, a Micro AI code reviewer that runs on every commit. It is...
AI 资讯
The weather and climate science AI revolution isn’t revolutionary
Machine learning has its limits—how is it being used?
AI 资讯
100 Days of ClickHouse® – Day 6: Importing CSV Files into ClickHouse®
CSV files are one of the most common formats for storing and exchanging data. Whether you’re working with logs, analytics data, application exports, or reports, there will likely come a time when you need to load CSV data into ClickHouse®. The good news is that ClickHouse® makes CSV ingestion straightforward and efficient. In this guide, you’ll learn how to create a table, prepare a CSV file, load CSV data into ClickHouse®, and verify that the data has been imported successfully. Why Use CSV Files with ClickHouse®? CSV (Comma-Separated Values) files are simple, portable, and supported by virtually every data platform. Common use cases include: Importing exported application data Loading historical datasets Migrating data from other databases Testing analytics workloads Sharing data between systems Because ClickHouse® is designed for high-performance analytics, it can efficiently process and query large CSV datasets once they are loaded into a table. Sample CSV File Let’s assume we have a file named employees.csv with the following contents: id,name,department,salary 1,Alice,Engineering,75000 2,Bob,Marketing,60000 3,Charlie,Finance,70000 This simple dataset will help demonstrate how to load CSV data into ClickHouse®. Step 1: Create a Table in ClickHouse® Before importing data, create a table that matches the structure of the CSV file. CREATE TABLE employees ( id UInt32, name String, department String, salary UInt32 ) ENGINE = MergeTree() ORDER BY id; This table contains four columns that correspond directly to the columns in our CSV file. Step 2: Load CSV Data into ClickHouse® There are several ways to import CSV data, but one of the most common methods is using the ClickHouse® client. Run the following command: clickhouse-client --query=" INSERT INTO employees FORMAT CSVWithNames" < employees.csv The CSVWithNames format tells ClickHouse® that the first row contains column headers. After executing the command, ClickHouse® will read the CSV file and insert the records
AI 资讯
peektea brews on WSL 👀🍵 (and installs in one line)
Hello, I'm Maneshwar. I'm building git-lrc, a Micro AI code reviewer that runs on every commit. It is...
开发者
Cloudflare Identifies Query Planning Bottleneck in ClickHouse
Cloudflare recently described how a slowdown in its billing pipeline was traced to contention inside the query planning stage of ClickHouse. The team profiled the bottleneck and patched ClickHouse to replace an exclusive lock with a shared lock, drop the per-query copy of the parts list, and improve part filtering. By Renato Losio
AI 资讯
Google Colab, but in your favourite terminal
While some of my recent posts have involved using the Colab extension for VS Code and the Antigravity IDE, I actually prefer working in the terminal and Vim. The new Colab CLI finally lets me work in my natural habitat, and it opens the door for autonomous workflows! Setup Currently, installation is handled via pip or uv. It's straightforward, though, I'm holding out hope for a brew formula in the future: uv tool install google-colab-cli I'm testing Version: 0.6.dev7+g510115b0c inside Ghostty. The Colab CLI is pretty solid, but I do have some feedback and nitpicks I'd like to share (but more on that later). Creating a new session Creating a session is simple: colab new [-s SESSION_NAME] [--gpu T4|L4|A100|H100] [--tpu v5e1|v6e1] : SESSION_NAME : This is optional. If you leave it blank, the CLI generates a random unique ID for you. --gpu and --tpu : The hardware accelerator flags are optional, but omitting them defaults to a standard CPU-only instance. The specific accelerator chips you can request depend on your Colab tier, which you can check via colab pay. NOTE : If you only have one active session, the CLI targets it by default. This makes the -s flag unnecessary for subsequent commands. Testing Colab CLI's capabilities CLI certainly sounds cool, but how does it handle artifacts and images? More importantly, how debuggable is it? I decided to find out by running a Fashion MNIST PyTorch example. Handling artifacts To get started, I installed my requirements using colab install torch torchvision matplotlib . If you prefer a more standard approach, you can also use colab install -r requirements.txt . Once the environment was ready, I executed the training script using colab exec -f ./fashion_mnist_TRAIN.py and here's the output: [ colab] Using unique session '8c860c' . Using CUDA device. Shape of X [ N, C, H, W]: torch.Size ([ 64, 1, 28, 28] ) Shape of y: torch.Size ([ 64] ) torch.int64 NeuralNetwork ( ( flatten ) : Flatten ( start_dim = 1, end_dim = -1 ) ( linear_re
AI 资讯
Startup Battlefield 200 applications officially close in 3 days
Applications for Startup Battlefield 200 officially close on June 8, 11:59 p.m. PT. Don't wait any longer. Secure your shot at competing on the Disrupt Stage at TechCrunch Disrupt 2026 this October at San Francisco's Moscone West.
产品设计
GM’s electric future depends on a new battery — and this facility
GM wants to slash EV prices by deploying new battery tech up to a year earlier than planned. This building is key to making that happen.
AI 资讯
How a Citizen Science Organization Aims to Preserve the Places It Brings Tourists to Study
The actual eco-friendliness of ecotourism varies considerably. One research station in the Peruvian Amazon is out to prove it can bring visitors to the area without disrupting the environment.
AI 资讯
How to Spot Greenwashing Claims When You Travel
Hotels and other service providers pitch themselves as eco-friendly when they’re not. Here’s how to call their bluff.
AI 资讯
peektea past the roadmap 👀 sorting and scrollable previews
Hello, I'm Maneshwar. I'm building git-lrc, a Micro AI code reviewer that runs on every commit. It is...
产品设计
Meta steals a tactic from Tesla and builds data centers in tents
Meta may have found one way to slash its massive data center bill: tents.
AI 资讯
Helion, the Sam Altman-backed fusion startup, raises $465M to build a power plant for Microsoft
Fusion startup Helion is racing to complete a power plant for Microsoft by 2028. A fresh infusion of cash should help with that.
AI 资讯
peektea narrows its gaze 👀 filter-as-you-type and hidden files
Hello, I'm Maneshwar. I'm building git-lrc, a Micro AI code reviewer that runs on every commit. It is...
AI 资讯
One Schema to Rule Them All: The Config v2 Rewrite
This is part sixteen in a series about managing the growing pile of skills, scripts, and context that AI coding agents depend on. The 0.8.0 release notes cover the storage and pipeline changes that shipped alongside this rewrite; Part thirteen covers how the new profiles.improve config drives the improve pipeline. Config files are where projects go to accumulate technical debt quietly. Each new feature gets a new key. Each new key gets a new parser. Each parser has slightly different error handling, slightly different defaults, and slightly different ideas about what "invalid" means. Nobody notices until a user files an issue that says "I had a typo in my config and akm just silently used defaults for three weeks." That was the state of akm's config layer going into 0.8.0. What the Old Shape Looked Like The v1 config had three top-level blocks that grew independently over two years: llm.* for LLM connection settings, agent.* for agent process settings, and llm.features.* boolean flags gating per-feature LLM calls. The features block was nested under llm for historical reasons even though many features used the agent, not the LLM. The agent's per-process map lived under agent.processes , while LLM-gated features used llm.features.index.metadata_enhance style dotted paths. Each block had its own parser function. parseLlmConfig , parseEmbeddingConfig , parseIndexConfig , and a dozen more. The comment at the top of the new config-schema.ts is blunt about it: the Zod schema "replaces the ~1.4k LOC of legacy per-shape parsers." The problems that accumulated in that ~1.4k LOC: Unknown keys were silently accepted. If you wrote llm.temperaure (typo), the parser ignored it and fell back to the default temperature. No warning. You tuned a key that did nothing. Bad JSON was masked. The config loader caught JSON parse errors and fell back to DEFAULT_CONFIG — the compiled-in defaults. Your entire config file could be corrupt and akm would start without complaint, using defaults a
AI 资讯
The Proposal Queue Safety Net
This is part fifteen in a series about managing the growing pile of skills, scripts, and context that AI coding agents depend on. Part ten introduced the improve pipeline and how it generates proposals. Part twelve covered belief-aware memory, which feeds directly into the confidence scores covered here. The fundamental problem with agent-generated stash updates is trust. You want to capture what the agent learned — the debugging insight from last Tuesday's session, the architectural pattern it derived from reviewing twenty PRs — without blindly writing unreviewed content into the knowledge base your other agents depend on. One bad promotion and you've contaminated search results with a hallucinated fact that will keep showing up until someone notices. akm's proposal queue is the answer to that problem. Introduced in 0.7.0 and extended in 0.8.0, it separates generation from promotion. Every agent-driven change writes to a durable queue first. Nothing reaches your live stash until you explicitly accept it. The queue is the safety net. How the Queue Works When akm improve or akm propose runs, the output goes to the proposal queue — not to your stash. Proposals live outside the asset tree. They never appear in akm search results and never get indexed alongside your real assets. The quality: "proposed" marker ensures this at the database level: proposed assets are excluded from default search and only surface through the akm proposal * commands or an explicit --include-proposed flag. This means an agent can generate dozens of proposals in a single akm improve run and none of them affect your live stash until you decide they should. Multiple proposals for the same ref coexist without filesystem collisions. You can review them at your own pace, reject the bad ones, and accept the rest in whatever order makes sense. The complete review workflow: akm proposal list # see what's pending akm proposal show < id > # render the full proposal content akm proposal diff < id > # dif
AI 资讯
Your Agent Has a Memory That Runs While You Sleep
This post is part of the akm-knowledge series. Part ten introduced the improve pipeline — what each phase does and how to schedule it. This post goes deeper on what continuous operation looks like in practice: the hardware numbers, the reliability bugs we hit at 48 runs per day, and the observability layer we built to keep watch. Most people think of AI agent memory as something that happens during a session. You talk to your agent, it learns things, maybe you save a few notes, the session ends. The next session starts cold. akm improve is built around a different model: a continuous background process that runs on your own hardware, against local models, and quietly curates your agent's knowledge base while you work on other things. No cloud API required. No per-token billing for the maintenance pass. A GPU you already own, a model you already have downloaded, running on a schedule. This post covers what 24 hours of autonomous operation actually looks like, how consumer-grade GPUs handle the load, the reliability work that makes continuous operation viable, and the observability layer that lets you know it's working without watching logs. What akm improve Does in 24 Hours akm improve is a multi-phase pipeline. The core pass — consolidation — loads your memory pool, groups related memories into chunks, sends each chunk to a local LLM for a consolidation plan (merge similar memories, promote high-signal ones to your stash, delete redundant ones, surface contradictions), and then executes those plans. After consolidation, memory inference runs a lightweight factual extraction pass, and graph extraction updates the entity-relation index. The pipeline is scheduled to run automatically. Here is what one 24-hour window produced: Metric Value Runs completed 48 / 48 — zero failures Memories processed 14,189 Promoted to stash 1,361 Merged (deduplication) 49 (64 secondaries absorbed) Contradictions surfaced 211 Deleted (redundant) 31 Memory inference yield 69.3% — 115 new ato