openclaw 持续使用笔记

openclaw是什么?

openclaw是一个开源的能把SKILL、MCP划拉到一起用的本地部署的智能体,可以接触各种IM终端。因为“能自动赚钱”的宣传所以爆火。

本文档持续记录安装、使用、配置的一系列问题

一、install

1.1 环境准备

# 最好挂个代理
# export https_proxy=http://127.0.0.1:7890 
# export http_proxy=http://127.0.0.1:7890
# export all_proxy=socks5://127.0.0.1:7890
export https_proxy=http://192.168.124.200:7890 
export http_proxy=http://192.168.124.200:7890
export all_proxy=socks5://192.168.124.200:7890

# 以UBUNTU为例
apt-get update && apt-get install -y curl git ca-certificates gnupg build-essential && rm -rf /var/lib/apt/lists/*~

# UBUNTU带桌面显示隐藏文件夹
# ctrl + H

# NOTE: GIT没有设置SSHKEY可以用下面的设置
git config --global url."https://github.com/".insteadOf ssh://git@github.com/

# 更新NODE NPM到最新版本 
sudo apt install -y npm
sudo npm install -g n
sudo n lts
node -v
npm -v

# refresh linux link hash hash -r 
hash -r 

#linux homebrew
sudo apt update
sudo apt install -y build-essential curl file git
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

1.2 install openclaw

# install use npm
npm install -g openclaw@latest

# 配置
openclaw onboard

# 更新openclaw
openclaw gateway stop
npm cache clean --force
hash -r 
npm i -g openclaw@latest --verbose
openclaw doctor

1.3 ClawHub

https://clawhub.ai/

持续思考AI

thinking about AI

2026-02-25

编程已死、但是核心要隔离他人AI

1、手工编程这几年真要成非物质文化遗产了 只要拆细、渐进纰漏提示、再把小功能组合大产品就是完整产品。

2、不过还有个小问题,今天一个人的提示词工程完成了一个创意,还弄了一堆SKILL业务流程。明天类似创意的人能更轻松实现,顺便业务逻辑AI也学会了。就像上一秒A商家留资的客户,下一面就推给了B商家一样。

所以核心还要手写,至少要和别人家的AI隔离。

AI中的术语和概念

10年老烟龄,我是怎么戒烟的

2018年 我已经有10年烟龄。

在这10年里,我时时经常沉醉在其中。通宵的电脑前、回家的夜路上、酒桌朋友间。

我也相信这是一种陪伴…

在这个过程中尝试过多次戒烟,比如每天少抽一点,买包更好的烟省着抽,改抽雾化器,改抽IQOS等,都以失败告终,最终为10月这次戒烟成功埋下经验。

一、动机

我为两件事情戒烟,

每天一包烟咳嗽感觉不舒服。

工位不能抽烟,每次下楼抽烟打断思路。

二、周期

一旦戒烟,体内的大多数尼古丁会被新陈代谢,并在48-72小时内排出体外

– 网络

也就是说一旦3天不抽烟,剩下的就是心理作用。

三、契机

找这么一个时间,满足下列场景

  • 你一人

  • 呆在一个房子里不愁吃喝,保证足不出户

  • 房间里没其他人人惹你(心烦意乱容易点火)

  • 工作不找你麻烦

这么一个契机刚好是2018年10月1日~7日。

我因此成功一个人在房子里呆了7天没出进户门,没买烟。没抽烟。

就这么风轻云淡的戒烟成功。

到现在快两年了哈哈哈哈哈

又是一年国庆长假,你是否会选择在家戒烟?

保持啃食

理解需要时间

买了一本书,看的云里雾里的,1/4就看不下去了,一扔就快2年。最近有大把的时间,又把没读完的书都翻出来看。以前懵懵懂懂内容翻一遍就很顺滑的理解了。

这个感觉就像村里有千亿人口,通过口口相传,争斗博弈,终于在一年后他们达成了共识。从此大家对同类政策的接受和理解能力就从2年缩短到了2秒。

精神需要焦点

最近很容易瞌睡,大致找到了原因。如果大脑没有关注某件事情上,就很容易涣散,这个事情可能是写作、编程、看电影、打游戏、跑步、交谈等等。这种涣散的感觉就像电脑要休眠,一群精力充沛的神经元打着瞌睡。

把精神关注在具体的某件事情上,就不瞌睡了。这种感觉就像一群神经元在指指点点某个事物。

兴奋需要砥砺

精神聚焦也可能是浑浑噩噩的清醒着,眼前现实世界像是遥远的世界。平时臭番薯烂鸟蛋的难度让人索然无味,警觉全失。

危险面前求生本能,能让人感官系统全线打开,听觉、视觉、思考能力直线上升。退而求其次可以寻找困难,用适当的困难保持兴奋。

保持啃食

让我想起来东北的冻梨、冻豆包。用门牙一点点啃下来很甜,很香。如果我们这一段路就是平凡人保持不了旺盛的创造欲和求知欲,那就保持有所啃食的状态。

保持饥饿、保持愚蠢… 保持啃食

安装Harbor

找一个正式离线包下下来

https://github.com/vmware/harbor/releases

wget https://storage.googleapis.com/harbor-releases/release-1.5.0/harbor-offline-installer-v1.5.1.tgz

解压他

tar xvf harbor*installer*

配置他

cd harbor
vim harbor.cfg
# 搞一个域名是正道毕竟是公网要访问呢
hostname = harbor.trylife.cn
# 弄一个https也是很重要的
# 第一证书都有免费的
# 第二看起来也安全的样子
ui_url_protocol = https

# nginx CA证书放置的位置
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
# 设置下邮件用来接收通知
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
#UI界面默认密码 等会用到
harbor_admin_password = Harbor12345
# mysql密码还是要改下
# 如果要重新install改了密码一定要把数据库重置下
db_password = V5JUCUswPWXVgcCN
./install.sh
# 想要能扫描镜像 需要安装clair
# ./install.sh --with-Clair

完事了登陆吧

Text File Busy

因为这个文件正在运行,所有无法覆盖?

scp: /app/{name}: Text file busy

解决方法1:杀死正在运行的程序

ps -aux | grep {name}
kill -9 {pid}

但是我杀死了这个进程,我的服务就中断了。

解决方法2:

想一个不中断服务的方法?

从拼体力到拼脑力

从一个项目(也许是一个新的团队)刚开始我们发现有很多事情要做、从理解为什么要干这个,到服务器准备、数据库建模、项目初始化、到担心这玩意到底能不能行;

从产品的角度他们也在想赶紧试试行不行,这就是从上游到下游的快速是错,研发必定是很忙,只是这种忙相对来说是一种体力忙。

这感觉就像新兵连三个月体能训练。

在项目进入上升苗头的时候、我们就要进入拼脑力的时期了、这里说拼脑力是因为脑力更重要了,再继续只拼体力要被累死,有几项是我觉得这个阶段RD可以考虑的事情:

培养新欢

在电影《蜀山传》白眉说“我要飞升到另外一个空间,找寻更厉害的武器队伍血魔。”

  • 在整个团队培养一个运行更高效的语言习惯
    • 比如说我们从PHPGolang过度

这个问题主要是站在用户的体验角度思考,因为你将服务更多的人。为更多的人节省时间。这里就比如说请求时间。

享受服务

我们虽然成功有望但是还是在一个和时间奔跑的阶段,在之前的奔跑过程中,有小伙伴可能已经掉队,有小伙伴得到成长冲了出来。团队相对凝聚、但是团队的野心是不会收敛的,所以需要复制时间的能力。

  • 对外 选择更多使用云服务 -还不是世界顶尖公司、那基本说明要做的服务还没有云服务服务不了的
  • 对内 更多选择服务化
    • 拆分成微服务化的子系统
    • 提供代码生成
    • 人与人之间的服务化

凝聚灵魂

试错阶段的代码会比较粗糙,阶段一过服务的人更多,需要更精心的质量。

为什么变量名在类型前边?

var name string
  • 想到一个变量的时候,先想到变量名或者先想到类型都有可能
  • 但是往往想到变量的名字更多一些;

那为什么会想到变量的名字更多一些呢?

var name string
var age int
var height int
  • 第一个原因可能是变量名更加形象和有指向 年龄 姓名 身高 体重

  • 另一个原因可能是是类型的种类总是少于变量名的、在大脑里查询并不高效。

这里还是要推荐一下我特别认同的一段话来自《写个大家看的设计书》

名字的重要性

一旦能够说出什么东西的名字,就会很容易注意到它。 你就会掌握它,拥有它,让它受你所控。

那为什么少量频繁出现的数据所引起来并不高效呢?

Drone将VUE项目持续部署到阿里云OSS

1. 最终效果

前端自动构建持续集成效果

1.1 步骤简介

Drone 可以根据配置把过程切割成一个一个的操作管道任务。

clone 每次构建都会克隆一次代码、这是一个毛病但是暂时没别的办法

restore-cache 复制上次构建的node_modules缓存

build 构建的过程

rebuild-cache 缓存node_modules

deployment-to-oss 把dist/* 同步到阿里云OSS

notify 发送(邮件)通知

1.2 访问设置了两种类型

  • oss没有办法支持history路由模式
  • 只有根目录才自动寻找首页文件

1.2.1 https://{your-cdn-domain}/

├── 24
│   └── static
│       ├── css
│       │   ├── app.30790115300ab27614ce176899523b62.css
│       │   └── app.30790115300ab27614ce176899523b62.css.map
│       └── js
│           ├── app.b22ce679862c47a75225.js
│           ├── app.b22ce679862c47a75225.js.map
│           ├── manifest.cc150ee5e77c28d4c563.js
│           ├── manifest.cc150ee5e77c28d4c563.js.map
│           ├── vendor.7fed9fa7b7ba482410b7.js
│           └── vendor.7fed9fa7b7ba482410b7.js.map
├── 25
│   └── static
├── 26
│   └── static
└── index.html
  • 适合纯前后单分离的前端正式部署
  • 其中 24 25 26 是每次构建的ID 便于清理
  • 需要有一个域名+一个OSS
  • 不要试图使用oss自带的域名、已被微信封了

1.2.2 https://{your-cdn-domain}/{git-repo}/{git-branch}/index.html

e.g. https://domain.com/fe/vue/master/

About

life's short, try more ...

Clean Architecture

整洁架构

  • 减少加班
  • 减少人力

第一章 设计与架构究竟是什么?

  • 架构、设计 密不可分

目标

  • 软件架构的终极目标是,用最小的人力成本来满足构建和维护该系统的需求。

指标

  • 工程师人数
  • 生产效率 千行代码
  • 每行代码变更成本
  • 工程师生产力

问题

  • 我们可以未来再重构代码,产品上线最重要!”
  • 但是结果大家都知道,产品上线以后重构工作就再没人提起了
  • 错误观点是:“在工程中容忍糟糕的代码存在可以在短期内加快该工程上线的速度,未来这些代码会造成一些额外的工作量,但是并没有什么大不了。”

TDD长一点比非TDD节省10%

想要跑的快,首先要跑的稳

  • ie. suit sale code merge.
    • 30min merge , 4hour hotfix & report.

第2章 两个价值维度

  • 行为
  • 架构

software

  • soft vs hard
  • ware

艾森豪威尔紧急重要矩阵

  • 紧急的永远不重要
  • 重要程度 架构 > 系统行为
  • 业务部门原本就是没有能力评估系统架构的重要程度

第3章 编程范式总览

  • 结构化编程(structuredprogramming)-
  • 面向对象编程(object-orientedprogramming)
  • 函数式编程(functionalprogramming)

三个编程范式都是在1958年到1968年这10年间被提出来的,后续再也没有新的编程范式出现过。

大家可能会问,这些编程范式的历史知识与软件架构有关系吗?当然有,而且关系相当密切。譬如说,多态是我们跨越架构边界的手段,函数式编程是我们规范和限制数据存放位置与访问权限的手段,结构化编程则是各模块的算法实现基础。这和软件架构的三大关注重点不谋而合:功能性、组件独立性以及数据管理。

第4章 结构化编程

结构化编程是分治,减治的开始

第5章 面向对象编程

  • 封装被削弱 0分
  • 继承提供便利 0.5分
  • UNIX I/O多态
  • 依赖反转

面向对象编程就是以多态为手段来对源代码中的依赖关系进行控制的能力,这种能力让软件架构师可以构建出某种插件式架构,让高层策略性组件与底层实现性组件相分离,底层组件可以被编译成插件,实现独立于高层组件的开发和部署。

第6章 函数式编程

不可变性与软件架构

为什么不可变性是软件架构设计需要考虑的重点呢?为什么软件架构师要操心变量的可变性呢?答案显而易见:所有的竞争问题、死锁问题、并发更新问题都是由可变变量导致的。如果变量永远不会被更改,那就不可能产生竞争或者并发更新问题。如果锁状态是不可变的,那就永远不会产生死锁问题。

Authority 权威

  • 个体维度
  • 群体维度
  • 时间维度

挑战权威是对个体群体历史经验的挑战。

CSAPP

16进制2进制对照表

DEC 0 1 2 3 4 5 6 7
HEX 0 1 2 3 4 5 6 7
BIN 0000 0001 0010 0011 0100 0101 0110 0111
DEC 8 9 10 11 12 13 14 15
HEX 8 9 A B C D E F
BIN 1000 1001 1010 1011 1100 1101 1110 1111

Machine-Level Representation of Programs

3.3 Data Formats 数据格式

Intel uses the term “word” to refer to a 16-bit data type .

ElasticSearch

Mapping

Aggregate

Stores pre-aggregated numeric values for metric aggregations. An aggregate_metric_double field is an object containing one or more of the following metric sub-fields: min, max, sum, and value_count.

When you run certain metric aggregations on an aggregate_metric_double field, the aggregation uses the related sub-field’s values. For example, a min aggregation on an aggregate_metric_double field returns the minimum value of all min sub-fields.

An aggregate_metric_double field stores a single numeric doc value for each metric sub-field. Array values are not supported. min, max, and sum values are double numbers. value_count is a positive long number.

Golang

Struct

  • go内struct字段顺序和内存中一致。

lua

菜鸟教程

Hello World

-- hello.lua
print("Hello")
lua hello.lua

注释

-- 单行注释
--[[
 多行注释
 多行注释
 --]]

全局变量

全局变量不需要声明

print(b)
b = 10
print(b)

删除全局变量就给他赋值为nil

数据类型

数据类型 描述
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

nil

  • 对于nil的比较需要加上双引号
-- 对nil比较需要加上双引号
print(type(x))
print(type(x) == nil)
print(type(x) == "nil")

boolean

nil false 都是false

number

  • 浮点数、整数

string

  • 使用双引号、单引号、双方括号表示
-- 字符串的表示
s1 = 's1'

s2 = "s2"

s3 = [[
this is s3
~~
]]

print(s1)
print(s2)
print(s3)

-- 字符串与数字隐式转换
print('8' + 6)

-- 字符串连接
print('a' .. 'b')

-- 获取字符串长度
s4 = "this is a string"
print(#s4)

table

-- 空table
t = {}
print(t)

-- 初始化table
t2 = {"apple", "xiaomi"}
print(t2)

-- 获取table中的元素
-- table中的下标是从1开始
print(t2[1])

-- 重新赋值table中的元素 
t2["xyz"] = "new value"
print(t2["xyz"])
print(t2.xzy) -- nil

-- 遍历table
for k, v in pairs(t2) do
    print(k .. ":" .. v)
end

函数

function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))


-- 匿名函数
function testFun(tab,fun)
        for k ,v in pairs(tab) do
                print(fun(k,v));
        end
end


tab={key1="val1",key2="val2"};
testFun(tab,
function(key,val)--匿名函数
        return key.."="..val;
end
);

模块

加载策略

require 用于搜索 Lua 文件的路径是存放在全局变量 package.path 中,当 Lua 启动后,会以环境变量 LUA_PATH 的值来初始这个环境变量。如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。

技术管理

信任下属

目标规划

帮团队抗责任

替团队某利益

随和,下属愿意跟你交流是你的成功

真心待人,别人才会真心待你

培养下属成为M

  • 能力框架
  • 欣赏能力
  • 给与机会

招聘

  • 平均值以上,正向收敛