DevTrendsDeveloper trends
Accent color

DEV TRENDS / DAILY DISCOVERIES

Apr 26, 2026 · What developers are building

Daily discoveries from developer communities, independent makers, and open source.

pompelmi - 为 Node.js 开发者封装的 ClamAV 文件扫描库

工具简介 pompelmi 是一个极简的 Node.js 开源库(ISC 协议),对 ClamAV 进行了封装。 调用 scan() 扫描任意文件,返回一个类型化的 Symbol 结果: Verdict.Clean、Verdict.Malicious 或 Verdict.ScanError。 无需守护进程,无需云服务,无需原生绑定,零运行时依赖。 工作原理 1. 验证 — 检查参数是否为字符串,文件是否存在 2. 扫描 — 以子进程方式执行 clamscan nosummary <filePath,读取退出码 3. 映射 — 将退出码直接映射为结果 Symbol 不解析 stdout,不用正则,没有意外。 基本用法 js const { scan, Verdict } = require('pompelmi'); const result = await scan('/path/to/upload.zip'); if (result === Verdict.Malicious) { throw new Error('文件被拒绝:检测到恶意软件'); } 扫描结果说明 | 结果 | ClamAV 退出码 | 含义 | ||::|| | Verdict.Clean | 0 | 未发现威胁 | | Verdict.Malicious | 1 | 匹配到已知病毒或恶意软件签名 | | Verdict.ScanError | 2 | 扫描失败(I/O 错误、加密压缩包等),状态未知,建议视为不可信 | 每个 Verdict Symbol 都有 .description 属性,方便日志输出: js console.log(Verdict.Clean.description); // = 'Clean' 错误处理示例 js const { scan, Verdict } = require('pompelmi'); const path = require('path'); async function safeScan(filePath) { try { const result = await scan(path.resolve(filePath)); if (result === Verdict.ScanError) { console.warn('扫描未完成,作为预防措施拒绝该文件。'); return null; } return result; // Verdict.Clean 或 Verdict.Malicious } catch (err) { console.error('扫描失败:', err.message); return null; } } Docker / 远程扫描 如果 ClamAV 运行在 Docker 容器或远程服务器上,只需传入 host 和 port,其他不变: js const result = await pompelmi.scan('/path/to/upload.zip', { host: '127.0.0.1', port: 3310, }); 支持平台 | 系统 | ClamAV 安装命令 | ||| | macOS | brew install clamav && freshclam | | Linux | sudo aptget install y clamav clamavdaemon && sudo freshclam | | Windows | choco install clamav y | 项目信息 GitHub: npm: Stars:585+ 已被 Node Weekly、Stack Overflow Blog、Help Net Security 收录 支持 Express、Fastify、Next.js、NestJS、Koa 等主流框架

Original
DTSecurity & testingDTSoftware developmentDTLibrary / SDK
—

Vibe-Skills:一个自动调度340+Skills的AI任务执行的skills框架

一个面向 AI Agent 的标准化 Skills 执行框架。它内置 340+ skills,可在统一 harness 下自动拆分任务 阶段,并按阶段调用不同 skills,减少用户手动控制负担。同时支持自适应 TDD 开发流程、标准化信息存储和跨会话协作,让复杂任务更容易稳定交付。 口语一点来说:VibeSkills 是一个面向 AI Agent 的标准化 Skills 执行框架。它内置 340+ skills,可在统一 harness 下自动拆分任务阶段,它把复杂任务拆成需求确认、计划冻结、多代理执行、验证证据等阶段,并按阶段调用不同 skills,减少用户手动控制负担。 它还内置自适应 TDD 开发框架,以测试驱动任务完成,提升复杂任务交付质量。需求、计划、执行状态和验证结果会以标准化方式存储,方便跨会话继续工作,降低上下文管理负担。 主要特点: 标准化 harness:自动调度任务阶段,并在不同阶段调用对应 skills。 340+ skills 已整合:开发、测试、文档、研究、部署等能力开箱即用,减少用户对AI上手的学习负担。 自适应 TDD:以测试驱动任务完成,保证复杂任务的交付质量。 标准化信息存储:支持跨会话工作,减少上下文管理负担。 插件式 skills package:即插即用,易安装,可适配 Claude Code、Codex 等多种环境。 1.7k star,129 个 fork,Apache 2.0 许可证,过去 14 天内 11,299 个克隆。仓库乐于听取各种意见!在积极持续的更新。 架构示意图: 使用示例: vibeskills如何实践,及实践效果介绍(以轮椅的搓一个人脸识别模型,并直出latex论文为例)

Original
DTResearch & learningDTData & operationsDTAgent extension
—

邻云 - 让局域网设备互联

简介:为了更方便和同一局域网下的电脑交互,可以使用手机、电脑操控另一台电脑 功能 + 🔎自动搜索设备,授权后下次自动连接 + 📁 上传、下载文件 + 📸 手机给电脑截图,一键存入相册 + ▶️ 直接播放电脑共享的视频 + 🖥️远程屏幕,直接控制电脑操作 + ⌨️终端输入,执行命令 截图 主界面,可通过左右↔️滑动快速切换连接的设备 截图页面示意图

