我用了一段时间的这种命令行式的 Agent ,发现在我环境上面有个通病,就是经常不知道自己在哪个目录,然后去乱搜文件。
我是在 Linux 服务器上面用的,用的 root 账号登录的,然后打开一个项目/root/git/test
我cd /root/git/test上面输入
这时候claude code和codex这种工具都知道项目目录是/root/git/test
cwd是/root/git/test但是
pwd都是/root所以经常在编译代码的时候,或者各种用相对路径搜索项目代码的时候,都是从pwd /root发起的。
例如正常的编译命令是在项目目录执行go build src/*,但是 Agent 经常就会直接执行这种命令,但是他是从pwd /root执行的,等价于 go build /root/src/*
所以经常会找不到文件,虽然最后他们经过长时间的尝试还是会找到/root/git/test项目目录,并且发现这个问题,但是非常耗费时间,而且几乎每次新建对话都会出现这个现象。
大家有没有什么好的办法,让他用相对目录的时候永远以 cwd 为基准/root/git/test,相对目录就直接继承 cwd 去搜索呢。
不知道这个是我的用法问题还是什么,我无论是codex还是claude code都必然会出现这个问题
1
dxppp 11 天前
先让 AI tree 一遍呢
|
2
soulflysimple123 11 天前
先在项目目录执行/init
|
3
bingfengfeifei OP @soulflysimple123 #2 /init 已经执行了,甚至在 CLAUDE.md 里面明确说了这个路径问题,也还和之前一样。
|
4
as9567585 10 天前
添加
/add-dir Add a new working directory 查看 /permissions (allowed-tools) Manage allow & deny tool permission rules |
5
bingfengfeifei OP 终于解决了这个问题 官方有个 issue 提及了这个问题`https://github.com/anthropics/claude-code/issues/989`
问题的根本原因是我的 pwd 是/root ,而正确的启动 pwd 应该是项目目录,所以 claude code 遇到这种反常识的问题就懵逼了。 造成这个问题的原因我的 shell 是 fish shell ,而且在我的 shell 启动配置里面,可能有切换目录的操作,所以当 claude code 每次启动一个非交互式 shell 去运行命令时,都使用了这个启动配置的东西,就一直切换到了根目录。 解决这个问题的方式就是在 shell 的~/.config/fish/config.fish 的配置文件,我的是 fish shell 所以修改这个问题。如果是 zsh 或者 bash 同理。 在最开始的时候 加入这个代码,claude code 会自己设置一个变量,可以用 CLAUDECODE 判断是否是 claude code 启动的,如果是 claude code 启动,就直接退出,然后问题解决了。 ``` if set -q CLAUDECODE return end ``` 如果是 bash 或者 zsh 就改用 bash 语法 ``` if [[ -n "$CLAUDECODE" ]]; then return 0 fi ``` |