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

推荐订阅源

P
Proofpoint News Feed
李成银的技术随笔
人人都是产品经理
人人都是产品经理
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
G
Google Developers Blog
AWS News Blog
AWS News Blog
N
Netflix TechBlog - Medium
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
C
Check Point Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
U
Unit 42
Cyberwarzone
Cyberwarzone
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
CERT Recently Published Vulnerability Notes
The GitHub Blog
The GitHub Blog
D
DataBreaches.Net
腾讯CDC
S
SegmentFault 最新的问题
Project Zero
Project Zero
F
Future of Privacy Forum
L
LangChain Blog
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
F
Fortinet All Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
F
Fox-IT International blog
Security Latest
Security Latest
S
Secure Thoughts
T
Tailwind CSS Blog
T
Troy Hunt's Blog
Jina AI
Jina AI
C
CXSECURITY Database RSS Feed - CXSecurity.com
Blog — PlanetScale
Blog — PlanetScale
美团技术团队
Recorded Future
Recorded Future
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
Schneier on Security
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
A
Arctic Wolf
Spread Privacy
Spread Privacy
T
The Blog of Author Tim Ferriss

DEV Community

Token-level eval harness for tool-calling agents: what we wired up Why Some Codebases Are Hard to Understand: Cognitive Surface Area and the Hidden Cost of System Navigation Trust Boundaries in Client-Side Health Apps The fastest way to update Node.js on your Mac Prompt is Not Runtime: Why I Rejected LLM State-Machines for Deterministic FinTech SDD en proyectos brownfield: pros, contras y la estrategia que realmente funciona Hexagonal Architecture in Practice: Ports, Adapters, and Tests That Skip the Database Your Playwright Tests Will Need Refactoring. Here's How to Make It Painless Development of a custom API layer for Framer CMS integration Stream 24/7 on YouTube with Ant Media Server Run OpenAI Codex CLI on Claude, Gemini, or Llama — in 50 lines of C# Token economics for AI agents: why workflow ownership matters more than task automation Why SMS Codes Are No Longer Enough for Business Security Communicate Ideas Visually: Let AI Run the Feedback Loop Building an Autonomous AI Hiring Agent with Multi-Agent Runtime Orchestration 🚀 Validating lists in Okyline: uniqueness, order, and cross-element rules Base64 encoding visualizer I Built a Browser Game Engine Inside WordPress Without Canvas or WebGL. Here's Why Designing Website Analytics for AI Crawlers Without Surveillance Forget Usernames and Passwords: A Web2 Developer’s Guide to Solana Identity Usage-Based Billing for AI Agents with FastAPI and Kong 30 Days of AI Agents Buying From a Real WooCommerce Store. Here's What the Data Says. AWS - Identity and Access Management Explained for Beginners Token Saving, and Caveman How Superpowers Forces Skill Execution How I Stressed My SQLite Job Queue to 5,000 Continuous Tasks on an Android Phone (And Why It Outperformed the Cloud) Is the job market dead, or has the skill bar increased? Introducing PlanCollab: AI-Powered Cross-Agent Code Planning & Review No More Waiting in Line: How I Built a Web-Based Canteen Queue Management System with Flask and MongoDB Deploying Unbound Validating DNS Resolver on Ubuntu 24.04 Deploying Prometheus Metrics Collection Server on Ubuntu 24.04 AWS IAM Roles Anywhere Hands-On Deploying Grafana Metrics Visualization Platform on Ubuntu 24.04 Deploying Gogs Simple Git Hosting on Ubuntu 24.04 Deploying MongoDB NoSQL Document Database on Ubuntu 24.04 Deploying Passbolt Team Password Manager on Ubuntu 24.04 Deploying OpenWebUI Local AI Interface on Ubuntu 24.04 Deploying Bitwarden Password Management Vault on Ubuntu 24.04 Deploying GitLab CE DevOps Management Suite on Ubuntu 24.04 Panduan Praktis Pasca-Install Ubuntu 24.04 Desktop Agar Sistem Nyaman Dipakai Harian Deploying n8n Workflow Automation Engine on Ubuntu 24.04 Memory Cache: o bug invisível que só aparece quando sua aplicação precisa escalar horizontalmente "this" in JS is SIMPLE as a rock LoRaWAN has ~51 bytes per frame. Your JSON alert doesn't fit. Stop Avoiding Bitwise Operators ERP Product Tree Denormalization: The Maintenance and Scale Conundrum We Leaked 1,368 Customers into Our LIVE Stripe Account via E2E Tests Overlay Widgets vs Real WCAG Scanners: A 2026 Buyer’s Guide How an Accessibility SaaS Broke Its Own Landing (and How We Fixed It) Building the harness around our coding agents: eight failure modes, eight pillars LynxDB - I wanted Splunk's query language without Splunk RAG Is Not Always the Answer Anymore: How AI Agents Search Code in 2026 I Leaked API Keys Through My .env File — Here's What I Learned About Secret Management Score Big with Power Apps: A Step-by-Step Guide to Custom Football APIs IaC Drift Is Inevitable — Design for Detection, Not Prevention I Built a CLI Tool That Writes Better Git Commits Than I Do Adding Text Selection to Bash I Built an Android App With Zero Backend — Here's What Happened I built toklock — the only Anthropic rate-limit proxy that queues requests instead of crashing your agents The Hardest Part of Building an Encrypted Journaling App Wasn’t Encryption Replicate MySQL to ClickHouse with Sling Why I Think the Next Big Blockchains Will Be Built Around AI, Not With AI on Top How to use the Specification Pattern to Clean Up Query Logic in C#, .NET AI may already be turning translators into proofreaders. Coders could be next? One API, every social image - dynamic OG, Twitter, LinkedIn, Pinterest, YouTube AI Agents Need Artifacts, Not Activity. What I Learned Shipping 7 Mac Apps in 12 Months — The Honest Retrospective Being pro-developer in the AI age Circuit Breaker Now Supports LangGraph and Vercel AI SDK Where Does the Data Go? A Comprehensive Guide to Databases Node.js wants to ban AI-generated code. They should. 07/20: Layer 2 – The Data Link Layer: Frames, MAC Addresses & Switches 5 Python Features That Made Me a Better Developer Why "flex" breaks your email in Outlook (and how to catch it in VS Code) Most Organizations Don't Have an AI Problem, They Have an Integration Problem I Built a Privacy-First PDF Toolbox — Your Files Never Leave the Browser The EU AI Act Was Written for Models. Your Agents Need Runtime Compliance. Your AI Agent on Kubernetes Is Probably Exposed to the Internet Right Now 723 Cycles of Zero-Sleep Autonomy: What Running 24/7 for Weeks Actually Looks Like AI Automation vs AI Augmentation: Know Which One You Are Actually Building A .NET Dinosaur in Web3. Day 13 — Access Control Transaction Hooks: A General Primitive for Post-Commit Side Effects (Case Study: Queuert) Lines vs Blocks(CSS): Divide & Grid Explained The Business Context Problem: Why Vulnerability Severity Scores Lie "How I Cut My Go Markdown Linter's Benchmark by 81%" Casting Resurrection on a Dead D&D Table The Story Behind Java: From C++ Limitations to Platform Independence Keep Appium out of your test code: BasePage + lazy locators How I use agents for my personal projects I Built a Compliance Health Scanner for Indian Startups in 24 Hours - Here’s What I Learned What AMQP compatibility means for a local Azure emulator Why I stopped rotating active log files in Python I built a tiny runtime for resumable agent workers The Cost of Showing Up: What the Productivity Advice Does Not Tell You About Being Visible Python Why I Rebuilt My Portfolio with Astro I finally gave my AI agents a shared memory and a team #Crew44 Kimsuky (APT43) — Analysis of the New PebbleDash · AppleSeed Toolset shadcn/ui is Not a Component Library Scaling Monorepos with Turborepo
Chat With Your Raspberry Pi — Control GPIO, Read Sensors, and Manage Services via Telegram Using Garudust
Garudust · 2026-05-26 · via DEV Community

