Pify
Tham khảo

Tham chiếu biến môi trường

Process flag, provider credential, child marker, session metadata và proxy variable được Pi sử dụng.

Pi dùng environment variable ở ba nơi riêng biệt: cấu hình process của chính Pi, authentication cho provider đã chọn và environment của command do các LLM-callable tool bashpowershell khởi chạy. Scope rất quan trọng: một variable được một provider nhận diện không tự động trở thành setting dùng trên toàn Pi.

Thời điểm đọc giá trị

Phần lớn process flag có hiệu lực khi khởi động. Provider authentication được resolve khi Pi yêu cầu credential cho provider đã chọn. Thay đổi shell variable chỉ ảnh hưởng request sau nếu stored credential trong auth.json và configured apiKey trong models.json đều không được ưu tiên cho provider đó. Shell-tool metadata được tạo lại cho từng tool command.

Provider credential

Với built-in provider của Pi, thứ tự credential là CLI --api-key hoặc runtime override tường minh, API key hoặc OAuth credential khớp được lưu trong auth.json, apiKey đã cấu hình trong models.json (literal hoặc tham chiếu $ENV theo contract của file này), rồi ambient environment của built-in provider. Provider do extension định nghĩa có thể triển khai contract khác. Hãy dùng /login để ghi vào credential store được bảo vệ thay vì đưa secret vào file của project.

ProviderEnvironment credential được 0.85.0 nhận diện
AnthropicANTHROPIC_AUTH_TOKEN, ANTHROPIC_OAUTH_TOKEN, ANTHROPIC_API_KEY
Ant Ling, OpenAI, Azure OpenAIANT_LING_API_KEY, OPENAI_API_KEY, AZURE_OPENAI_API_KEY
DeepSeek, NVIDIA NIM, GeminiDEEPSEEK_API_KEY, NVIDIA_API_KEY, GEMINI_API_KEY
Mistral, Groq, CerebrasMISTRAL_API_KEY, GROQ_API_KEY, CEREBRAS_API_KEY
xAI, OpenRouter, Vercel AI GatewayXAI_API_KEY, OPENROUTER_API_KEY, AI_GATEWAY_API_KEY
ZAI Global và ChinaZAI_API_KEY, ZAI_CODING_CN_API_KEY
OpenCode Zen và GoOPENCODE_API_KEY
Radius, Hugging FaceRADIUS_API_KEY, HF_TOKEN
Fireworks, Together AI, BasetenFIREWORKS_API_KEY, TOGETHER_API_KEY, BASETEN_API_KEY
Kimi, MiniMax, MiniMax China, MoonshotKIMI_API_KEY, MINIMAX_API_KEY, MINIMAX_CN_API_KEY, MOONSHOT_API_KEY
Qwen Token PlanQWEN_TOKEN_PLAN_API_KEY, QWEN_TOKEN_PLAN_CN_API_KEY
Xiaomi MiMo và các region token-planXIAOMI_API_KEY, XIAOMI_TOKEN_PLAN_CN_API_KEY, XIAOMI_TOKEN_PLAN_AMS_API_KEY, XIAOMI_TOKEN_PLAN_SGP_API_KEY
GitHub CopilotCOPILOT_GITHUB_TOKEN
Cloudflare AI Gateway và Workers AICLOUDFLARE_API_KEY; các ID được trình bày bên dưới

Amazon Bedrock và Google Vertex AI còn nhận ambient cloud credential được mô tả trong phần variable riêng cho provider. Custom provider trong models.json có thể tham chiếu variable bất kỳ bằng "apiKey": "$COMPANY_AI_TOKEN"; chuỗi chỉ gồm chữ hoa là literal, không phải environment lookup. Xem Thêm một nhà cung cấp mô hình để biết surface chính xác của file này.

Runtime flag

Directory và runtime asset

VariableMục đích chính xác
PI_CODING_AGENT_DIRAgent config directory; mặc định ~/.pi/agent
PI_CODING_AGENT_SESSION_DIRPersistent session directory; đứng dưới --session-dir và trên setting sessionDir trong thứ tự ưu tiên của CLI
PI_PACKAGE_DIRPackaged asset directory, hữu ích với bản cài đặt Nix hoặc Guix chỉ đọc

PI_CODING_AGENT_DIR thay thế switch home-directory rộng trước đây; nó nhắm đến agent configuration của Pi, không phải home directory của hệ điều hành. Lời gọi SDK trực tiếp dùng path được truyền vào constructor và không tự động tái hiện mọi quy tắc ưu tiên của CLI.

