惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
O
OpenAI News
酷 壳 – CoolShell
酷 壳 – CoolShell
The GitHub Blog
The GitHub Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
W
WeLiveSecurity
Hacker News: Ask HN
Hacker News: Ask HN
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
D
Docker
F
Full Disclosure
AI
AI
罗磊的独立博客
博客园 - 【当耐特】
U
Unit 42
S
SegmentFault 最新的问题
Stack Overflow Blog
Stack Overflow Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Palo Alto Networks Blog
博客园_首页
H
Help Net Security
量子位
月光博客
月光博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
F
Fortinet All Blogs
D
DataBreaches.Net
B
Blog RSS Feed
Webroot Blog
Webroot Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
爱范儿
爱范儿
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
CERT Recently Published Vulnerability Notes
Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Securelist

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店 GitHub - EdoardoBambini/Agent-Armor-Iaga: AI agents are getting tool access — shell, file system, databases, APIs, secrets. But **nobody is governing what they actually do with it**. Frameworks like LangChain, CrewAI, AutoGen, and Claude Code give agents the power to execute. Agent Armor gives you the power to control, audit, and approve every single action before it happens. HN Vibes — Week 15, Apr 7–13 2026 GitHub - chojs23/ec: Easy terminal-native 3-way git mergetool vim-like workflow GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - JakOb-dotcom/cloud-sandbox-security-analysis: Technical analysis and Proof of Concept (PoC) regarding environment variable exfiltration in containerized cloud sandboxes via side-channel data leaks. Springboards - Flint Alpha Show HN: A simpler coding agent harness GitHub - audiodude/sudomake-friends GitHub - 256thFission/mini-mythos: OSS clone of Anthropic’s Mythos harness to locate C/C++ memory vulnerabilities Show HN: OpenParallax: OS-level privilege separation for AI agent execution Hacker News Sorted - Chrome 应用商店 Show HN: How to Install Docker on Ubuntu 24.04 LTS: Complete 2026 Guide GitHub - himanshudongre/smriti GitHub - sverrirsig/claude-control: macOS desktop dashboard for monitoring and managing multiple Claude Code sessions GitHub - ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work. Chiral - Chrome 应用商店 Show HN: Two Claudes collaborating through shared memory on a $100 mini-PC GitHub - pmichaillat/latex-cv: Minimalist LaTeX template for academic CVs GitHub - oguzbilgic/posse: A web UI for Anthropic Managed Agents. GitHub - sshiraz/depsly: Dependency risk analysis tool for npm packages ABI Add safari/agent-harness — Safari browser automation via safari-mcp by achiya-automation · Pull Request #212 · HKUDS/CLI-Anything GitHub - Halfblood-Prince/trustcheck: Verify PyPI package attestations and improve Python supply-chain security GitHub - oguzbilgic/kern-ai: Agents that do the work and show it. GitHub - bruits/satteri: High-performance Markdown and MDX processing for the JavaScript ecosystem GitHub - tylergibbs1/feedstock: High-performance web crawler and scraper for TypeScript, powered by Bun and Playwright GitHub - Grimm67123/grimmbot: The self-improving sandboxed and open-source AI agent. With persistent memory and scheduling. GitHub - whitevanillaskies/whitebloom: Local whiteboard that blooms. GitHub - hwdsl2/docker-whisper: Docker image for a self-hosted Whisper speech-to-text server with speaker diarization and OpenAI-compatible transcription and translation APIs. Powered by faster-whisper. Supports all Whisper models, NVIDIA GPU (CUDA) acceleration, JSON/SRT/VTT output, SSE streaming, offline mode, and multi-arch (amd64, arm64). GitHub - yisding/reviewwiggum GitHub - MarwanAlsoltany/serrors: Structured errors for Go: sentinel hierarchies, typed data, custom formatting, and slog integration. GitHub - soatok/age-php GitHub - Luthiraa/markitme GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits GitHub - tombedor/excalicharts GitHub - wh1le/excalidraw-edit: Open and edit .excalidraw files from the terminal. Offline, auto-saves to disk. MalExt Sentry - Malicious Extension Scanner - Chrome 应用商店 GitHub - syi0808/asciianimesvg: Generate animated ASCII art SVGs from text. CLI, Rust library, WASM, and web editor. GitHub - zaina-ml/ml_forge: A visual-based graph node editor for training computer vision models. GitHub - anakin87/llm-rl-environments-lil-course: 🌱 A little course on Reinforcement Learning Environments for evaluating and training Language Models GitHub - takaakit/superpowers-uml: Superpowers-UML modifies Superpowers to ensure a software development workflow in which AI agents design through UML modeling. AdriByte Studio - Sviluppo Web e Soluzioni Digitali GitHub - chouligi/angel-copilot: Your personalized Angel Investment Advisor Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 GitHub - agenteractai/lodmem: Level Of Detail Context Management for Agents GitHub - ostefani/subnetlens: A fast, concurrent network scanner with a TUI and plain-text CLI, built in Go. It discovers live hosts on your network, scans their open ports, resolves hostnames, and fingerprints operating systems—delivered. Cyber Pulse: Agentic Intel - Apps on Google Play Whisper API: Self-Hostable Speech to Text Transcription The Agent-Web Protocol Stack: A Research Thesis GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Show HN: Provepy – A Python decorator that proves your code using Lean and LLMs Show HN: Pardonned.com – A searchable database of US Pardons GitHub - patrickdappollonio/dux: Dux is a terminal UI that lets you run multiple AI coding agents side by side, each in its own git worktree, with full companion terminals, macros, commit generation, and a command palette that knows more tricks than you do. kMC Crystal Simulator Show HN: HyperFlow – A self-improving agent framework built on LangGraph GitHub - stef41/vibescore: 🎵 Grade your vibe-coded project. One command, instant letter grade across security, quality, dependencies, and testing. GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. imgur.com GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. GitHub - nowork-studio/toprank: Open-source Claude Code skills for SEO, SEM, Google Ads GitHub - tacomanator/sash: Lightweight macOS menu bar app for reliably cycling through windows of the current application. Appents | Social Media Management for Product-First Teams GitHub - pnhoang/youtube-spam-blocker: Automatically detects and hides spam messages in YouTube Live chat. Set rate limits, keyword filters, and block repeat offenders. GitHub - decisionnode/DecisionNode: CLI + Local MCP - A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client. Semantically queryable. GitHub - AvaCodeSolutions/django-email-learning: An open source Django app for creating email-based learning platforms with IMAP integration and React frontend components. The $100K Gap in Kubernetes Security Tooling Function Calling Harness: From 6.75% to 100%
GitHub - kapbit/kapbit-go: Go implementation of the Kapbit orchestrator
ymz_ncnk · 2026-05-12 · via Hacker News: Show HN

