AI 资讯
Nine Months of Nagging, Zero Reading
🦄 I shipped a linter that fails your commit if you won't admit AI touched the code, and then did the most predictable thing possible—let nine months of the data sit there untouched while I busied myself with other things. Then I actually looked at it: nine months of footers piled up in git log like a lonely change jar. Every one of them said how much of those commits were mine, but I hadn't ever sat down and actually counted the jar. So I built the thing to count it. 🪙 The Jar Nobody Counted 🫙 Nine months of commits, every single one carrying a footer that states how much of it I actually wrote, and I could not have told you the number—not roughly or even within twenty points. It was all sitting in git log , structured, and enforced on every commit by a hook I built specifically for that purpose. But it was completely inert. Dropping change in a jar isn't the same as knowing how much money is in it. rai-lint will block your commit until you write the footer, but then it's done—the pile just sits there, and I never built the thing that adds it up. anchildress1 / rai-lint Dual-language linter for Responsible AI commit footers — shared logic for Node (commitlint) and Python (gitlint). Stop playing hide-and-seek with AI in your commits. A dual-language validation framework that makes AI attribution non-negotiable. 📊 Project Stats 🗣️ Languages 📦 Packages 🤖 AI & Automation 🔧 Quality & Standards Installation • Quick Start • Required Commit Footers • Documentation What is this? 🤖 RAI Lint enforces Responsible AI (RAI) attribution in every commit. No more "who wrote this?" moments. No more mystery code. Just honest, trackable AI contributions. Read the full story: Did AI Erase Attribution? Your Git History Is Missing a Co-Author %%{init: {'theme':'dark'}}%% flowchart LR A[Developer Commits] --> B{Has AI Footer?} B -->|Yes| C[Commit Accepted ✅] B -->|No| D[Commit Rejected ❌] C --> E[Clear AI Attribution] D --> F[Add Footer & Retry] Loading Why does this exist? Because transpa
AI 资讯
The five primitives I run a whole company on
I run a consumer product company by myself. Physical inventory, two storefronts, multiple marketplaces, subscription billing, bookkeeping, tax filings, government paperwork, content in two languages, and a codebase that ships to production most weeks. Headcount: one. Not "one plus a virtual assistant." One. Three years ago this was not possible. It is also not possible today by keeping a chat window open and asking it questions. The thing that changed is not that models got smarter in the abstract. The thing that changed is that agents can now operate software the way an employee does : click through admin dashboards, fill in government forms, read email, write and deploy code, remember what happened last Tuesday, and run on a schedule without being asked. Once that is true, most of what a small company's staff does becomes a workflow you can write down, hand to an agent, and audit weekly instead of doing daily. Everything I run sits on five primitives. Tool names will churn every six months. These won't. 1. A browser-operating agent An agent that drives a real browser session with my real logins: seller dashboards, banking portals, government sites, ad platforms, email. This is the highest-leverage primitive, and it is the one most people skip. The reason is uncomfortable: roughly 90% of small-business operations live behind a login wall with no usable API. Your marketplace seller console. Your payment provider's merchant dashboard. Your country's tax portal. The grant program that still ships application forms as attachments. If your automation strategy requires an official API for everything, you will automate the 10% that already had one, and you will still be doing the other 90% by hand at 11pm. The browser agent is my hands. It logs in, navigates, reads what's on screen, fills forms, downloads documents, and reports what it found. 2. A coding agent An agent that reads my repositories, writes changes, opens a review pass, and deploys. I treat it exactly like a
AI 资讯
How to Detect Website Technologies Programmatically in Go
Manually checking what technologies power a website works once or twice. After that it gets slow, repetitive, and impossible to scale. Modern developers skip the manual step and detect tech stacks in code instead. Your program reads a response, pulls out the signals, and tells you what's running. No DevTools, no guesswork. This guide shows how that detection works and how to build it in Go with the open-source tooling ProjectDiscovery maintains. External resources: github.com/projectdiscovery/wappalyzergo projectdiscovery.io If you're new to the concept, start with technology fingerprinting for developers to understand the signals behind detection. What does "programmatic detection" mean? Programmatic detection just means letting software identify technologies instead of a person doing it by hand. Your application does five things: Sends a request Reads the response Extracts signals Matches fingerprints Outputs technologies No browser, no manual inspection. The same pipeline shows up in recon platforms, developer tooling, automation pipelines, and security workflows. Read detecting website technologies using Go first if you want the foundational walkthrough. Why developers prefer automated detection Manual workflows fall apart as systems grow. Scripted detection holds up because it's fast, consistent, and drops straight into a pipeline. Speed: scan hundreds of targets in minutes. Consistency: scripts don't skip clues a tired human would. Automation: pipe results straight into the rest of your tooling. Intelligence: raw HTTP turns into something you can act on. Building a fingerprint engine yourself means reimplementing years of pattern work. A mature library like wappalyzergo saves you those hundreds of hours. How programmatic fingerprinting works Most detectors run the same four-stage pipeline. Step 1: Fetch the target Send an HTTP request and keep the headers and body. Step 2: Extract signals Look for the clues a stack leaves behind: response headers, cookies, scr
AI 资讯
Probabilistic Graph Neural Inference for bio-inspired soft robotics maintenance with ethical auditability baked in
Probabilistic Graph Neural Inference for bio-inspired soft robotics maintenance with ethical auditability baked in I remember the moment it clicked. I was hunched over a workbench in my home lab, staring at a tangled mess of silicone tentacles—a soft robotic octopus arm I’d 3D-printed and embedded with pneumatic channels. The arm was supposed to mimic the graceful, adaptive movements of a real cephalopod, but after a few cycles, it had developed a slow leak at one of the joint interfaces. The pressure sensors were giving erratic readings, and my traditional rule-based diagnostic script was useless. I’d spent weeks training a simple neural network to detect anomalies, but it kept flagging benign sensor noise as critical failures. That’s when I stumbled upon a paper on probabilistic graph neural networks (PGNNs) for molecular dynamics, and I realized: soft robotics maintenance isn’t about deterministic predictions—it’s about reasoning under uncertainty over a complex, interconnected system. This article is the story of how I built a PGNN-based inference system for bio-inspired soft robots, with ethical auditability baked in from the ground up. Technical Background: Why Soft Robotics Needs Probabilistic Graph Inference Soft robotics is fundamentally different from rigid robotics. A rigid arm has well-defined joints, links, and sensors; failures are often binary (motor burnout, gear slip). But a soft robotic tentacle is a continuum of deformable material with distributed sensing and actuation. The system’s state is a high-dimensional, partially observable probability distribution over material strains, pressures, and temperatures. Traditional diagnostic models—like support vector machines or feedforward neural networks—treat each sensor as an independent feature, ignoring the spatial and temporal dependencies that define soft robot behavior. In my research of graph neural networks, I realized that a soft robot is naturally a graph: each sensor node (pressure, strain, te
AI 资讯
ChatGPT Work Raises Enterprise Questions on Automation, Governance and Rollout
OpenAI's ChatGPT Work materials have put a familiar enterprise question into sharper focus: how far can an AI assistant move from answering prompts to supporting coordinated, multi-step work? The supplied research identifies official OpenAI documentation covering capabilities, governance and enterprise rollout, but it does not establish a complete public feature list, pricing model or availability schedule. For prospective buyers, that makes disciplined evaluation more useful than assumptions about what the offering may eventually automate. The interest is understandable. A workplace AI product that can help teams turn requests into coordinated plans, reusable outputs or connected workflows could affect knowledge work well beyond individual chat sessions. But the available material does not substantiate specific claims about autonomous web or app generation, collaborative trip planning, or the exact scope of automation. Those scenarios should be treated as possible use cases to evaluate, not confirmed ChatGPT Work functionality. What the available ChatGPT Work materials establish The most reliable starting point is OpenAI's ChatGPT Work product page . According to the supplied research, OpenAI's official materials describe ChatGPT Work in the context of capabilities, governance and enterprise rollout . That framing matters because enterprise AI adoption is not solely a model-performance decision. It also involves how a tool fits existing systems, who can use it, what data it can access, and how organizations retain operational control. The research does not provide enough detail to verify particular integrations, permission settings, security certifications, pricing, regional availability or release dates. Enterprises should therefore avoid treating broad product positioning as a procurement specification. The practical question is whether the official documentation and commercial terms available at the time of evaluation answer the organization's specific requireme
AI 资讯
How Much of Your CI Pipeline Is Just Cucumber Scenarios You're Too Afraid to Delete
The CI job just hit 28 minutes. Again. You pull up the duration report expecting to blame a bloated integration test or a slow environment spin‑up. Instead the longest stage stares back at you: a collection of Cucumber feature files that haven’t caught a real bug in months. Maybe years. They run on every commit, green circle after green circle, while your team mutters about slow pipelines and nobody dares touch them. Most teams treat those scenarios like documentation. “They describe the system,” someone once said, as if a Gherkin file were a legal contract. Others cling to the sunk cost: a year ago a whole squad spent two sprints writing them, polishing the grammar, aligning step definitions. Deleting them would feel like admitting waste. Experienced engineers see it differently. They treat a scenario that never fails as a liability you’re paying for on every push. Not neutral. Liable. Compute cycles, developer attention, flake‑debugging time, and the quiet toll it takes on trust in the pipeline. The principle is blunt: if a test hasn’t failed in the last few sprints, you’re already paying its full cost and receiving nothing in return. That doesn’t mean you delete everything green. But it does mean you audit with the same seriousness you’d use for a memory leak. What the green wall actually costs The damage is not abstract. A pipeline bloated with stale scenarios hurts you in five concrete ways. First, feedback slows. Every extra minute between push and result stretches the loop that tells a developer they’re safe to merge. Multiply across a team and you’re losing hours per week to waiting. Second, flakiness increases. When you have many scenarios, a single unstable environment variable can produce a handful of failures that are not regressions at all. Engineers learn to retry, then to ignore. Third, confidence erodes. If half the suite is ceremonial, a genuine failure might be dismissed as “just another flaky test” until it reaches production. Fourth, maintenance
AI 资讯
3 Portfolio Mistakes Hiring Managers Spot Instantly
The manager opens your portfolio. Your resume says you have five years of automation experience. The README lists Selenium, Playwright, Appium, Jenkins, Docker, Kubernetes. He scrolls. There is no code. The browser tab closes. This is you. Not because you lack skill—you have it—but because your public proof reads like a shopping list. The tools you name say nothing about how you think when a flaky test fails at 2am, or how you convince a developer that a bug is real. If you’re serious about landing a role that demands more than record-and-playback, you need to stop treating your portfolio like a keyword bingo card. Here are three mistakes that kill your chances instantly, and exactly how to fix them. Mistake 1: Tool jockeying Listing every automation framework you’ve heard of is a reflex. A hiring manager sees "Proficient in Cypress, Playwright, Selenium, WebDriverIO" and assumes you ran npm init once in each and called it done. Most testers frontload tools because they’re scared of the empty space where code belongs. Experienced testers show one test, deliberately written, with a comment that explains a trade-off they chose. The difference is not volume. A single 30-line script that handles a login flow with a purposeful wait strategy teaches more about you than a six-tool résumé. I’ve deleted my own old projects after re-reading them and realizing they said nothing about why any assertion existed. That quiet cringe is the signal you’re ready to improve. What you ship in your portfolio must answer one question: "What did this person decide, and why?" Move your tool list to a footnote. Let a real test carry the message. Mistake 2: The perfect test trap A portfolio full of green builds is a trap. Every team knows that real automation breaks: the CI node runs slow, the third-party API throttles you, the DOM renders a fraction of a second late. Showing only passing tests hides how you handle the ugly parts of the job. Most testers polish every assertion until it’s spot
AI 资讯
The Manual Tester Who Can Write a SQL Join Will Always Beat the SDET Who Can't
Most people think the SDET title means you are automatically more valuable than a manual tester. The SDET writes Playwright scripts. The SDET configures CI pipelines. The SDET talks about page objects and retry strategies. The manual tester clicks through screens and writes bug reports. Here is the truth I have watched play out across teams: the manual tester who can write a SQL join will consistently outperform the SDET who cannot. Not because SQL is magic. Because SQL is the shortest path to understanding what the system actually stores, not what the UI shows you. The problem with automation-first thinking I have seen SDETs spend three sprints building a test suite that validates every button, every dropdown, every error toast. The suite passes in CI. The suite passes in staging. The suite passes in production. And the bug still ships. Why? Because the test checked that the UI rendered correctly. It never checked that the database actually saved the right record. The SDET wrote assertions against DOM elements, not against data. The manual tester, meanwhile, ran a simple query. Saw the order status was "pending" when it should have been "confirmed." Filed a bug with the exact SQL that proved the issue. The developer fixed it in ten minutes. That is not a story about manual versus automated. That is a story about data literacy versus UI obsession. What a SQL join gives you that a locator never will A Playwright locator tells you something is on the screen. A SQL join tells you something is true. When you write page.getByText('Order confirmed') , you are testing that the frontend displays those words. You are not testing that the backend actually confirmed the order. You are not testing that the payment gateway returned success. You are not testing that the inventory decremented. A SQL join connects those dots. SELECT o . id , o . status , p . status AS payment_status , i . quantity AS remaining_stock FROM orders o JOIN payments p ON o . id = p . order_id JOIN invent
AI 资讯
Claude Opus 5 vs Fable 5: Which Tier Earns the Money
Opus 5 runs at 5 and 25 per million tokens against Fable 5 at 10 and 50, so the top tier now costs double for a much smaller gap Thinking is on by default on Opus 5, which silently changes what a tight max_tokens setting does to your output Disabling thinking now returns an error above high effort, so any xhigh or max route that turns it off needs an audit before you migrate Prompt caching starts at 512 tokens on Opus 5, half the Opus 4.8 floor, so short reusable prompts cache with no code change In June I worked through whether Claude Fable 5 was worth double the price of Opus 4.8 and concluded that it usually was, for hard work. Claude Opus 5 landed on July 24 at Opus 4.8's exact price and closed most of that gap. So the answer changed, and a few of the changes will throw errors in code that worked last week. The Price Gap Held, the Capability Gap Closed Opus 5 costs 5 and 25 per million tokens, input and output. That is identical to Opus 4.8 and exactly half of Fable 5 at 10 and 50. Anthropic did not raise the sticker price on the tier it improved, which is the single most consequential fact in this release. What that buys, on the numbers: 79.2 percent on SWE-bench Pro against Fable 5's 80.3, and a CursorBench 3.2 result Anthropic describes as landing within 0.5 percent of Fable 5's peak at max effort, at half the cost per task. On OSWorld 2.0 it goes past Fable 5's best computer-use result at just over a third of the cost. A 1.1 point deficit on the headline coding row, for half the money. Last month the equivalent comparison had an 11 point spread. That is what actually changed, and it flips the default: Fable 5 used to be the reasonable choice for anything hard, and now it has to argue for itself on each task. There is a quieter cost lever too. The minimum cacheable prompt on Opus 5 is 512 tokens, down from 1024 on Opus 4.8. Prompts I had written off as too short to cache now create entries with no code change at all. If you run a lot of small repeated calls,
AI 资讯
Opus 5 vs GPT-5.6 Sol vs Kimi K3: Who Leads Now?
Three labs shipped flagship models in fifteen days: GPT-5.6 Sol on July 9, Kimi K3 on July 16, Claude Opus 5 on July 24 Opus 5 leads SWE-bench Pro 79.2 to 64.6 over Sol, and ARC-AGI-3 30.2 to 7.8 Sol holds Terminal-Bench 2.1 at 91.9 percent in its top mode and still takes DeepSWE 1.1 and HealthBench Professional Kimi K3 is a 2.8 trillion parameter open-weight model at 3 and 15 per million tokens, roughly 40 percent under Opus 5 on input Fifteen days. That is the gap between OpenAI making GPT-5.6 Sol generally available and Anthropic shipping Claude Opus 5, with Moonshot dropping a 2.8 trillion parameter open-weight model in the middle of it. I wrote a frontier check like this in June and most of it is already out of date, so here is where the three current flagships actually stand. Three Flagships in Fifteen Days Model Lab GA Context Per million (in / out) GPT-5.6 Sol OpenAI 2026-07-09 1.05M 5 / 30 Kimi K3 Moonshot AI 2026-07-16 1M 3 / 15 Claude Opus 5 Anthropic 2026-07-24 1M 5 / 25 The specs have converged to the point where they barely differentiate anything. All three sit at or just above a million tokens of context. All three cap output around 128k. The input prices are within a factor of two of each other. Two years ago a context window was a headline; now it is table stakes, and the interesting differences have moved entirely into behavior under load. Two timing details that get flattened in the coverage. GPT-5.6 Sol was previewed on June 26 and only became generally available on July 9, so some of the earliest benchmark tables were run against a preview build. And Sol is the top of a three-model family alongside Terra and Luna, spanning roughly 1 to 30 per million tokens depending on tier. Comparing Opus 5 to "GPT-5.6" without saying which one is close to meaningless, which is a large share of the comparisons currently circulating. One structural note on Kimi K3, because the parameter count gets quoted carelessly. It is a mixture-of-experts model with 896 exp
AI 资讯
Engineering an Autonomous Support Loop with Aidbase and MCP
The most expensive part of running AI-powered customer support isn't the token cost or the infrastructure—it's the maintenance of truth. You deploy a chatbot, it works brilliantly for three days, then your product team pushes a breaking change to your API or shifts your refund policy. Suddenly, that 'intelligent' agent is hallucinating outdated information with extreme confidence. This is where most developers fail: they treat AI support as a static RAG (Retrieance-Augmented Generation) problem when it should be treated as an observability and orchestration problem. I've spent years building systems where the drift between documentation and reality was the primary cause of production incidents. The MCP (Model Context Protocol) changes this trajectory because, for the first time, we have a standardized way to move beyond 'read-only' agents. When I looked at how Aidbase implements its MCP server, I didn't see just another way to query an FAQ. I saw the blueprint for a self-healing support loop. The Shift from Reading to Operating Most people use MCP to give Claude or Cursor access to their codebase or some documentation files. It's useful, but it's passive. You ask a question; the agent finds an answer. With the Aidbase implementation, the capabilities are fundamentally different because they include 'write' operations via tools like add_aidbase_faq_item and add_aidbase_website_knowledge . This shifts the LLM from being a passive librarian to an active Support Engineer. Think about your current workflow. You find a bug, you fix it, you update the PR, and then... you remember you need to go into the Aidbase dashboard (or Zendesk, or Intercom) to manually update the FAQ so the bot doesn't keep telling customers the old way is correct. That manual step is where human error lives. With this MCP server, your workflow looks like this: You finish the PR in Cursor. You point at the new documentation URL or a snippet of code. You tell Claude: "Update our Aidbase knowledge base
AI 资讯
Claude Opus 5 Benchmarks: What the Numbers Actually Show
Opus 5 posts 79.2 percent on SWE-bench Pro against Opus 4.8 at 69.2, a 10 point jump with no change in per-token price Anthropic published most gains as ratios (three times ARC-AGI-3, more than double Frontier-Bench) rather than absolute scores On CursorBench 3.2 at max effort it lands within 0.5 percent of Fable 5's peak at half the cost per task Public GDPval-AA figures disagree across sources by up to 117 Elo, so I left that row out entirely Anthropic shipped Claude Opus 5 on July 24, and the coverage filled up with ratios instead of scores. Three times the next-best model. More than double the previous Opus. Just over a third of the cost. I went looking for the actual numbers behind those phrases. What I found says as much about how model launches get reported as it does about the model. The Numbers That Are Actually Comparable The cleanest row is SWE-bench Pro, which runs a model against real GitHub issues and checks whether the patch passes the repository's own tests. It is harder than the older SWE-bench Verified set and it is the row the whole industry now quotes. Model SWE-bench Pro Released Claude Fable 5 80.3 2026-06-09 Claude Opus 5 79.2 2026-07-24 Claude Opus 4.8 69.2 2026-05-29 GPT-5.6 Sol 64.6 2026-07-09 That is a 10 point jump from Opus 4.8 to Opus 5 inside two months, and the per-token price did not move (both tiers run at 5 and 25 per million tokens). Fable 5 keeps a 1.1 point lead and charges double for it. Those two facts together are the actual story of this release, and neither one is a ratio. On SWE-bench Verified, the older and easier set, Opus 5 reports 96.0 percent averaged over five trials. The averaging matters. A single run on a set that saturated above 90 percent tells you very little, because the spread between runs starts to rival the gap between models. Five trials is better practice than most launch tables bother with, and it is worth noticing when a lab does it. It is worth being precise about why those two rows behave differently,
AI 资讯
Building AI Agents for Regulated Industries: The Architecture of "Prepare, Don't Decide"
Most tutorials on AI agents assume the agent should get more autonomous over time — more tools, more scope, less human intervention. That's the wrong architecture for regulated professional-services work, and if you're building for accounting or legal clients, it's worth understanding why before you write a line of code. The constraint that shapes everything In accounting and legal workflows, there's a hard line between preparing work and exercising professional judgment. A first-pass extraction of numbers from a bank statement is preparation. Deciding how to characterize a transaction for tax purposes is judgment. An agent that drafts a client letter from a template is preparation. An agent that decides what legal advice goes in that letter is not — and building one that does is a liability, not a product. This isn't a hypothetical concern. The 2026 legal industry data shows the gap plainly: 69% of individual lawyers now use generative AI at work, according to the 8am 2026 Legal Industry Report, but firm-wide adoption of legal-specific AI sits at only 34%, and 54% of firms report no training or governance plan for responsible AI use at all. The technology is ahead of the guardrails, and that's exactly the gap this architecture is meant to close. So the architecture I use treats "human approval" as a first-class step in the pipeline, not an afterthought bolted on for compliance theater. Concretely, that looks like four layers. 1. Ingestion layer Documents come in from wherever the firm already receives them — email, upload, integration with QuickBooks, Xero, Clio, iManage — get classified, and get normalized into structured data. 2. Extraction / drafting layer The agent does the actual work: pulling line items, matching transactions, assembling a first-draft letter, flagging clauses in a contract that need a human eye. 3. Approval gate Nothing produced in step 2 moves forward without an explicit human action. This isn't a suggestion in a UI that can be ignored; it's
AI 资讯
Why I Keep Shipping Small Tools Instead of One Big Product
I have shipped five small tools this year instead of one big product, Git Dojo, OhNine, Statusline Builder, Claude Blueprint, and RAXXO Studio Each tool solves exactly one problem and stops there, no feature creep, no internal roadmap fights Shipping small forces me to finish things, a habit a single sprawling product lets me avoid indefinitely The pattern only holds because every tool has to earn its own attention, nothing rides on the others The Big Product I Never Shipped For a long stretch, I was building one big thing. Not a specific product I can point to and describe, more a habit of scope. Every idea got folded into the same growing plan, another tab, another settings panel, another "while I'm in there" addition. It felt productive because I was always working on something. It was not productive, because nothing ever crossed the finish line. A plan that keeps absorbing new ideas is not a plan, it is a place where finished work goes to become unfinished work again. The turn came when I noticed how differently I treated small, contained pieces of work. When I sat down to fix one specific annoyance, something with a clear edge around it, I finished. When I sat down to "work on the platform," I drifted. The difference was not effort or time, it was shape. A bounded problem has a visible end. An unbounded one does not, so there is always a reason to keep going instead of stopping and calling it done. That observation is the entire reason Git Dojo, OhNine, Statusline Builder, Claude Blueprint, and RAXXO Studio exist as five separate things instead of five tabs inside one dashboard. Each one started as an itch I could describe in a single sentence. OhNine started as "I want a warning before I hit my Claude limit, not after." Statusline Builder started as "configuring a statusline should not require editing JSON by hand." Git Dojo started as "I want to practice real git commands somewhere the mistakes cost nothing." None of those sentences needed a second paragraph
AI 资讯
Knowledge and Memory Management: Directions 1-3 Finalization Record
We just closed the finalization record for Directions 1 through 3 in our knowledge and memory management subsystem. This covers the core pipeline: ingestion, storage, retrieval, and context integration. Here’s what that actually means for the architecture, why we made specific tradeoffs, and how to use it in your own stack. The project has been iterating on how to decouple knowledge persistence from runtime memory while maintaining a unified query interface. Directions 1-3 form the foundation: a document store, a vector index, and a structured memory buffer that combines both. No more ad hoc caching or reinventing the retrieval loop. Everything lives behind a single KnowledgeGraph interface. Direction 1: Raw Document Ingestion and Storage We settled on a partitioned document store backed by a local SQLite database with a blob column for serialized content. Each document entry stores a UUID, source URI, raw text or bytes, a content hash, and a timestamp. The ingestion pipeline deduplicates by hash and runs through an optional extractor chain (e.g., PDF parser, markdown splitter, code chunker). The design decision is to separate storage from indexing entirely. The store is dumb—it only handles CRUD and metadata queries. This keeps the ingestion path simple and testable. Direction 2: Vector Index with Filtered Search Instead of building our own vector database, we wrapped existing infrastructure—Pinecone and a local FAISS fallback—behind an abstraction layer. The finalization record specifies a mandatory metadata filter set that must be packed into every upsert and query call. Each vector embedding carries a document UUID, chunk index, and a free-form tags map. This enables queries like “retrieve all chunks where module == 'networking' and version >= '2.0' ” without scanning unrelated vectors. The finalization also enforces a max-k retrieval of 50 with a similarity threshold of 0.65. Below that, the system returns an empty set rather than noisy garbage. We decided to p
AI 资讯
Claude Opus 5 Is Here: Fable 5 Intelligence at Half the Price
Anthropic shipped Claude Opus 5 on July 24, calling it a step-change over Opus 4.8, not a routine bump The model runs a 1M token context window as both default and maximum, 128k max output tokens, with thinking on by default Anthropic says it approaches Fable 5 intelligence at roughly half the price, with per-token pricing unchanged from Opus 4.8 It shipped everywhere at once, the Claude API, AWS, Google Cloud, and Microsoft Foundry, and is now the default Opus model in Claude Code What Anthropic Actually Shipped On July 24, Anthropic released Claude Opus 5, and the framing in its own documentation is unusually direct about what kind of release this is. Anthropic calls it a step-change improvement over Claude Opus 4.8, not an incremental one, and says the largest gains land in deep reasoning, agentic coding and long-horizon tasks, and test-time compute scaling. That is a specific claim, not marketing language, and it matches how the model is positioned everywhere else in the announcement: as a model built to stay on task across long tool-use loops rather than one built to win a single benchmark screenshot. The capability list is long and mostly practical. Anthropic highlights better code review and bug-finding, with a high hit rate on real bugs and few false positives, holding up even at lower effort levels. It highlights vision improvements, reading charts, documents, and diagrams, and replicating UI and frontend visuals when the model has tools to crop and check its own work. It highlights office and document tasks, generating multi-sheet spreadsheets with real formulas and structured slide decks, and multi-agent coordination, running teams of subagents with writer-verifier patterns and fewer cases of agents stepping on each other's output. What stands out is that this is not a model pitched as a smarter chat assistant. Every capability on the list points at the same audience: people running Claude inside an agent loop, a coding session, or a multi-step workflow,
AI 资讯
How Claude Code Detects Its Own Weekly Rot and Repairs Itself
Your Claude Code setup doesn't break in one dramatic moment — it degrades a few bytes at a time, and by the time you notice, you've been paying a context tax for weeks. In a previous post I covered running an unattended daily health check with launchd. This one is the follow-up: a three-layer loop that detects that quiet degradation weekly and hands the repair job to claude -p itself. The problem: environments rot quietly if you leave them alone Some things in a Claude Code environment grow just from doing your normal work. ~/.claude/rules/ and MEMORY.md keep getting appended to, until context injection quietly crosses 40KB Experimental agent definition .md files never get archived, leaving dozens to nearly a hundred files under ~/.claude/agents/ permanently loaded Stop hooks fire over and over, creating a hook spam condition Frustration-signaling words pile up in conversation logs and nobody notices A performance audit on 2026-07-11 revealed that "agents I thought I'd archived were still being injected — 99 of them," and that turned out to be the main cause of the degraded experience. That led to the question "so do I have to go check this every week myself?" — and the answer was to automate it , which is what cc-self-audit.sh does. Five degradation metrics and their thresholds The script measures five metrics and flags "red" when any of them crosses its threshold. # 閾値(env変数で上書き可) TH_INJECT_BYTES = " ${ SELF_AUDIT_TH_INJECT :- 40000 } " # rules+CLAUDE.md+MEMORY.md 合計バイト TH_AGENTS = " ${ SELF_AUDIT_TH_AGENTS :- 60 } " # ~/.claude/agents 配下 .md 総数(再帰) TH_STOPSPAM = " ${ SELF_AUDIT_TH_STOPSPAM :- 15 } " # 監査hook発火/週 TH_FRUSTRATION = " ${ SELF_AUDIT_TH_FRUST :- 8 } " # 不満ワード/週 TH_TOOLERR = " ${ SELF_AUDIT_TH_TOOLERR :- 400 } " # tool失敗/週 The first three are static metrics (state at this exact moment); the last two are dynamic metrics (trends since the previous run). That distinction maps directly onto how each one is measured, as described below. Overall design: a thr
AI 资讯
Stop asking LLMs to do math: Providing Claude/Cursor with deterministic construction logic via MCP
I've seen it happen dozens of times in my testing workflows. You give an LLM a complex set of dimensions—a wall, the area of two windows, the surface roughness, and the number of coats needed—and you ask for the paint volume. The model starts strong. It identifies the variables correctly. Then, somewhere between calculating the subtraction of the window areas and applying the texture multiplier, it hallucinates a decimal point or loses track of one of the subtractions. LLMs are incredible at reasoning through linguistics and high-level architectural patterns. They are fundamentally unreliable for deterministic arithmetic involving spatial geometry. If you're building an agent to handle real-world logistics—like construction estimation—you cannot rely on the model's internal weights to perform subtraction. You need a tool. This is why I built the Model Context Protocol (MCP) servers in Vinkius with a focus on precision tools rather than just API wrappers. The paint-coverage-calculator isn't an experiment in text generation; it's an implementation of deterministic logic exposed as an MCP server so that Claude or Cursor can execute code instead of guessing numbers. Moving from Reasoning to Execution The problem with standard prompting for estimation is the 'hidden variables.' In a real renovation project, you don't just paint a rectangle. You deal with architectural deductions (doors and windows) and surface absorption rates (smooth vs. textured). If an agent doesn't explicitly call a tool that handles these subtractions, it’s likely to over-order material. When using the paint-coverage-calculator via MCP, the workflow shifts from 'Calculate this for me' to 'Execute these specific calculation steps.' The server exposes three distinct tools designed to handle different parts of the geometric problem: calculate_wall_paint : This is specifically for vertical surfaces. It handles the logic of subtracting openings (like a 2m x 0.8m door) from the total surface area before a
AI 资讯
Improving Alerting on Host Resource Pressure in Hermes Memory Installer
Hermes Memory Installer, a tool designed to streamline memory allocation in distributed systems, recently received a critical update: a fix that ensures alerts are raised when the host experiences resource pressure. This improvement is vital for maintaining system stability and preventing cascading failures. In this post, we'll explore the details of this fix, its implementation, and its significance for experienced developers managing memory-intensive workloads. Understanding Host Resource Pressure In distributed environments, resource pressure occurs when the host system is constrained—high CPU load, low available memory, or excessive I/O. For tools like Hermes Memory Installer, which allocate and manage memory across nodes, ignoring host pressure can lead to OOM kills, throttling, or degraded performance. Before this fix, the installer lacked proactive alerting, leaving operators unaware of critical conditions until it was too late. This update directly addresses that gap. The Fix: Alert on Host Resource Pressure The recent update introduces a monitoring layer that continuously evaluates host metrics. When resource pressure thresholds are exceeded, the installer raises an alert, enabling operators to take immediate action. The fix is not just about detection; it integrates seamlessly with existing logging and monitoring infrastructure, ensuring alerts are visible in centralized systems. Key aspects of the fix: Continuous monitoring of memory usage, CPU load, and I/O metrics. Configurable thresholds to match specific hardware or workload requirements. Alerts emitted via syslog or custom handlers, supporting integration with tools like Prometheus or PagerDuty. Implementation Details The core of the fix is a lightweight monitoring module that runs alongside the installer. Here's a simplified example of how it might work: import psutil import logging class ResourceMonitor : def __init__ ( self , memory_threshold = 0.85 , cpu_threshold = 90 ): self . memory_threshold
AI 资讯
Automating a Daily Morning Health Check for Your Claude Code Setup with launchd
In my previous post, Monitoring Claude Code hook watchdogs with launchd , I set up liveness monitoring for hooks — and immediately ran into the next question: a healthy hook means nothing if the product behind it is down. What I really wanted was a single page I could skim in five minutes every morning and know that everything is fine. That page is daily-brief.sh . launchd runs it three times a day (8:00, 10:30, and at login), and it compiles production HTTP probes, hook latency p95, launchd exit codes, 7-day API costs broken down by model, and per-project git status into one Markdown file appended to Obsidian. The problem: checking five places by hand every morning The more you automate, the higher the risk that something breaks silently. I used to open all of these manually every morning: The Vercel dashboard (production liveness) launchctl logs (scheduled job failures) Claude Code cost usage git status for each project The hook latency JSONL Just opening them took 3–5 minutes. Two incidents slipped through unnoticed (2026-06-11: GitHub Scout silently going blank, and a server configuration error in the autolike license API). Consolidating everything into one automatically delivered page makes missing things physically impossible. Overall design: 3 triggers → 1 Markdown file → append to Obsidian launchd ├─ StartCalendarInterval: 8:00 ├─ StartCalendarInterval: 10:30 └─ RunAtLoad: true(ログイン時) ↓ ~/.claude/scripts/daily-brief.sh ↓ ~/.claude/logs/daily-brief-YYYYMMDD.md ← 正本ログ ~/.claude/logs/daily-brief-latest.md ← 最新コピー ~/Desktop/Daily Brief/today-brief-YYYYMMDD.md ~/Documents/claude-obsidian/wiki/briefs/daily/today-brief-YYYYMMDD.md Even when the second run fires at 10:30, the marker <!-- daily-brief YYYYMMDD --> prevents duplicate appends (details below). The script opens like this: #!/usr/bin/env bash # launchd で毎日 8:00 / 10:30 / ログイン時 実行(再実行してもマーカーで二重追記しない)。 # 注意: Desktop / ~/Documents(vault) は TCC 保護領域 → plist は /bin/bash 直起動(FDA付与済み)。 # /bin/zsh 経由だと FDA 未付与で書き込