리눅스에서 Pi가 파일 시스템을 읽지 못하는 문제
Pi can't read file system on Linux
핵심 요약
맥에서는 잘 작동하는 Pi가 리눅스 환경에서는 파일 시스템 접근을 거부하는 문제에 대한 해결책을 구하는 글입니다.
- 환경 차이 — 맥에서는 정상 작동하나 리눅스 서버와 도커 환경에서 파일 접근 불가함
- 도구 호출 오류 — Pi가 리눅스에서 bash 도구 사용이 불가능하다고 응답함
- 모델 성능 의심 — 사용 중인 모델이 도구 호출 능력이 부족하거나 시스템 프롬프트가 잘렸을 가능성 제기됨
- 설정 확인 필요 — 확장 프로그램, PATH 설정, 혹은 Pi 실행 환경의 권한 문제일 수 있음
Hey guys!
I use Pi without any issues on my MacBook at work. However, I tried running it on my Linux home server at home and... It just doesn't work. And I'm out of ideas about how to possibly fix this issue. I really appreciate any help from the community!
As the title says, on Linux, Pi flat out refuses to read any files from the file system. It's crazy because it just works on a Mac. And I haven't changed anything between the two setups.
I thought that maybe it's an issue with my OS. So I've tried running Pi in a Docker container because this will obviously give me a reliable environment in which nothing can go wrong! Well. Yeah. Inside of this Docker container it also refuses to read any files from disk...
I've also tried running the bare metal installation of Pi with sudo. Still nothing. I've also chmod 777'd the folder that the code was inside of. Still, nothing.
When I tell it to list all files in the current directory, it'll give me this response:
I cannot directly list files in the current directory as I don't have access to your local file system. If you'd like, I can help with tasks related to managing or creating files programmatically
(e.g., writing, editing, or archiving files) based on instructions you provide.
On a Mac however it'll just use `ls` to read the current directory. As expected.
Here's a cut down version of my log file. In my eyes it doesn't really tell me what's going on. The only thing that looks weird to me is the call to the "write" tool. But it also doesn't state any errors.
Again, I'd appreciate any help! I'm really running out of ideas about what's going on.
EDIT:
One weird thing I've just noticed:
Pi on Mac tells me that it uses the bash tool to search for files. Pi on Linux however tells me that it doesn't even have such a bash tool available.
How can that be? I guess this might be the reason why all of this fails. Simply because Mac can execute bash calls and Linux can't. But to me it sounds really strange that Linux wouldn't come with a bash tool preinstalled?
{"timestamp":"2026-08-20T13:08:44.898+00:00","level":"debug","pid"
:7,"message":"title-generator:
success","sessionId":"01a01f49-2026-7000-b503-be94cb8f6983","provi
der":"openwebui","id":"ministral-3:3b","model":"openwebui/ministra
l-3:3b","title":"Find all \"omp*log*\" files
recursively","usage":{"input":182,"output":15,"cacheRead":0,"cache
Write":0,"totalTokens":197,"cost":{"input":0,"output":0,"cacheRead
":0,"cacheWrite":0,"total":0}},"stopReason":"stop"}
{"timestamp":"2026-08-20T13:09:21.213+00:00","level":"debug","pid"
:7,"message":"Session exit
recorded","sessionId":"01a01f49-2026-7000-b503-be94cb8f6983","sess
ionFile":"/root/.omp/agent/sessions/--pi--/2026-08-20T13-08-01-190
Z_01a01f49-2026-7000-b503-be94cb8f6983.jsonl","reason":"dispose","
kind":"normal","pendingToolCalls":0}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-add-cleanup","conditions":["runtime\\.S
etFinalizer"],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-bench-loop","astConditions":["func
$F($B *testing.B) { $$$PRE for $I := 0; $I < $B.N; $I++ { $$$BODY
} $$$POST
}"],"scope":["tool:edit(*_test.go)","tool:write(*_test.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-exp-promoted","conditions":["\"golang.o
rg/x/exp/slices\"","\"golang.org/x/exp/maps\""],"scope":["tool:edi
t(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-ioutil","conditions":["\"io/ioutil\""],
"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-join-hostport","conditions":["fmt\\.Spr
intf\\(\"%s:%d\""],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-new-expr","astConditions":["func $F($V
$T) *$T { return &$V }","func $F[$$$TP]($V $T) *$T { return &$V
}"],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-rand-v2","conditions":["\"math/rand\""]
,"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"go-range-int","astConditions":["for $I :=
0; $I < $N; $I++ { $$$BODY
}"],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"rs-box-leak","conditions":["Box::leak"],"s
cope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"rs-future-prelude","conditions":["std::fut
ure::Future"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"rs-lazylock","conditions":["once_cell::","
OnceLock::new"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"rs-match-ergonomics","conditions":["\\(ref
mut","\\(ref
[a-z_]"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"rs-parking-lot","conditions":["\\.lock\\(\
\)\\.unwrap\\(\\)","\\.read\\(\\)\\.unwrap\\(\\)","\\.write\\(\\)\
\.unwrap\\(\\)"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"rs-result-type","conditions":["type\\s+Res
ult<[A-Za-z_]\\w*>\\s*="],"scope":["tool:edit(*.rs)","tool:write(*
.rs)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"ts-bare-catch","conditions":["catch
\\(_"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*
.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"ts-import-type","conditions":["import\\("]
,"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)",
"tool:write(*.tsx)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"ts-no-any","conditions":[": any|as
any"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.
ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"ts-no-deprecated-leftovers","conditions":[
"@deprecated"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool
:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-08-20T13:09:29.057+00:00","level":"debug","pid"
:7,"message":"TTSR rule
registered","ruleName":"ts-no-dynamic-import","conditions":["await