Kapbit: Lightweight Workflow Orchestrator for Go

Kapbit is a lightweight, high-performance workflow engine for Go. It enables native Saga-style compensations, providing a robust framework for building fault-tolerant workflows without the need for complex external infrastructure.

Important

Early-stage project: APIs and behavior are subject to breaking changes.

Why Kapbit?

  • Log-Oriented Architecture: Unlike traditional orchestrators that rely on distributed databases, Kapbit is built on a distributed log (currently supporting Kafka). This offers superior performance, natural event sourcing, and simplified data consistency.
  • No DSL Required: No custom Domain Specific Languages or complex JSON/YAML definitions. If you know Go, you know Kapbit.
  • Built for Simplicity: A minimalist API that stays out of your way, letting you focus on business logic rather than distributed transaction plumbing.

Key Features

  • Fencing: Prevents split-brain scenarios by guaranteeing a single active writer. This allows you to safely run multiple instances.
  • Horizontal Scalability: Distributes load across partitions to scale throughput.
  • Fault Tolerance: Automatically reconnects to storage and resumes workflow execution after restarts.
  • Workflow Idempotency: Processes each unique workflow exactly once.
  • Circuit Breaker Support: Provided for both storage (built-in) and external services (user-managed).
  • Extensible Design: Built to support various storage backends and codecs; currently ships with Kafka and JSON support.

Quick Start

Try Kapbit with zero infrastructure requirements by using the in-memory repository.

package main

import (
  "context"
  "fmt"
  "reflect"
  "strings"

  cdcjson "github.com/kapbit/codec-json-go"
  "github.com/kapbit/kapbit-go"
  "github.com/kapbit/kapbit-go/repository/mem"
  wfl "github.com/kapbit/kapbit-go/workflow"
)

