1. 项目背景与核心价值
这个项目最初源于开发者对现有命令行工具链的深度使用痛点。在长期使用各类AI辅助编程工具(如GitHub Copilot)的过程中,我发现虽然它们能很好地补全代码片段,但在处理复杂的shell脚本场景时存在明显断层——要么需要频繁切换界面,要么缺乏对命令行工作流的深度理解。
Vibe Codex CLI原本是一个基于OpenAI Codex模型的命令行工具,能通过自然语言生成代码片段。但实际使用中,我发现它存在几个关键问题:
- 上下文理解局限:无法有效记忆当前shell环境状态
- 功能单一:仅聚焦代码生成,缺乏对系统操作的直接支持
- 交互笨重:每次查询都需要完整描述上下文
aish(AI Shell)的改造方向很明确:让它成为真正的shell环境伴侣。这不仅仅是改名,而是从交互模式到功能架构的全面重构。现在它可以:
- 实时解析当前shell上下文(环境变量、工作目录、命令历史)
- 直接执行系统诊断和自动化操作
- 保持会话记忆实现多轮对话
关键改进:新版本增加了对$SHELL变量的自动捕获,执行
aish --attach即可绑定当前终端会话,这是区别于原版codex cli的核心特性。
2. 架构设计与技术实现
2.1 核心组件拆解
aish的架构分为三个关键层:
-
上下文采集层
- 通过
/proc/[pid]/environ实时读取环境变量 - 使用
fc -l获取最近50条命令历史 - 监控
$PWD变化记录工作目录轨迹
- 通过
-
AI推理层
- 基于改进的prompt模板:
bash复制[System Context] OS: $(uname -a) Shell: $SHELL CWD: $PWD Last 5 commands: $(fc -l -5) [User Request] {{query}} - 支持本地模型(通过ollama)和云端API混合调用
- 基于改进的prompt模板:
-
执行反馈层
- 安全沙箱执行验证(需显式授权)
- 支持三种输出模式:
bash复制--explain # 仅解释不执行 --dry-run # 显示预执行命令 --execute # 实际执行(默认)
2.2 关键技术选型
| 技术点 | 选型方案 | 理由 |
|---|---|---|
| 命令行框架 | Click | 比argparse更友好的子命令支持 |
| 终端交互 | prompt_toolkit | 支持语法高亮的多行输入 |
| 上下文缓存 | SQLite | 低开销的进程间数据持久化 |
| 沙箱环境 | Docker(非特权模式) | 比namespace更安全的隔离方案 |
| 模型端点 | llama.cpp + OpenAI API | 平衡本地隐私需求和云端模型能力 |
实测发现:使用Docker沙箱会增加200-300ms延迟,但对
rm -rf这类危险命令的拦截成功率可达100%
3. 安装与配置指南
3.1 多平台安装方案
Linux/macOS (推荐)
bash复制curl -sSL https://install.aish.dev | bash -s -- --with-ollama
Windows (WSL2)
powershell复制irm https://win.aish.dev | iex
手动安装(适合开发者)
bash复制git clone https://github.com/aish-dev/aish-core
cd aish-core && poetry install
cp ./bin/aish /usr/local/bin/
3.2 关键配置项
~/.config/aish/config.toml示例:
toml复制[llm]
provider = "ollama" # 或 openai
model = "llama3:8b" # 本地模型标识
[safety]
max_auto_execute = 5 # 允许自动执行的命令复杂度等级
blacklist = ["rm -rf", "dd if="]
[integration]
shell_hook = "zsh" # 支持bash/zsh/fish
配置完成后需要重新加载shell:
bash复制exec $SHELL
4. 实战应用场景
4.1 日常效率提升
场景:快速生成复杂管道命令
bash复制$ aish "找出当前目录下所有.py文件,统计空行数"
# 输出建议:
find . -name "*.py" -exec grep -c '^$' {} + | awk '{sum+=$1} END {print sum}'
# 按Enter立即执行或Ctrl+C取消
场景:解释晦涩命令
bash复制$ aish --explain "ls | tee >(wc -l >&2) | sort -rn"
# 输出解释:
# 1. ls列出文件
# 2. tee将输出同时送到WC和sort
# 3. wc -l计算行数(标准错误输出)
# 4. sort按数值逆序排序
4.2 系统运维辅助
场景:诊断磁盘异常
bash复制$ aish "我的/tmp分区占用96%,找出最大的10个文件"
# 自动组合命令:
sudo find /tmp -type f -exec du -h {} + 2>/dev/null | sort -rh | head -n 10
场景:安全审计
bash复制$ aish "检查最近的非交互式登录"
# 生成审计命令:
last -f /var/log/wtmp | grep -v 'still logged in' | awk '{print $1,$3,$5,$7}' | uniq -c
5. 高阶使用技巧
5.1 会话持久化
使用--session参数保持多轮对话上下文:
bash复制$ aish --session debug_issue
[Session started] 输入.reset清除上下文
> 我的nginx服务启动失败
[分析] 建议检查:systemctl status nginx -l
> 显示端口被占用
[跟进] 推荐执行:ss -tulnp | grep :80
5.2 自定义技能扩展
在~/.aish/skills/下创建.aish脚本:
python复制# disk_alert.aish
def main(ctx):
if ctx.disk_usage > 90:
return f"echo '警告!磁盘使用率{ctx.disk_usage}%' | wall"
return None
加载自定义技能:
bash复制aish --load-skills ~/.aish/skills/
6. 安全机制详解
6.1 三层防护体系
-
语法分析层
- 使用shellcheck验证生成命令的语法安全性
- 禁止无引号的变量扩展(如
rm $VAR)
-
模式匹配层
- 实时匹配200+个危险模式(如
/dev/sd) - 动态评估资源消耗(防止fork炸弹)
- 实时匹配200+个危险模式(如
-
人工确认层
- 涉及敏感操作时要求交互确认
- 可设置
AISH_CONFIRM=off跳过(不推荐)
6.2 审计日志
所有执行记录保存在~/.local/share/aish/audit.log:
code复制2024-03-20 14:22:15 [EXEC] user=joe cmd="find /tmp -delete" confirmed=Y
2024-03-20 14:23:41 [BLOCK] user=joe cmd="chmod -R 777 /" reason="permission_scope"
查看审计日志:
bash复制aish --audit | less
7. 性能优化方案
7.1 延迟分解与应对
典型查询延迟构成:
- 上下文收集:20-50ms
- LLM推理:300-2000ms
- 安全验证:100-300ms
优化建议:
bash复制# 启用预加载(消耗~50MB内存)
aish --daemon
# 使用轻量级模型
export AISH_MODEL=phi3:mini
7.2 缓存策略
基于查询指纹的缓存系统:
python复制def get_cache_key(query):
return hashlib.md5(f"{os.getcwd()}:{query}".encode()).hexdigest()
缓存命中率通常可达40-60%,可通过aish --cache-stats查看
8. 常见问题排查
8.1 安装问题
症状:aish: command not found
- 检查
~/.local/bin是否在PATH - 尝试重新链接:
ln -s /path/to/aish /usr/local/bin/
症状:SSL证书错误
- 更新CA证书:
sudo update-ca-certificates - 临时方案:
export AISH_SSL_VERIFY=no
8.2 运行异常
症状:无法捕获环境变量
bash复制# 检查shell集成
cat ~/.zshrc | grep aish
# 应有类似:
eval "$(aish init zsh)"
症状:模型响应慢
bash复制# 测试本地推理速度
ollama run llama3 "hello" --verbose
# 如果延迟>2s,考虑更换模型
9. 生态集成方案
9.1 IDE插件开发
VS Code扩展示例(片段):
javascript复制vscode.commands.registerCommand('aish.runInTerminal', () => {
const query = editor.document.getText(editor.selection);
terminal.sendText(`aish "${query.replace(/"/g, '\\"')}"`);
});
9.2 CI/CD流水线集成
GitLab CI示例:
yaml复制analyze_job:
image: aish-ci:latest
script:
- aish "检查K8s部署清单" < manifests/*.yaml
- aish --exec "安全扫描" --report gl-sast.json
10. 开发路线图
近期重点:
- [ ] 实验性支持Bash脚本调试(断点/变量追踪)
- [ ] 开发VS Code/LunarVim深度插件
- [ ] 实现跨会话知识图谱
长期愿景:
- 成为Shell环境的AI感知层
- 实现自然语言到系统调用的无损转换
- 构建安全的自动化协作生态
当前0.8版已实现核心功能,欢迎通过
aish --feedback提交建议。对于开发者,项目采用Apache 2.0协议,核心代码库保持开源。
