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

推荐订阅源

P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
B
Blog
月光博客
月光博客
博客园 - 【当耐特】
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
博客园 - Franky
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Last Week in AI
Last Week in AI
B
Blog RSS Feed
H
Help Net Security

Hacker News - Newest: "AI"

AI can't read an investor deck AI as an attorney? Student uses ChatGPT, Gemini to sue UW over alleged racial discrimination Hacking MCP Servers in AI Systems – The Rug Pull: Tool Changes After Approval GitHub - MeepCastana/KubeezCut: Free Web based video editor Can AI judge journalism? A Thiel-backed startup says yes, even if it risks chilling whistleblowers Coming soon: 10 Things That Matter in AI Right Now DARPA built an AI to fact-check enemy weapons claims What explains heterogeneity in AI adoption? When AI Meets Muscle: Context-Aware Electrical Stimulation Promises a New Way to Guide Human Movements - Department of Computer Science AI Changed How We Build. It Did Not Change What Matters. Linux rules on using AI-generated code - Copilot is OK, but humans must take 'full responsibility for the… Meta spins up AI version of Mark Zuckerberg to engage with employees Code Mode: Let Your AI Write Programs, Not Just Call Tools | TanStack Blog GitHub - Delavalom/graft: Go framework for building AI agents. Type-safe tools, multi-provider (OpenAI, Anthropic, Gemini, Bedrock), zero vendor SDKs. India's TCS tops estimates, says new AI models did not dent services demand Gen Z's fading AI hype Strong feeling: we are in a folded AI reality GitHub - machinarii/total-recall-catalog: A reference catalog of latest knowledge retrieval, memory & RAG systems GitHub - mensfeld/code-on-incus: Give each AI agent its own isolated machine with root, Docker, and systemd. Active defense detects and stops threats automatically.. Quantization, LoRA, and the 8% Problem: Benchmarking Local LLMs for Production AI Iran war: We spoke to the man making Lego-style AI videos that experts say are powerful propaganda Powell, Bessent discussed Anthropic's Mythos AI cyber threat with major U.S. banks GitHub - immartian/bellamem: Persistent belief-graph memory for AI agents. Retrieves decisive context by importance — not recency, not RAG, not /compact. recursive-mode: The Repo-Native Operating System for AI Engineering After the attack on Sam Altman's home, will AI CEO's go on the offensive? The biggest advance in AI since the LLM Opus 4.6 vs GPT 5.4 One Prompt Unity World Generation Test “AI polls” are fake polls Client Challenge Can AI be a 'child of God'? Inside Anthropic's meeting with Christian leaders
GitHub - cloudkj/llayer: AI agents the Unix way
cloudkj · 2026-06-23 · via Hacker News - Newest: "AI"

Framework-free AI agents built with bash, curl, and jq

llayer is an experiment in applying the Unix philosophy to large language model orchestration. Everything is handled through a suite of small, single-purpose commands interfacing over standard text pipes to produce a REPL-style agent loop.

Why?

Agent frameworks can be state-heavy and hard to reason about. llayer deconstructs the agent lifecycle into fundamentals:

  • State & Memory: An append-only .jsonl history file (like .bash_history).
  • Context Window: A functional jq stream reducer.
  • Agent Loop: A standard bash while loop.

Because the entire architecture is a stateless text pipeline, it unlocks neat capabilities, such as:

  • ⏱️ Time-Travel Debugging: instantly rewind the agent's memory by slicing the history file (e.g., head -n 20 .llayer_history).
  • 🛠️ Zero Abstraction Tooling: add tools using pure Bash functions where stdout directly becomes the agent's input.
  • 🚀 Native Pipelining: intercept the agent's stream with standard POSIX tools - e.g. filter PII data with grep before it hits the model, or natively benchmark token streaming speeds using pv.

Quick Start

To get started: clone this repo, start a local model server (Ollama) with docker compose, then call agent:

% docker compose up --detach
...
 ✔ Container llayer-ollama-1 Started
% ./agent 
> Hello there, good morning 
Good morning to you as well! How's your day starting out so far?

Alternatively, try out the individual commands. For example, a stateless, context-free call is simply a chain of commands:

% echo "Hello, world" | ./ll-read | ./ll-context | ./ll-eval | ./ll-print
Hello! It's nice to meet you. Is there something I can help you with or would you like to chat?

The Stateful Agent: a REPL

graph LR
    User

    subgraph READ
        ll-read
        History
        ll-context
    end

    subgraph EVAL
        ll-eval
        ll-dispatch
        Model
        Tools
    end

    subgraph PRINT
        ll-print
    end

    User -->|read| ll-read
    ll-read -->|append| History
    History -->|pipe| ll-context
    ll-context -->|pipe| ll-eval
    ll-eval -->|append| History
    ll-eval -->|pipe| ll-dispatch
    ll-dispatch <-->|call|Tools
    ll-dispatch -->|append| History
    ll-eval -->|pipe| ll-print
    ll-eval <-->|http| Model
    ll-print -->|print| User

    style ll-read fill:#4A90E2
    style ll-context fill:#4A90E2
    style ll-eval fill:#4A90E2
    style ll-dispatch fill:#4A90E2
    style ll-print fill:#4A90E2
Loading

The agent script combines the standalone components to form a read-eval-print loop (REPL) that largely resembles an AI agent:

  1. ll-read user input and append a corresponding event to the history file.
  2. Build ll-context from history to produce the model context and ll-eval the model.
  3. If necessary, ll-dispatch to supported tools and append the result to the history; repeat step 2.
  4. Append model output as events to history then ll-print to display messages to the user.

Power of Pipes

Caling specific components of the agent is straightforward. Examples include inspecting and adding to the context passed into the model:

(cat .llayer_history && echo "Print some digits of PI" | ./ll-read) | ./ll-context | jq -c '.[]'

Or replaying agent messages from history:

cat .llayer_history | ./ll-print --debug

Or directly inspect streamed model outputs:

echo "ping! just reply pong" | ./ll-read | ./ll-context | ./ll-eval            

Or pipe to a downstream tool to measure how quickly the model is streaming responses back, and buffer all of the output before printing the responses:

echo "How much wood could a woodchuck chuck?" | ./ll-read | ./ll-context | ./ll-eval | pv --line-mode | sponge | ./ll-print

Implementation

Append-Only State

An append-only history file stores all of the state. Each line is an event JSON object describing either a user input, a token emitted by the model, a completed message, or a tool call/result. Motivations and goals of this design:

  • Immutability: all events, down to individual tokens, are preserved for auditing, debugging, and replayability.
  • Simplicity: using append-only text to store state is robust and aligns with the minimalist philosophy.
  • Composability: downstream tools can consume, filter, and transform the event stream without modifying state.

Context Building

ll-context compacts the canonical event history to build the context for each model call. Its main purposes are:

  • Scoping: the command filters history down to relevant events, groups tokens into higher-level messages, and applies configurable heuristics (e.g. keep last N turns, strip tool-call payloads, collapse tokens into a single assistant message) so the model receives concise context.
  • Reduction: the original history is never rewritten or deleted; the command reduces the history down to a filtered, model-friendly sequence derived from events that fall within a user-defined window.

Schema

The individual components utilize a DSL that follows minimal, explicit JSONL shapes where each line contains a type, source, and payload. The basic event schema is as follows:

{"type": "error",            "source":"system",     "payload": {"test": "..."}}
{"type": "message",          "source": "user",      "payload": {"text": "..."}}
{"type": "message_complete", "source": "system",    "payload": {}}
{"type": "token",            "source": "assistant", "payload": {"text": "..."}}
{"type": "tool_call",        "source": "assistant", "payload": {}}
{"type": "tool_result",      "source": "tool",      "payload": {}}