func main() {
  // 1. Define workflow steps and result builder.
  step1 := wfl.Step{
    Execute: wfl.ActionFn[wfl.Outcome](
      func(_ context.Context, _ wfl.Input, _ *wfl.Progress) (wfl.Outcome, error) {
        return wfl.Success("Incredible"), nil
      },
    ),
  }
  step2 := wfl.Step{
    Execute: wfl.ActionFn[wfl.Outcome](
      func(_ context.Context, _ wfl.Input, _ *wfl.Progress) (wfl.Outcome, error) {
        return wfl.Success("World!"), nil
      },
    ),
  }
  resultBuilder := wfl.ActionFn[wfl.Result](
    func(_ context.Context, input wfl.Input, p *wfl.Progress) (wfl.Result, error) {
      // Combine the initial input with the outcomes of all executed steps.
      parts := []string{input.(string)}
      p.ForEachExecution(
        func(o wfl.Outcome) error {
          parts = append(parts, o.(wfl.ValueOutcome[string]).Value)
          return nil
        },
      )
      return strings.Join(parts, " "), nil
    },
  )
  // 2. Create workflow definition.
  defs := wfl.Definitions{wfl.MustDefinition("simple", resultBuilder, step1, step2)}
  // 3. Setup with in-memory repository.
  repo := mem.New(1, 0)
  // Register all types that will be serialized into the repository.
  codec := cdcjson.NewCodec(
    []reflect.Type{reflect.TypeFor[string]()},                   // Input
    []reflect.Type{reflect.TypeFor[wfl.ValueOutcome[string]]()}, // Outcomes
    []reflect.Type{reflect.TypeFor[string]()},                   // Result
  )
  kbit, _ := kapbit.New(context.Background(), defs, codec, repo)
  // 4. Execute workflow.
  result, _ := kbit.ExecWorkflow("wfl-1", "simple", wfl.Input("Hello"))
  fmt.Printf("Result: %v\n", result) // Result: Hello Incredible World!
}

Examples

For complete usage examples, visit examples-go.

Need maximum performance? Check out the saga example to see Kapbit paired with cmd-stream.

How It Works

Let's look at the Kapbit components.

Kapbit Instance

Before launching any new workflow, a Kapbit instance must establish itself as an authorized Writer for the storage. It does so by emitting an Active Writer event to all available partitions. The storage layer ensures only one instance can hold writer status at a time, preventing conflicting writes and split-brain scenarios.

Once authority is confirmed, the instance enters a recovery phase by loading recent events from the storage to populate the Idempotency Window (with Workflow IDs) and resume the execution of uncompleted workflows.

After initialization, Kapbit is ready to accept new workflows until the MaxWorkflows threshold is met - accounting for both newly launched and resumed workflows.

Workflow

A workflow starts with a Workflow Created Event being written to the log. No business logic runs until this event is successfully saved. Once persisted, the execution is guaranteed - if the system crashes right after saving the event, the new instance recovery process will find the record and resume the workflow.

In Kapbit, a workflow is a state-managed pipeline. Its structure and data flow are defined by the following components:

  • Workflow Type: Defines a specific sequence of steps to execute.
  • Step Actions: Each step consists of an execution and an optional compensation action.
  • Step Outcome: An action return value represents a step's outcome.
  • Progress State: Outcomes are accumulated into a Progress object, which is passed forward to each subsequent step and Result Builder.
  • Result Builder: Produces the final workflow result (from the workflow input and accumulated Progress).

The diagram below shows the successful execution (happy path).

        ----------                   --------
       | Workflow |                 | Result |
        ----------                   --------
            |                            ^
   Progress |                            |
            v                            |
         -------                         |
        | Step1 |                        |
        |  exec |                        |
         -------                         |
            |                            |
   Progress |                            |
            v                            |
         -------                  ---------------
        | Step2 |  ----------->  | ResultBuilder |
        |  exec |    Progress     ---------------
         -------

When a step returns a failure outcome, the workflow stops moving forward. Instead, it "backtracks" and runs the compensation for every step that already finished.

The diagram below shows Step2 failing and triggering the cleanup for Step1.

        ----------               --------
       | Workflow |             | Result |
        ----------               --------
            |                        ^
   Progress |                        |
            v                        |
         -------                     |
        | Step1 |             ---------------
        |  exec |            | ResultBuilder |
         -------              ---------------
            |                        ^
   Progress |                        | Progress
            v                        |
         -------                  -------
        | Step2 |  ----------->  | Step1 |
        |  exec |    Progress    |  comp |
         -------                  -------

Circuit Breakers