Khởi động Pi với runtime directory tường minh
export PI_CODING_AGENT_DIR=/srv/pi/agent
export PI_CODING_AGENT_SESSION_DIR=/srv/pi/sessions
export PI_PACKAGE_DIR=/nix/store/example-pi
pi

Switch offline, version và telemetry

VariableGiá trị được chấp nhận và tác dụng
PI_OFFLINE1, true hoặc yes tắt startup và model-catalog network work được hỗ trợ, gồm version/package check và install/update telemetry
PI_SKIP_VERSION_CHECKĐặt thành 1 để chỉ bỏ qua request lấy phiên bản mới nhất
PI_TELEMETRY1/true/yes bật install/update telemetry và Pi provider-attribution header; 0/false/no tắt chúng

Hãy dùng --offline hoặc giá trị truthy được hỗ trợ cho PI_OFFLINE. Muốn bật lại network work, hãy unset variable: một số path phía sau trong 0.85.0 chỉ kiểm tra PI_OFFLINE có tồn tại hay không, vì vậy PI_OFFLINE=0 không an toàn và có thể vẫn hoạt động như offline. PI_SKIP_VERSION_CHECK có scope hẹp hơn offline mode. Đừng dựa vào cách viết không được tài liệu hóa cho PI_TELEMETRY.

Hành vi terminal và editor

PI_HARDWARE_CURSOR=1 làm hardware cursor của TUI hiện ra. PI_TUI_ESC_TIMEOUT nhận số mili giây hữu hạn dương để phân biệt một phím Escape đơn với Alt-key sequence bị chia nhỏ; mặc định là 100 ms khi có SSH_CONNECTION hoặc SSH_TTY, và 10 ms trong trường hợp khác.

Pi tự động phát hiện OSC 8 hyperlink, inline image protocol và truecolor. Pi 0.85.0 cung cấp chính xác các advanced override sau:

CapabilityGiá trị environmentJSON setting tương ứng
OSC 8 hyperlinkPI_HYPERLINKS=1|0|autoterminal.hyperlinks: true|false|"auto"
Inline imagePI_IMAGE_PROTOCOL=kitty|iterm2|none|autoterminal.images: "kitty"|"iterm2"|false|"auto"
TruecolorPI_TRUE_COLOR=1|0|autoterminal.trueColor: true|false|"auto"

Với PI_HYPERLINKS, 1 buộc bật OSC 8 hyperlink, 0 buộc tắt chúng, còn auto chuyển sang tự động detect. terminal.hyperlinks setting tường minh được ưu tiên hơn cả PI_HYPERLINKS lẫn kết quả detect tự động; "auto" không tạo setting override.

Với PI_IMAGE_PROTOCOL, kitty chọn protocol Kitty và iterm2 chọn protocol iTerm2; none buộc tắt inline image, còn auto chuyển sang tự động detect. Một protocol tường minh hoặc false trong terminal.images setting được ưu tiên hơn cả PI_IMAGE_PROTOCOL lẫn kết quả detect tự động; "auto" không tạo setting override.

Với PI_TRUE_COLOR, 1 buộc bật truecolor, 0 buộc tắt nó, còn auto chuyển sang tự động detect. terminal.trueColor setting tường minh được ưu tiên hơn cả PI_TRUE_COLOR lẫn kết quả detect tự động; "auto" không tạo setting override.

Chỉ force capability khi toàn bộ đường đi qua terminal, proxy và multiplexer hỗ trợ nó, vì escape sequence không được hỗ trợ có thể làm hỏng rendering.

Cơ chế tự động detect nhận diện integrated terminal của Zed là có truecolor và hyperlink nhưng không chọn inline image protocol tại đó. Với auto, Zed vì vậy dùng image text fallback; đừng force sequence của Kitty hay iTerm2 nếu terminal path thực tế không hỗ trợ.

Với Ctrl+G, setting externalEditor được ưu tiên, sau đó là VISUAL, EDITOR rồi fallback theo platform. Các variable này chứa editor command, không chứa nội dung file.

Cache và chia sẻ

PI_CACHE_RETENTION=long yêu cầu provider prompt caching kéo dài nếu API được chọn hỗ trợ; giá trị khác không chọn một tier được tài liệu hóa. PI_SHARE_VIEWER_URL thay base URL dùng để tạo viewer link cho /share. Không variable nào trong hai variable này là credential.

PI_EXPERIMENTAL

PI_EXPERIMENTAL=1 bật preferred strict JSON-schema sampling của 0.85.0 cho managed tool khi model/API hỗ trợ. Phép so sánh chính xác là 1; true không được chấp nhận. Hành vi experimental có thể thay đổi giữa các release và không thay đổi project trust hay tool set đã chọn.