Original
DTSoftware developmentDTTerminal
—

ast-outline:AI的代码骨架阅读器,节省5–10倍Token

一句话:给LLM Coding Agent准备的“代码骨架”提取工具——只看类/函数/签名,不看函数体,帮你省下5–10倍的上下文Token。 卖点:用Rust编写,基于@HerringtonDarkholme的astgrep和@maxbrunsfeld的treesitter,毫秒级并行扫描整个目录。输出结构清晰,包含精确的起止行号(例如 L42L58),AI可以先看骨架,定位到具体方法后再读取完整代码段,不需要反复吞下整个文件。 典型场景: AI 编程助手:Claude Code、Cursor、Copilot Workspace 等 Agent 在理解陌生代码时,先用 astoutline digest src/ 拿到模块结构,再用 astoutline show Player.cs TakeDamage 精准读取方法体。 人类开发者:快速浏览一个大型文件的结构(类似 tree 但针对源代码),搞清楚文件里有哪些类、哪些函数。 代码审查:只看“接口签名”,忽略实现细节,快速理解模块边界。 功能: astoutline path/to/file.rs — 输出单个文件的结构轮廓 astoutline src/ — 并行递归扫描整个目录 astoutline show Player.cs TakeDamage — 精确提取指定方法的完整代码 astoutline digest src/Services — 输出整个模块的公共API一览 astoutline implements IDamageable src/ — 找出所有实现/继承某个类型的类 支持的语言:Rust、Python、TypeScript/JavaScript、C、Java、Kotlin、Scala、Go、Markdown。添加新语言只需要一个适配文件,利用astgrep生态。 安装: bash Homebrew (macOS) brew install aeroxy/astoutline/astoutline Cargo cargo install astoutline 和astgrep的关系:astoutline依赖astgrep作为底层语法解析引擎,但职责完全不同。astgrep是通用的代码搜索/重构工具箱,astoutline是为AI定制的“代码骨架提取器”。 附言:代码完全开源,欢迎Star、提Issue、贡献新语言适配。

Original
DTSoftware developmentDTAgent extensionDTAgent orchestration
—

让Claude Code有超越GPT Image 2的能力

claudeimage 是一个 dropin 的 Claude Code / Codex skill 包,专门 教 AI 编程 agent 真正用好 OpenAI 在 2026 年 4 月发布的 GPT Image 2。 为什么需要它 GPT Image 2 是这一代图像模型的分水岭:长指令式 prompt 不再丢细节, 中日韩文字渲染终于正确,自定义分辨率最长 3840px,编辑端点支持 "change ONLY X / preserve Y exactly" 的外科手术级局部修改。 但 2026 年 4 月之前训练的 agent 完全不知道这些。它们仍然用老办法 写 prompt——"4K, ultra detailed, masterpiece, trending on artstation"——这些咒语在 GPT Image 2 上要么被忽略,要么帮倒忙。 它们粘 curl 命令而不存文件,生成完之后还会反过来问你"这看着对吗?" 这个 skill 把这些全修了。 三个让它真正起作用的设计 1. 可发现的 frontmatter 里列全了"海报"、"图标"、 "ppt 素材"、"改图"、"draw me"、"make an image" 等触发词, agent 的 skill 选择器会真的命中,而不是回退去自己拼 curl。 2. 一个 CLI,四种能力:生成 / 编辑 / 局部重绘 / 并行批处理 都是同一个 Python 脚本的子命令,零依赖(只用 urllib)。 3. 视觉自验证写进了工作流:skill 明确要求 Claude 在交付前 Read 自己生成的 PNG,对照 prompt 检查文字、构图、约束。 有问题就一次只改一个维度重生成。再也不会出现"图给你了, 你看对不对"。 它能做什么 Pitchdeck 幻灯片(像真正的 Series A 董事会幻灯片,不是"画一张幻灯片的插图") 中文海报(楷书 / 黑体 / 思源黑体,渲染干净,不出乱码字) 写实 UI mockup(真实设备外框 + 合理的任务名 / 字体 / 配色) 像素图、tileset、角色三视图、游戏物品图标 信息图、logo 概念图、写实产品图 外科手术级修图("change ONLY 天空 / preserve 其它一切" 模式) 装完下次有图像请求 Claude 自动发现 skill,不用重启。 Codex 用户把路径换成 ~/.agents/skills/gptimage2 即可。

Original
DTLifestyle & entertainmentDTSoftware developmentDTAgent extension
—

SiftMarks:把混乱的 Chrome 书签变成本地 AI 记忆库