Your Raspberry Pi is sitting at home doing something useful — logging sensor data, driving a relay, running a home assistant script. You're out. You want to check on it.

You used to SSH in from your laptop. Today you just open Telegram and ask.

You:    is the temperature sensor still working?
Agent:  ✓ ran: cat /sys/bus/w1/devices/28-*/w1_slave
        Current temperature: 24.3°C — sensor is responding normally.

You:    turn the fan relay on
Agent:  ⚠ This will trigger GPIO 18 — confirm? [y/n]
You:    y
Agent:  ✓ ran: python3 ~/scripts/relay.py on 18
        Relay ON. Fan is running.

Enter fullscreen mode Exit fullscreen mode

This is Garudust Agent with an SSH sandbox. The agent lives on a cloud VPS (or any server with internet access). You chat via Telegram. The agent SSHes into your Pi and runs whatever it needs to. Your Pi only needs SSH enabled — no extra software, no port forwarding for the agent.


How It Works

You (Telegram)
    │
    ▼
garudust-server          ← runs on a VPS or home server
(Telegram adapter)
    │
    │  SSH  (key auth, BatchMode, StrictHostKeyChecking)
    ▼
Raspberry Pi             ← just needs sshd running
(GPIO, sensors, scripts)

Enter fullscreen mode Exit fullscreen mode

