Filter
Exclude
Time range
-
Near
でもSessionManagerとかCognitoぐらいは使ってもいいかもな。
1
342
Memory is the gap between an agent feeling like a real assistant and feeling like a chatbot that forgets you the moment you close the window. The article here shows how to add persistent memory to a Strands Gateway agent using Amazon Bedrock AgentCore Memory. It discusses two practical paths: a hooks-based approach for local development where you wire up load and save logic yourself, and a SessionManager approach that handles everything in a single line. The trade-offs between control and simplicity are laid out clearly. Anvesh Muppeda's article also covers the supporting pieces like Memory IDs, Actor IDs, Session IDs, and the IAM permissions your agent role actually needs to read and write events. Check it out! lckhd.eu/ktRs9T
3
14
770
Most agent demos look impressive until you close the terminal and realize the model has no idea who you are next time. The article below shows how you can help with this by adding AgentCore Memory to a Strands Gateway agent so context actually persists across sessions. The post compares two approaches, manual hooks versus the built-in AgentCoreMemorySessionManager, and lays out why the SessionManager route tends to be the cleaner fit for Runtime deployments. There is a good breakdown of memory IDs, actor IDs, session IDs, and the IAM permissions you will need. Anvesh Muppeda also shows how to create the memory resource through the CLI or boto3, wiring environment variables into agentcore.json, and verifying recall across invocations. Check it out! lckhd.eu/9clTDs #strands #AgentCore #memory #agents
2
3
20
1,582
AWS環境下では、TeraTermは使用されなくなってきていると感じる。 どちらかと言えば、SessionManagerでサーバに接続するのが一般的になりつつある気がしている。 EC2にWindowsServerの踏み台を作成して、そこでTeraTermを使用することがあるぐらいだと思う。
1
21
1,414
HTTPS over SSH over SSH over SessionManagerやで (´・ω・`)
SSH over SessionManagerで他のSSH接続用のトンネルを掘って踏み台ホストに接続して、もう一つのSSH接続でローカルホストに接続し、踏み台ホストの先のホストの先につながっているWeb管理画面をフォワーディング設定で画面転送する。 ↑ぱっと見何言ってるか分からんけど一応でけた、、 (´・ω・`)
2
192
AIエージェントが生成したPythonコードを安全に実行したい OurosはRustで書かれたサンドボックスPythonランタイム コンテナもVMも使わず ファイルシステム・ネットワーク・サブプロセスへのアクセスを完全に遮断 起動は1マイクロ秒未満 特徴: ・72のstdlibモジュール(json、re、datetime、asyncioなど) ・外部関数経由でのみホストと通信 ・SessionManagerで変数を永続化・fork・rewind可能 ・MCPサーバーとしてClaude CodeやCursorで利用可能 RLM(Recursive Language Model)パターンにも最適 ルートLLMが生成したコードがサンドボックス内で実行され 必要な時だけ外部関数を呼び出す Perplexity Computerのハッキング事件以来 AIエージェントのコード実行環境の安全性が議論されている Ourosはその答えの一つ GitHub: github.com/parcadei/ouros
1
1
5
364
Session Manager is a solid way to access #EC2 instances without SSH - I use it every day. Sessions are encrypted but using the default AWS-managed encryption keys may not be enough if your organization has specific compliance or key management requirements. You can setup your own customer-managed KMS keys for #SessionManager and the article here shows how. It includes setting up the key policy configuration and the common permission issues that trip people up, like the EC2 instance role needing #KMS access. The article from Sardarnoorulhassan is a practical guide with CloudTrail validation included. Check it out if you're interested in setting up solid encryption controls in your AWS environment. lckhd.eu/ujNpg5
1
2
234
【天天推文挑战 · 第四期 · Day 4】OpenClaw 源码解读系列(三):超硬核!深度解读消息处理调用链 本系列上一篇文章说到,getReplyFromConfig 是 OpenClaw 的关键函数,是所有推理的入口,本文让我们来深入看看它到底做了什么: 大家可能知道(如果不知道的,现在也知道了),OpenClaw 底层是使用一个开源的,名为 Pi 的 Agent 引擎(Github 会在下面给出),因此我们一直往下深入,就会看到对 Pi 代码的调用。 我们继续从 getReplyFromConfig 出发,梳理一下调用链: 可以看到,runEmbeddedAttempt 这个函数是我们的重点,接下来详细分析一下: 注意!这是一个 1000 多行的又臭又长的屎山函数,请鼓起勇气读下去: 1. 该函数的前几十行都是在进行各种数据和配置的 resolve 操作,包括:workspace 目录、当前工作目录、(如果启用了沙盒)解析 Sandbox 上下文等,然后将当前路径设置到工作目录 2. 接下来是 Skill 配置(文件第 332 行): 扫描工作目录下所有 Skill(如果没有配置 Skill 快照),其中 OpenClaw 做了一个 ENV 注入的功能:配置文件或者运行时我们可以为每个 Skill 添加配置,其中配置项就包含 env(环境变量),我们为每一个 Skill 定义的 env 都注入到 proces.env(applySkillEnvOverrides 函数),并提供一个恢复函数用于撤销 proces.env 变化(在最后调用)。 然后通过 resolveSkillsPromptForRun 函数构建每个符合条件的 Skill 的提示词,得到 skillPrompt,参与构建最终的系统提示词。 OpenClaw 的 Skill 是 Pi Agent SDK 中 Skill 的拓展,它本身也是一个比较庞大的模块,本系列后续会拿出来单独介绍,这里就不做详细展开了。 3. Skill 配置完毕后,开始准备 Tool(文件第 384 行): 通过 createOpenClawCodingTools 函数,根据当前会话来找到对应的策略,再根据策略来筛选有效的工具(在 OpenClaw 中,私聊和群聊的工具策略(Tool Policy)是不一样的,可以单独配置) 最终,OpenClaw 会默认给我们创建以下工具,并根据工具策略来进行过滤然后返回给 LLM: - 封装 Pi Agent SDK 的内建工具(来自 codingTools):read、bash、write、edit - 执行工具:exec、process - OpenAI 工具(仅 OpenAI 下构建):apply_patch - OpenClaw 工具(来自 createOpenClawTools):message、browser、canvas、cron、gateway、nodes - Channel 工具(来自 listChannelAgentTools):由 Channel 和外部插件定义 4. 接着就是构建系统提示词了(文件第 530 行): 通过 buildEmbeddedSystemPrompt 函数构建系统提示词,然后分别注入:ToolLines(包含工具信息)、ReasoningHint、skillsSection(通过 buildSkillsSection 构建)、memorySection(通过 buildMemorySection 构建)、docsSection(通过 buildDocsSection 构建)、Messages(通过 buildMessagingSection 构建)等一共 25 个部分。 因此,OpenClaw 每次输入给 LLM 的提示词其实是非常庞大的,不仅仅大家所熟知的那几个 Markdown,还有许多定义在代码里的 Prompt 模板的内容以及额外注入的部分。这就是导致 OpenClaw 如此昂贵的原因(同时也是他聪明的一部分原因) 提示词也是一个比较庞大的模块,具体可以留在以后的文章中介绍,这里不做深入展开了 5. 创建 SessionManager(文件第 612 行): 除了大家所熟知的 Skill、Tool 和提示词外,还有一些关键步骤,比如会话管理。 OpenClaw 的会话管理是继承自 Pi Agent SDK 的,并在此之上做了很多拓展,让我们看这行代码: sessionManager = guardSessionManager(SessionManager.open(...), { ... }); 其中,SessionManager.open 是 Pi Agent SDK 中的函数,通过读取一个 session 文件(JSONL 格式)来创建一个 SessionManager。SessionManager 是一个对话历史管理器,他通过把每一条对话记录到一个 JSONL 文件中(每条消息都写入)来记录一个会话的所有历史消息。 OpenClaw 通过自定义的 guardSessionManager 函数对这个 SessionManager 进行了一层封装,添加了 flushPendingToolResults 函数(用于终止所有未成功的工具调用并进行异常处理),并通过 Monkey Patch 的技巧(我的第二期挑战 Day 7 介绍了这个技巧)重写了 appendMessage 函数(用于插入一些安全过滤、维护工具调用跟踪表等逻辑)。 这一层封装主要是为 SessionManager 添加了保护机制,并且实现了一个工具调用 Pending Map(跟踪已发出但尚未收到结果的工具调用),对所有工具调用进行统一处理(包括未知工具过滤、截断过大的工具调用结果、错误处理)以及 Plugin Hooks 的集成。 其实这一步也是比较难以直观理解的,后续的推文里可以举几个小例子做补充说明。 6. 创建 SettingsManager(文件第 629 行): SettingsManager 也是 Pi Agent SDK 里定义的对象,它用于管理 Pi Agent 的全局设置,包括:模型和思考设置、会话压缩(compaction)、重试机制、消息传递等配置项。默认保存一个全局设置在 ~/.pi/settings.json 和一个本地设置在 ~/.openclaw/agents/<id>/settings.json(实际上我们并找不到这些文件,因为他们不是必要的)。OpenClaw 会将自己的 compaction 配置项应用到 SettingManager 中(但不会造成 settings 文件的保存)。 7. 创建 AgentSession(文件第 687 行): 调用 createAgentSession 创建一个 AgentSession 对象,这个函数是直接调用了 Pi Agent SDK,通过一个 SessionManager 和 SettingsManager 等参数生成一个 AgentSession 对象,这个对象包含了一个 Pi 的 Agent 实例 —— 是的,直到这里开始我们才开始实例化 Pi 的 Agent 对象(activeSession.agent)。 但是 OpenClaw 也不是直接使用这个对象,而是再次进行了许多深度化的包装和重写(也是通过 Monkey Patch 的技巧),包括: - installToolResultContextGuard 函数:对过长工具结果进行截断(705 行) - 对使用 ollama 模型的情况进行特殊处理(738 ~ 750 行) - 对思考过程可视化的处理(774 ~ 792 行) - 对工具调用可视化的处理(799 ~ 818 行) - Anthropic Payload 日志包装(821 行) - …… 上面这些包装处理都是对 activeSession.agent 进行了深度的修改 另外,在不起眼的第 700 行,applySystemPromptOverrideToSession 函数完成了系统提示词的注入(注入到这个 AgentSession 中) 8. 清理和修复对话历史(文件第 827 行): 通过 sanitizeSessionHistory 函数,清理和修复对话历史,确保消息格式符合不同 LLM Provider 的要求。这是一个多层清理管道,在发送给 LLM 之前对消息进行各种转换和修复,以满足不同类型 LLM 的输入要求 9. 订阅 Pi Agent 事件(文件第 920 行): Pi Agent 的消息输出、工具调用等都是通过事件的方式发射出来,需要进行订阅才能处理。通过 subscribeEmbeddedPiSession 函数来处理 Pi Agent 的消息,他会订阅并对消息进行处理,比如进行工具调用、LLM 结果更新等。(这个函数也是异常复杂,具体的监听逻辑在 createEmbeddedPiSessionEventHandler 函数内,在 src/agents/pi-embedded-subscribe.handlers.ts 文件里) 10. 插件处理:接下来进行了一大堆的插件处理代码,这里就略过不分析了 11. activeSession.prompt (文件第 1179/1181 行): 我们终于找到真正的 Pi Agent 调用入口了! 前面历尽千辛万苦,就在等这一句 prompt 函数,我们终于成功把用户的消息(如果有图片,会把图片内容)发送给 Pi Agent Runtime 了! 接下来就是 Pi Agent 的内部处理。由于前面 OpenClaw 对 Pi Agent 进行了深度的包装和重写,在 Pi Agent 的生命周期过程中就会触发 OpenClaw 注入的代码,整个流程就跑通了! 12. 在剩下的代码里,OpenClaw 还实现了很多 LLM 调用过程的中断、消息插入、日志追踪等处理,本文篇幅已经足够长了,这里就不再过多展开了 最后补充一个完整的调用流程图:
6
6
648
opus4.6でTablePlusから移行のためDBツール OverSSHとAWS SessionManager対応 機能もりもり追加できるから結構いい
2
465
4000 行代码打造极简版 OpenClaw,仅占 OpenClaw 代码量 1%、发布 5 天 Github 超 10K ⭐️ 🐱 nanobot,来自 HKUDS 架构设计:四层分层解耦的消息驱动系统 · 接入层:Channels (Telegram/Discord/ WhatsApp/Feishu/CLI)  · 消息路由层:Message Bus (asyncio.Queue)  · 核心推理层:Agent Loop (LLM ↔ Tool Execution)  · 模型抽象层:Providers (LiteLLM → 8  LLM backends) 消息总线是整个系统的纽带。所有 Channel 将用户消息封装为 InboundMessage,发布到总线;Agent 处理后产生 OutboundMessage,再由总线路由回对应 Channel。这种解耦使得新增一个通道只需实现消息的收发接口,不触碰核心逻辑。 核心引擎:Agent Loop 详解 Agent 的推理循环实现在 agent/loop.py 中,这是整个项目最关键的约 300 行代码。其逻辑可以概括为一个经典的 ReAct 循环。 关键设计决策: 1. 最大迭代次数限制:默认 max_iterations=20,防止无限循环。Subagent 进一步收紧到 15 次。 2. 会话管理:通过 SessionManager 维护每个 channel:chat_id 对的对话历史,LLM 调用时自动注入历史上下文。 3. 系统消息路由:Subagent 完成任务后通过总线发送 channel="system" 的消息,由主 Agent 接收并转述给用户,形成一个优雅的异步任务闭环。 工具系统:插件化的 Tool 抽象 nanobot 的工具系统建立在一个精简的抽象基类 Tool 之上: · 文件系统操作:read_file / write_file / edit_file / list_dir · Shell 命令执行:exec · 网页搜索(Brave API)与抓取:web_search / web_fetch · 向聊天频道发送消息:message · 启动后台子 Agent:spawn · 定时任务管理:cron 上下文构建:Prompt 工程的分层组装 context. py 展示了 nanobot 如何组装 system prompt,其逻辑为分层叠加: 1. 核心身份 — 自动生成,包含当前时间、运行环境、工作区路径 2. Bootstrap 文件 — 读取工作区下的 AGENTS. md、SOUL. md、USER. md 等自定义人格文件 3. 记忆上下文 — 从 memory/MEMORY.md(长期记忆)和 memory/YYYY-MM-DD.md(日记)中加载 4. 技能上下文 — 分两级加载: · Always-on 技能:完整内容直接注入 prompt · 可用技能列表:仅注入摘要(XML 格式),Agent 需要时通过 read_file 按需加载 这种渐进式加载策略有效控制了 token 消耗,同时让 Agent 保持对可用能力的感知。 LLM 提供商:LiteLLM 统一接口 nanobot 没有为每个 LLM 厂商写独立适配器,而是采用 LiteLLM 作为统一中间层。providers/litellm_provider.py 是唯一的具体实现,通过 LiteLLM 的路由层对接: · OpenRouter(推荐,一个 key 接入所有模型) · Anthropic / OpenAI / DeepSeek / Gemini / Groq 等直连 · vLLM 本地模型(任意 OpenAI 兼容服务器) · DashScope(通义千问)、AiHubMix、Moonshot/Kimi Subagent 机制:轻量级后台任务 subagent. py 实现了一个值得关注的模式:主 Agent 可以通过 spawn 工具启动后台子 Agent。子 Agent 拥有独立的工具集(去掉了 message 和 spawn 工具,防止递归生成)、独立的上下文和系统提示词,运行在独立的 asyncio.Task 中。 子 Agent 完成后,通过消息总线向主 Agent 发送一条系统消息,主 Agent 再将结果转述给用户。这个设计让 nanobot 具备了并行处理多任务的能力,同时保持了架构的简洁性。 记忆系统:基于文件的持久化 记忆系统极为简单——纯 Markdown 文件: · memory/MEMORY.md:长期记忆,由 Agent 自行维护 · memory/YYYY-MM-DD.md:日记文件,按天存储 没有向量数据库,没有嵌入检索,没有复杂的记忆蒸馏。get_recent_memories(days=7) 直接读取最近 7 天的文件拼接。这种方案在小规模使用场景下完全够用,且极易调试和手动编辑。 技能系统:Markdown 驱动的能力扩展 技能本质上是工作区或内置目录下的 SKILL. md 文件,包含 YAML frontmatter 元数据和 Markdown 正文。技能可以声明依赖(CLI 工具、环境变量),系统会自动检测可用性。 两级优先级:工作区技能 > 内置技能。同名时工作区技能覆盖内置技能,方便用户定制。 开源地址 github.com/HKUDS/nanobot
OpenClaw is hard, try 🐈nanobot? Your personal JARVIS reimagined: faster, lighter, simpler. nanobot hits 10k GitHub ⭐ in just 5 days!! Started as a simple goal: build an ultra-lightweight personal AI assistant — never expected this level of love from the community. Why devs are falling in love with nanobot: 🐈nanobot or 🦞openclaw? 📝 Code: 4k lines vs 430k lines → 99% smaller, actually readable ⚡ Setup: 10 seconds vs hours of dependencies → pip install and you're done 💻 Resources: Runs 24/7 on any laptop vs heavy Mac mini setup → Deploy anywhere 🔍 Security: Crystal clear & auditable vs black box complexity → You know exactly what's running GitHub link: github.com/HKUDS/nanobot #nanobot #Clawdbot #OpenClaw #AIAssistant #Agents
2
17
79
13,996
data = {"a": 1.1, "b": 0.4, "c": 0.73} result = normalize(data)(SNEAKO) manager = SessionManager() for i in range(5): status = manager.step(i) log.append(status)
3
84