Kapbit supports two types of Circuit Breakers:

  • System Level (Storage): A built-in circuit breaker for the storage layer.
  • Workflow Level (External Services): User-defined circuit breakers for remote services and third-party APIs. Returning a codec.CircuitBreakerOpenError from a workflow step signals to Kapbit that a downstream dependency is unavailable.

Retry Worker

A workflow can fail (return a user-defined error) for only one reason: the remote service it depends on is unavailable. In all other cases it should return a result, even after the compensation phase.

The Retry Worker runs in the background to re-attempt failed workflows, resuming from the last failed step. It operates in two modes:

  • Fast Mode (Default): Handles temporary issues (like network blinks or timeouts) with immediate or high-frequency retries.
  • Slow Mode: Triggered when frequent retries make no sense, for example, when a Circuit Breaker opens.

If a workflow exceeds its maximum retry limit, the worker terminates it with a Dead Letter Event for manual handling.

Events

Different system components emit different events:

  • Kapbit instance emits:
    • Active Writer Event
    • Workflow Created Event
    • Rejected Event
  • Workflow emits:
    • Step Outcome Event
    • Workflow Result Event.
  • Retry Worker emits:
    • Dead Letter Event
    • Rejected Event.

Where Rejected Event is used to terminate the workflow if some of its event was rejected by the storage, or there was an encoding error.

All components delegate event emission to the Emitter, which retries indefinitely using exponential backoff. This ensures that events are eventually processed even during temporary outages.

While an alternative approach might be to give up and emit a Dead Letter after several failed attempts, this wouldn't work - if the storage itself is unavailable the Dead Letter saving would also fail. Therefore, retrying indefinitely is the only safe strategy.

Capacity Management

Kapbit is designed to handle load gracefully, ensuring that a slow or unavailable storage layer doesn't crash the system.

MaxWorkflows Limit

The MaxWorkflows threshold governs the total number of concurrent workflows an instance can process (including recovered workflows). Once reached, the instance stops accepting new work until existing workflows complete.

Entry Gate

When a Circuit Breaker opens, the system can no longer function properly and should stop accepting new workflows. This is exactly what the Entry Gate is for. Both the Kapbit Instance and the Emitter close it when they encounter a codes.CircuitBreakerOpenError.

The gate becomes open again, only after successful workflow execution, processed by Kapbit Instance or Retry Worker. During the close period, the last one can use already failed workflows to probe the system and reopen the gate as soon as possible.

Repository (Fencing)

The Repository provides an abstraction layer over the storage. It is designed for high availability and automatically reconnects if the connection drops.

For local development and unit testing, Kapbit provides an in-memory implementation (repository/mem). For production workloads, use the Kafka implementation.

The Repository also provides fencing guarantees. Fencing ensures that only the active Kapbit instance can modify the storage. If a write or connection attempt returns a Fenced error, it means the instance has lost ownership and can no longer modify the storage. In this case, it will immediately terminate.

Codec

The Repository depends on a user-provided Codec, to encode the Workflow related data, such as: input, outcomes, result. At the moment only the JSON format is supported.

Async Results

Kapbit is an execution engine, not a query service. It does not include a built-in component for retrieving asynchronous workflow results or historical data.

Following the CQRS (Command Query Responsibility Segregation) pattern, the log storage serves as the Single Source of Truth. To implement features like a results dashboard or status API, you should:

  • Consume and filter events directly from the log storage.
  • Project those events into one or more read-optimized databases (e.g., Key/Value stores, relational DBs, or search indexes).

This decoupled approach ensures that the execution engine remains lightweight and highly performant, while giving you the flexibility to build multiple specialized views of your data.

Fault Isolation

When a circuit breaker opens, the Entry Gate halts all new workflows, allowing a single service failure to block the entire Kapbit instance.

To mitigate this, group services into logical bundles, each served by its own independent Kapbit instance.

kapbit1 (blocked)                kapbit2 (still works)
   |                                  |
   |-- service1 (fail)                |-- service4
   |-- service2                       |-- service5
   |-- service3                       |-- service6

Performance & Scalability

Kapbit's architecture is fundamentally designed for high-throughput, low-latency workflow orchestration.

If you are coming from a traditional database-backed workflow engine, significantly higher throughput and better scalability can be expected with Kapbit's log-oriented approach. While performance varies by environment, Kafka-based systems scale to hundreds of thousands of events per second per node, while traditional databases often hit a performance ceiling in the low thousands.