The agent's terminal tool normally runs commands locally. With terminal_sandbox: ssh, every command is forwarded through ssh to the Pi instead. The agent never knows or cares — it still calls the same tool. The routing happens transparently in the sandbox layer.


Prerequisites

  • A Raspberry Pi with SSH enabled (any model, any recent Raspberry Pi OS)
  • A server to run Garudust on — a $5 VPS, another machine on your network, or even the Pi itself pointing at localhost
  • A Telegram bot token (from @BotFather)
  • Garudust installed on the server
# On the server — install Garudust
curl -LO "https://github.com/garudust-org/garudust-agent/releases/latest/download/garudust-$(curl -s https://api.github.com/repos/garudust-org/garudust-agent/releases/latest | grep tag_name | cut -d'"' -f4)-x86_64-unknown-linux-musl.tar.gz"
tar -xzf garudust-*.tar.gz && sudo mv garudust garudust-server /usr/local/bin/

Enter fullscreen mode Exit fullscreen mode


Step 1 — Set Up a Dedicated SSH Key

Never use your personal SSH key for an agent. Create a dedicated one on the server:

ssh-keygen -t ed25519 -f ~/.ssh/garudust_pi -N "" -C "garudust-agent"

Enter fullscreen mode Exit fullscreen mode

Copy the public key to the Pi:

ssh-copy-id -i ~/.ssh/garudust_pi.pub pi@192.168.1.50
# or if Pi is not on the same network yet:
# cat ~/.ssh/garudust_pi.pub | ssh pi@<pi-ip> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Enter fullscreen mode Exit fullscreen mode

Verify it works without a password prompt:

ssh -i ~/.ssh/garudust_pi -o BatchMode=yes pi@192.168.1.50 "echo OK"
# → OK

Enter fullscreen mode Exit fullscreen mode


Step 2 — Configure Garudust

~/.garudust/.env:

ANTHROPIC_API_KEY=sk-ant-...       # or any supported provider
TELEGRAM_TOKEN=123456789:AAFxxx    # your bot token

Enter fullscreen mode Exit fullscreen mode

~/.garudust/config.yaml:

security:
  approval_mode: smart             # read-only commands auto-approve, writes ask first
  terminal_sandbox: ssh
  ssh_host: "192.168.1.50"         # your Pi's IP (or hostname)
  ssh_user: "pi"
  ssh_port: 22
  ssh_key_path: /home/youruser/.ssh/garudust_pi

platforms:
  telegram:
    enabled: true
    port: 8443
    webhook_path: /telegram

roles:
  default_role: ~                  # strangers get no access
  definitions:
    owner:
      approval_mode: auto          # full auto-approve for you
  users:
    telegram:
      "YOUR_TELEGRAM_USER_ID": owner

Enter fullscreen mode Exit fullscreen mode

Find your Telegram user ID by messaging @userinfobot.

Start the server:

garudust-server

Enter fullscreen mode Exit fullscreen mode


What You Can Now Do

Read Sensor Data

DS18B20 temperature sensor (1-Wire):

You:    temperature?
Agent:  24.3°C

Enter fullscreen mode Exit fullscreen mode

You:    log temperature every 10 seconds for 1 minute and tell me the average
Agent:  ✓ ran: for i in $(seq 6); do cat /sys/bus/w1/devices/28-*/w1_slave | grep t= | awk -F= '{print $2/1000}'; sleep 10; done
        Readings: 24.1, 24.2, 24.3, 24.3, 24.4, 24.2
        Average: 24.25°C

Enter fullscreen mode Exit fullscreen mode

DHT22 humidity + temperature:

You:    humidity and temp from the DHT22
Agent:  ✓ ran: python3 ~/scripts/dht22_read.py
        Temperature: 24.3°C  Humidity: 58.2%