一句话:SiftMarks 是一个本地优先的 AI 书签管理工具,可以把混乱的 Chrome 书签导入、整理、搜索,并通过 MCP 交给 Claude、Cursor、Windsurf 等 AI 工具使用。 为什么做这个:浏览器书签很容易保存,但时间久了会变成重复链接、空文件夹、含糊标题和找不到的资料。SiftMarks 想解决的是“收藏容易,找回困难”的问题,让书签更像一个可搜索的本地记忆库。 主要特点: 本地优先:默认使用 SQLite,本地保存书签数据,不需要账号。 Chrome 扩展导入和同步回写:可以从 Chrome 导入书签,也可以把接受后的整理结果同步回 Chrome。 像 Pull Request 一样整理书签:重复链接、重命名、标签、失效链接等建议先审查,再决定是否应用。 搜索书签记忆:支持关键词搜索,后续可接入 AI Provider 做更接近“记忆”的搜索。 MCP 支持:可以让 Claude、Cursor、Windsurf 等 AI 客户端搜索和读取本地书签库。 中英文 README + 演示视频:仓库里包含截图和一个 20 秒左右的演示视频。 适合人群:开发者、研究者、资料收集重度用户,以及任何 Chrome 书签栏已经变得难以维护的人。 演示视频: 技术栈:TypeScript monorepo、Next.js、Chrome Extension、SQLite、MCP Server。

Original
DTResearch & learningDTSoftware developmentDTAgent extension
—

FlowSound:自动管理 macOS 音频焦点,让音乐成为真正的“背景”

✨ 我为什么做 FlowSound? 日常使用 Mac 时,我一直被一个很小但反复出现的问题困扰: 我希望 Apple Music / Spotify 一直作为背景音乐播放 但当我打开视频(YouTube / Telegram / 浏览器)时 👉 不希望音乐和视频声音混在一起 而当视频结束后 👉 又不想手动回去点播放 这个“切换注意力”的过程,本质上是一个音频焦点(audio focus)问题。 但 macOS 并没有提供一个统一、自动的机制来处理它。 于是我做了 FlowSound —— 一个自动帮你管理音频注意力的工具。 🔧 FlowSound 是什么? FlowSound 是一个 macOS 菜单栏应用: 🎵 保持 Apple Music / Spotify 作为背景音乐 🔇 当其他 App 开始播放声音时: 自动淡出(fade out) 自动暂停音乐 🔊 当环境安静后: 自动恢复播放 自动淡入回原音量 👉 整个过程是连续、自然的,而不是突兀的 pause/play。 🧩 技术实现(给开发者的部分) 这个项目的核心不是 UI,而是系统层协调: 🎧 Core Audio process taps 实时监听系统中各进程的音频输出(RMS) 🧠 状态机(state machine) 避免反复 pause / resume 抖动 🎚️ 音量渐变控制(fade in/out) 🍎 AppleScript 自动化 控制 Apple Music / Spotify 🔍 Bundle ID 级别的进程识别 macOS 26+ 支持更精确监听 👉 本质是: 系统音频信号 + 进程识别 + 行为编排(orchestration) ⸻ 🔐 安全性与隐私(我最在意的一点) FlowSound 从一开始就是 localfirst 设计: ❌ 不联网 ❌ 没有 analytics ❌ 没有广告 ❌ 不上传任何音频 ❌ 不保存捕获的音频数据 它只做一件事: 判断“是否有其他 App 在发声”,而不是“发了什么声音”。 控制音乐也完全通过本地 Apple Events 完成。 👉 你可以把它理解为一个: 纯本地的系统自动化工具,而不是一个数据产品 ⸻ 📦 开源与可验证性 所有代码完全开源 Release 由 GitHub Action 通过源码打包,提供 SHA256 校验 可自行 build / audit 👉 我希望这个项目是可以被信任的工具,而不是黑盒软件 ⸻ 🧪 当前状态 已实现 MVP(稳定状态机 + 双音乐平台支持) 支持 Apple Music / Spotify macOS 15+ 后续方向: 支持更多音频应用 更细粒度的音频策略(如不同 App 不同行为) 更好的权限与用户体验设计 ⸻ 🔗 GitHub: 下载: 网站: ⸻ 🙋 想听听大家的想法 我特别想知道: 你有没有遇到类似的“音频冲突”问题? 如果开放规则系统,你希望怎么定义?

Original
DTSecurity & testingDTDesktop productivityDTWeb app
—

Evencers

Find & book decorators & photographers easily

DTResearch & learningDTContent / resource
—

Download Video

Download Instagram, YouTube, TikTok & Facebook videos in sec

DTSkill / pluginDTContent / resource
—

Statix

Monitor your PC with pets that bring it to life.

DTData & operationsDTDesktop productivityDTDesktop app
—

BRUH

A Meme based social media application

DTLifestyle & entertainmentDTiOSDTAndroid
—

FPVibe

Where FPV pilots share flights and find their crew.

DTiOSDTAndroid
—

DEV TRENDS / COMMUNITY

Discuss this edition

Sign in with GitHub to share a thought, question, or useful follow-up.

Open discussions ↗