嗨,HN,
我一直在实验一种名为 FLUX 的消息协议。其目标是探索如果今天设计电子邮件,它会是什么样子,而不是在1980年代。
FLUX 尝试简化当前电子邮件系统中一些复杂的部分。身份验证基于加密密钥,而不是用户名和密码。消息会自动签名和验证。传输是实时的,不依赖于传统的 SMTP 中继模型。
目前的实现很小,旨在作为原型。整个服务器只有几百行 Python 代码,因此该协议易于阅读和实验。
代码库: [https://github.com/levkris/flux-protocol](https://github.com/levkris/flux-protocol)
我主要对协议设计的反馈感兴趣。实际部署中会出现什么问题?哪些部分是多余的?为了使这样的系统在开放互联网中真正运作,需要具备哪些条件?
感谢您抽出时间查看。
levkris (wokki20)
返回首页
最新
v0.5.0-alpha.1版本带来了MCP支持、调试面板、启动时显著的性能提升、更流畅的Github CoPilot集成、垂直分屏、git提交生成以及Markdown预览缓存等功能。
嗨,HN,
我是来自维也纳的马里奥。我是我家指定的“IT专家”(他们打电话给我来插入Scart线或设置Chrome)。
几周前,我花了两个多小时与Docker(以及一些当时我不熟悉的终端命令)斗争,只是为了让一个基于命令行的AI代理运行。它占用了我所有的内存,我意识到:我的妻子、我的非技术客户,或者我六岁的儿子根本无法设置这个。如果我部署这样的东西,我将花费我的一生来提供设置支持(这不仅仅是找到遥控器上的HDMI 1到HDMI 2输入)。
在过去的两年里,我一直在与大型语言模型(LLMs)“嗨编程”,主要是构建常见的登陆页面或简单的复古游戏,以向我的儿子展示我们生活在一个疯狂的时代,你可以通过提示构建很多“有趣”的东西。我决定将我一个旧的、失败的Laravel SaaS(Skales)转型为一个本地桌面应用程序,以解决这个设置地狱。
我想要达到的唯一目标是:一个像普通应用程序一样安装的自主AI代理(.exe / .dmg)。不需要博士学位。下载、安装、完成。
这实际上成功了。我的60多岁的妈妈立刻就能运行它(那么…Skales现在是一个获得奶奶认可的AI代理吗?),而我的六岁儿子利用内置的编程技能制作了自己的复古游戏(我不会说这真的算是一个“游戏”,因为它基本上是超级马里奥的一个关卡复制品——但他喜欢它)。
它的功能包括:
ReAct自动驾驶、双时态记忆、浏览器自动化(Playwright)和本地集成(Gmail、Telegram、日历)。
BYOK:支持OpenRouter、OpenAI、Anthropic或本地Ollama。
技术栈:Electron + Next.js + Node.js(我设法将空闲内存保持在约300MB左右)。
所有数据都存储在~/.skales-data中。
我知道,作为一个“设计师,嗨编程了一个Electron应用”的人(或者市场营销人员)对HN人群来说基本上是新鲜肉。欢迎对架构提出批评!但我的主要目标只是让这些令人难以置信的AI工具能够用于日常任务(格式化简历、发送PDF、构建简单游戏),而无需接触终端或在不同工具之间切换。
许可证说明:该项目采用BSL-1.1(源代码可用,个人使用免费)。我选择这个许可证只是因为我不想让一家大公司直接拿走这个代码库,围绕Skales建立品牌并进行商业转售,但我希望代码能够供社区使用和学习。
(请原谅我的英语——我不是母语者)
非常希望能听到你们对用户体验的诚实反馈(可能还可以更好?)!
GitHub: [https://github.com/skalesapp/skales](https://github.com/skalesapp/skales)
网站: [https://skales.app](https://skales.app)
嗨,HN!<p>我开发了 lobster.js,这是一个扩展的 Markdown 解析器,可以直接在浏览器中渲染——无需构建工具、框架或配置。<p>整个设置只需一个脚本标签:<p><pre><code> <script type="module">
import { loadMarkdown } from "https://hacknock.github.io/lobsterjs/lobster.js";
loadMarkdown("./content.md", document.getElementById("content"));
</script>
</code></pre>
这对于希望在 GitHub Pages 网站上使用 Markdown 驱动内容而不引入 Jekyll 或 Hugo 的用户特别有用。<p>---<p>与 marked.js 或 markdown-it 的不同之处在于:<p>标准解析器将 Markdown 转换为 HTML——仅此而已。lobster.js 在 Markdown 语法中添加了布局原语:<p>- :::warp id 定义一个命名的内容块;[~id] 将其放置在一个静默的表格单元格内。这就是如何完全在 Markdown 中构建多列布局,而无需接触 HTML。
- :::details Title 渲染一个原生的 <details>/<summary> 可折叠块。
- :::header / :::footer 定义语义页面区域。
- 静默表格 (~ | ... |) 创建无边框的布局网格。
- 单元格合并:水平(\|)和垂直(\---)跨度。
- 图像大小调整:。<p>---<p>以 CSS 为先的设计:<p>每个渲染的元素都有一个可预测的 lbs-* 类名(例如 lbs-heading-1,lbs-table-silent)。没有默认的样式表捆绑——你可以使用自己的 CSS,完全控制外观。<p>---<p>展示网站本身就是用 lobster.js 构建的。侧边栏是 nav.md,每个页面都是通过 ?page= 查询参数动态加载的独立 Markdown 文件——没有 JS 路由器,没有框架。<p>Markdown 是人类和大型语言模型(LLM)都能流利书写的唯一格式。如果你想要一个没有构建管道的结构化静态网站,lobster.js 让 Markdown 成为一个完整的网页——包括布局。<p>GitHub: <a href="https://github.com/Hacknock/lobsterjs" rel="nofollow">https://github.com/Hacknock/lobsterjs</a>
展示网站: <a href="https://hacknock.github.io/lobsterjs-showcase/" rel="nofollow">https://hacknock.github.io/lobsterjs-showcase/</a>
为Claude Code发布页面技能——用一句话描述您的产品,获取完整的着陆页。
这是一个Claude技能,可以让我为特定的工作单元开启或关闭成本追踪。
我在互动的Claude代码会话中使用它。例如,如果我想在一个应用程序中添加一个Claude API功能,我通常会先在CC中进行快速开发。这个技能让我可以开始和停止追踪,从而了解API的成本。
例如:
```
/cost-tracking
[执行操作]
停止追踪
```
然后我会得到一个漂亮的小表格,显示所使用模型的令牌和成本:
Haiku成本报告(本次会话的工作):
```
┌───────────────────┬───────────┬─────────┐
│ 类别 │ 令牌数 │ 成本 │
├───────────────────┼───────────┼─────────┤
│ 基础输入 │ 182 │ $0.0002 │
├───────────────────┼───────────┼─────────┤
│ 输出 │ 3,276 │ $0.0164 │
├───────────────────┼───────────┼─────────┤
│ 缓存写入 (1小时) │ 25,619 │ $0.0512 │
├───────────────────┼───────────┼─────────┤
│ 缓存读取 │ 1,585,531 │ $0.1586 │
├───────────────────┼───────────┼─────────┤
│ 总计 │ │ $0.2264 │
└───────────────────┴───────────┴─────────┘
```
我一直是 fly.io 的忠实粉丝,因为它的开发体验非常好,但冷启动和定价一直是个持续的问题。即使是侧项目,如果加载时间达到 30 秒,那也是相当痛苦的,这会彻底破坏整个体验。
随着编码代理的不断进步,我开始构建更多的项目,我只想运行这些项目!GCI 就是为了解决这个问题而创建的。它只是一个命令行工具,通过 SSH 与目标机器进行交互,并依赖 Docker Swarm 来运行你的服务(在我看来,Docker Swarm 被低估了,即使在单节点情况下也能提供好处)。
它可以部署在任何可以通过 SSH 访问并运行 Docker 的机器上。GCI 填补了 Docker Swarm 和 fly.io 之间缺失的开发体验差距。它可以在本地构建镜像,将其传送到目标机器,获取日志,管理不同的服务器,等等。
可以在 GitHub 上查看,或者访问 <a href="https://gci.jonas.foo/" rel="nofollow">https://gci.jonas.foo/</a> 获取更详细的文档。