Enter fullscreen mode Exit fullscreen mode


Control GPIO (Relay, LED, Motor)

You:    turn on the garden lights (relay on GPIO 18)
Agent:  ⚠ This will modify GPIO state — confirm?
You:    yes
Agent:  ✓ ran: python3 ~/scripts/relay.py on 18
        GPIO 18 HIGH — relay activated.

You:    set the LED strip to blue
Agent:  ✓ ran: python3 ~/scripts/led_strip.py color 0 0 255
        Done.

You:    turn everything off
Agent:  ✓ ran: python3 ~/scripts/all_off.py
        All GPIO outputs set LOW.

Enter fullscreen mode Exit fullscreen mode


Check System Health

You:    how is the Pi doing?
Agent:  ✓ ran: vcgencmd measure_temp && free -h && df -h / && uptime
        CPU temp:    52.1°C
        RAM:         823 MB used / 1.9 GB total
        Disk:        12 GB used / 29 GB total (41%)
        Uptime:      14 days, 3 hours

You:    is anything hogging the CPU?
Agent:  ✓ ran: ps aux --sort=-%cpu | head -6
        python3 sensor_logger.py   4.2%
        node    homebridge          2.8%
        Everything else < 1%.

Enter fullscreen mode Exit fullscreen mode


Manage Services

You:    restart homebridge
Agent:  ⚠ This will restart the homebridge service — confirm?
You:    y
Agent:  ✓ ran: sudo systemctl restart homebridge
        homebridge restarted. Status: active (running).

You:    is the camera stream still up?
Agent:  ✓ ran: systemctl is-active mjpg-streamer
        active

You:    show me the last 20 lines of the sensor log
Agent:  ✓ ran: tail -20 ~/logs/sensor.log
        [2026-05-26 14:01] temp=24.3 hum=58.2
        [2026-05-26 14:02] temp=24.4 hum=57.9
        ...

Enter fullscreen mode Exit fullscreen mode


Run Your Own Scripts

The agent can run any script already on the Pi. You don't need to teach it the commands — just describe what you want:

You:    water the plants for 30 seconds
Agent:  ✓ ran: python3 ~/scripts/sprinkler.py on 30
        Valve opened. Will close in 30 seconds.

You:    take a photo and tell me if the bird feeder is empty
Agent:  ✓ ran: raspistill -o /tmp/feeder.jpg -w 1280 -h 720
        [reads image]
        The feeder appears about 30% full — seeds visible on the left side.

Enter fullscreen mode Exit fullscreen mode


Automate With Cron

Set recurring checks without staying in the chat:

# config.yaml
cron:
  timezone: "Asia/Bangkok"
  jobs:
    - schedule: "0 8 * * *"
      task: "check Pi health and send a morning summary to Telegram"
    - schedule: "*/30 * * * *"
      task: "read the temperature sensor; if above 70°C send a warning to Telegram"

Enter fullscreen mode Exit fullscreen mode

Now the agent proactively messages you — no need to ask.


Security Notes

A few things worth knowing before you deploy this:

The SSH connection is hardened automatically. Garudust uses BatchMode=yes (no password prompts), StrictHostKeyChecking=accept-new (rejects changed host keys to prevent MITM), and clears the subprocess environment before spawning ssh so no API keys or secrets reach the Pi.

Approval mode gates destructive commands. With approval_mode: smart, read-only commands (reading sensors, checking logs, git status) run without asking. Anything that modifies state asks for confirmation first. Set approval_mode: auto only for yourself after you've tested it.

Lock down the pi user if you want to go further. Restrict the SSH key to specific commands using command= in authorized_keys, or run the agent's SSH user in a dedicated account with only the scripts it needs to call.

The Pi never exposes a port to the internet. The agent SSHes out from the server to the Pi — the Pi only needs port 22 open to your server, not to the world.


What's Next

  • Multiple Pis — point different agent sessions at different hosts; or build a thin wrapper script that SSHes to the right Pi based on what you ask
  • Voice control — pair with iApp TTS to get spoken responses back on a speaker connected to the Pi
  • Skill learning — after you run a workflow a few times, Garudust automatically writes it as a reusable skill so you don't need to describe it step by step anymore

The full source for Garudust is at garudust-org/garudust-agent. The SSH sandbox landed in v0.13 — grab the latest binary from Releases or build from source with cargo build --release.