Quy tắc về giá trị

Environment variable là chuỗi, nhưng Pi không coi mọi chuỗi khác rỗng là true. Chỉ dùng các giá trị nêu trên. Path có thể là absolute path hoặc được helper path của CLI expand theo tài liệu; giá trị riêng cho provider cũng có thể đến từ object env theo scope của stored credential, và được ưu tiên hơn ambient process đối với các field được hỗ trợ.

Proxy và TLS

Pi 0.85.0 cấu hình Undici EnvHttpProxyAgent cho traffic dùng fetch do Pi quản lý.

VariableHành vi
HTTP_PROXYProxy cho HTTP destination
HTTPS_PROXYProxy cho HTTPS destination
NO_PROXYBypass host phân tách bằng dấu phẩy hoặc khoảng trắng; * bỏ qua toàn bộ proxy

Undici cũng nhận dạng dạng chữ thường và ưu tiên dạng đó hơn dạng chữ hoa. Setting global httpProxy chỉ điền HTTP_PROXYHTTPS_PROXY khi chúng chưa được đặt. Provider SDK như AWS hoặc Google có thể sở hữu transport riêng, vì vậy các variable này không bảo đảm cho mọi extension hoặc cloud client.

SSL_CERT_FILE không được transport trong bản Pi 0.85.0 đã publish đọc hoặc cài đặt. Hãy cấu hình custom certificate trust qua Node runtime hoặc provider SDK đã chọn rồi kiểm tra riêng route đó; đừng giả định variable từ baseline này thay đổi TLS do Pi quản lý.

Variable riêng cho provider

Azure OpenAI

Azure OpenAI Responses yêu cầu AZURE_OPENAI_API_KEY cùng AZURE_OPENAI_BASE_URL hoặc AZURE_OPENAI_RESOURCE_NAME. Control tùy chọn gồm AZURE_OPENAI_API_VERSIONAZURE_OPENAI_DEPLOYMENT_NAME_MAP phân tách bằng dấu phẩy. Variable OPENAI_ORG_ID chung trong baseline không được OpenAI provider của 0.85.0 sử dụng.

Amazon Bedrock

Bedrock nhận AWS_BEARER_TOKEN_BEDROCK, AWS_PROFILE hoặc standard AWS access-key/role chain, gồm AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN tùy chọn, ECS credential và web identity. Region selection đọc AWS_REGION hoặc AWS_DEFAULT_REGION. Proxy deployment có thể dùng AWS_ENDPOINT_URL_BEDROCK_RUNTIME; AWS_BEDROCK_SKIP_AUTH=1AWS_BEDROCK_FORCE_HTTP1=1 là compatibility switch chuyên biệt.

Google Vertex AI

Vertex nhận trực tiếp GOOGLE_CLOUD_API_KEY. Application Default Credentials cần default credential file hợp lệ hoặc GOOGLE_APPLICATION_CREDENTIALS, cộng với GOOGLE_CLOUD_PROJECT (hoặc GCLOUD_PROJECT) và GOOGLE_CLOUD_LOCATION. GOOGLE_API_KEYGOOGLE_VERTEX_API_KEY không phải alias cho variable Gemini và Vertex hiện tại.

Cloudflare

Cloudflare Workers AI dùng CLOUDFLARE_API_KEYCLOUDFLARE_ACCOUNT_ID; AI Gateway cần thêm CLOUDFLARE_GATEWAY_ID. Các tên viết hoa hoàn toàn và chính xác này thay dạng CLOUDflare_* bị viết sai trong baseline.

Đặt giá trị proxy và cloud routing không chứa secret
export HTTPS_PROXY=http://proxy.internal.example:8080
export NO_PROXY=localhost,127.0.0.1,.internal.example
export GOOGLE_CLOUD_PROJECT=example-project
export GOOGLE_CLOUD_LOCATION=us-central1

Variable cũ ANTHROPIC_BASE_URL cũng không phải built-in override hiện tại. Hãy cấu hình endpoint được hỗ trợ trong models.json hoặc provider implementation thay vì dựa vào ambient alias.

Process marker và shell-tool metadata

CLI và RPC entry point đặt AI_AGENT=pi cùng PI_CODING_AGENT=true. Child process kế thừa chúng, nhưng đây không phải session identifier và bản nhúng SDK không tự động đặt chúng. Bản publish 0.85.0 không phát marker cũ PI_PARENT_SESSION.

Pi có thể expose session context hiện tại sau cho command do các LLM-callable tool bashpowershell chạy:

VariableGiá trị
PI_SESSION_IDSession ID hiện tại; luôn có khi các điều kiện inject bên dưới được đáp ứng
PI_SESSION_FILEAbsolute path đến JSONL; chỉ có với file-backed session có session file path
PI_PROVIDERPi provider ID đang chọn; chỉ có khi ctx.model tồn tại
PI_MODELPi model ID đang chọn; chỉ có khi ctx.model tồn tại
PI_REASONING_LEVELLevel thực tế: off, minimal, low, medium, high, xhigh hoặc max; chỉ có khi ctx.thinkingLevel là truthy

Operations Bash và PowerShell cục bộ mặc định khởi chạy một child process riêng cho mỗi Tool call và dùng command syntax tương ứng. Custom operations thay vào đó ủy quyền cho backend đã cấu hình; backend đó sở hữu cancellation, cleanup và quyết định execution state có persist hay không. Wrapper trước hết xóa giá trị kế thừa của cả năm session variable. exposeSessionEnvironment mặc định là true, nhưng việc inject cần Agent/Extension execution context. exposeSessionEnvironment: false chặn cả năm session field ngay cả khi context đó tồn tại. Standalone hoặc custom invocation không có context đó sẽ không tự động nhận chúng. Khi việc inject diễn ra, giá trị được resolve trước shell-tool command đó, nên thay đổi model hoặc reasoning tác động đến command kế tiếp. Tool powershell native chỉ có trên Windows. Các variable này không được inject vào command ! hoặc !! do người dùng nhập.

Khi các điều kiện trên được đáp ứng, custom shell tool tạo bằng createBashTool() hoặc createPowerShellTool() expose metadata trước spawnHook, vì vậy hãy giữ process environment nhận được khi thêm field. Nếu thiếu context hoặc exposure bị tắt, hook nhận environment đã xóa các session field này. Dạng Bash hiện có vẫn là:

Giữ Pi metadata trong custom bash tool
import { createBashTool } from "@earendil-works/pi-coding-agent";

export const bashTool = createBashTool(process.cwd(), {
  spawnHook: (context) => ({
    ...context,
    env: { ...context.env, CI: "1" },
  }),
});

Customization PowerShell dùng cùng hook contract. Khi được đăng ký và execute qua Pi với Agent context cùng exposure mặc định, Tool nhận cùng session field:

Giữ Pi metadata trong custom PowerShell tool
import { createPowerShellTool } from "@earendil-works/pi-coding-agent";

export const powerShellTool = createPowerShellTool(process.cwd(), {
  spawnHook: (context) => ({
    ...context,
    env: { ...context.env, CI: "1" },
  }),
});

Hãy tắt exposure một cách tường minh trên một trong hai factory khi command vượt qua trust boundary. Pi xóa session field kế thừa trước, ngăn metadata cũ của parent rò vào command hoặc hook. Ví dụ Bash này vẫn hợp lệ; thay factory bằng createPowerShellTool() để có policy PowerShell tương đương:

Tắt bash session metadata
import { createBashTool } from "@earendil-works/pi-coding-agent";

export const isolatedBashTool = createBashTool(process.cwd(), {
  exposeSessionEnvironment: false,
  spawnHook: (context) => context,
});

Lỗi thường gặp và bảo mật

  • Không đưa API key vào shell file được commit, settings.json, mã nguồn extension, log, prompt hoặc transcript. Ưu tiên /login, secret manager hoặc process injection có scope hẹp; hãy nhớ child process kế thừa giá trị được export.
  • Tên hiện tại phải chính xác. PI_HOME, PI_LOG_LEVEL, PI_PARENT_SESSION, GOOGLE_API_KEY, GOOGLE_VERTEX_API_KEY, GITHUB_TOKEN, OPENAI_ORG_ID, ANTHROPIC_BASE_URL và tên CLOUDflare_* viết sai không phải compatibility alias trong bản publish 0.85.0.
  • Stored provider credential và apiKey đã cấu hình trong models.json đều được ưu tiên hơn ambient variable. Hãy logout hoặc cập nhật stored entry, đồng thời xóa hoặc đổi configured key, trước khi mong shell key vừa rotate được chọn.
  • PI_EXPERIMENTAL không liên quan đến provider authentication và không phải switch permission hay “yolo”.
  • Không in toàn bộ environment dump khi debug. Chỉ kiểm tra non-secret marker hoặc từng metadata field, đồng thời coi PI_SESSION_FILE là local data nhạy cảm.

Tiếp theo

  • Tham chiếu cấu hình trình bày settings.json, trust, resource, tool và session.
  • Tham chiếu API trình bày public SDK surface.
  • Thêm một nhà cung cấp mô hình trình bày models.json, authentication và custom adapter.

Trong trang này