AgentKit
Tài liệuBộ kitTham chiếu CLIỨng dụng Desktop

secrets

ak secrets run

Chạy một chương trình với secret chỉ được giao vào các biến môi trường được đặt tên, dưới exec grant.

Dùng ak secrets run để khởi chạy một chương trình với secret trong các biến môi trường mà --env nêu tên, và không ở đâu khác. Lệnh phục vụ coding agent: bên gọi được nhận diện giống cách ak secrets resolve nhận diện, bằng cách đi ngược cây tiến trình và băm binary của agent.

Cách dùng

ak secrets run --env VAR=REF [--env VAR=REF ...] [--purpose <text>] [--project <slot>] [--session <id>] -- <program> [args...]

Chương trình và đối số của nó đứng sau --; mọi thứ sau dấu phân cách thuộc về chương trình, không bao giờ thuộc về ak. Cần ít nhất một cặp --env, tối đa 16 cặp, và không biến nào được đặt tên hai lần. --json không được hỗ trợ: đầu ra của chính chương trình là đầu ra.

CờMặc địnhMô tả
--env VAR=REFbắt buộcGiao secret REF vào biến môi trường VAR. Có thể lặp lại.
--purpose <text>rỗngNhãn purpose mà grant phải khớp nguyên văn.
--project <slot>AK project chứa thư mục hiện tạiProject slot mà các grant thuộc về.
--session <id>khôngSession id gắn lần chạy này với lần chạy agent đã yêu cầu nó.
--backend <backend>keychainBackend đang giữ giá trị: keychain, file hoặc memory.
--unlock-with-recoverytắtMở vault của backend file bằng khoá riêng khôi phục và đặt passphrase mới.

Exec grant

Mỗi cặp VAR=REF cần một exec grant (ak secrets grant REF --exec PROGRAM --env VAR) cho agent đang gọi trên đúng chương trình này: đường dẫn đã giải mọi symlink và hash nội dung của nó. Một chương trình tìm thấy ở chỗ khác trên PATH, hoặc đã thay đổi kể từ khi grant, sẽ không khớp grant nào, và mỗi scope chưa được bao phủ được gửi tới người vận hành để trả lời bằng ak secrets approve, như resolve vẫn làm. Grant thường không bao giờ release ở đây, và exec grant không bao giờ release cho resolve.

Một REF không có giá trị lưu trữ mà trùng tên một alias sẽ đi theo alias đó một bước, và exec grant được kiểm tra theo đích của alias, không bao giờ theo tên alias.

Mọi scope đều được kiểm tra, và chương trình được băm lại, trước khi đọc bất kỳ giá trị nào, nên một lần chạy bị kiểm tra grant từ chối sẽ không tiêu allow-once nào. Nếu chương trình vẫn không khởi chạy được sau khi giá trị đã release, ledger ghi lại rằng nó chưa bao giờ chạy.

Chương trình chạy thế nào

  • Không qua shell. Chương trình được khởi chạy trực tiếp, trong thư mục làm việc hiện tại, nên không gì trong đối số được mở rộng. Shell và launcher bị từ chối.
  • Môi trường dựng lại. Một vài biến được sao chép từ môi trường này (HOME, USER, LANG, TERM, TMPDIR và các biến cùng loại), PATH là danh sách cố định các thư mục hệ thống (dẫn đầu, với script #!/usr/bin/env NAME, bởi thư mục nơi tìm thấy NAME), cộng thêm các biến đã grant; không gì khác, kể cả proxy và tuỳ chọn runtime. Chương trình chạy một helper cài ngoài thư mục hệ thống phải gọi nó bằng đường dẫn.
  • Output bị gạch. Output của chương trình được chuyển tiếp với mọi giá trị đã grant bị gạch bỏ. Vài byte cuối được giữ lại (ít hơn dạng dài nhất của một giá trị, mà với dạng escape có thể dài hơn chính giá trị) cho tới khi chương trình ghi thêm hoặc thoát. Output đi qua pipe, không phải terminal.
  • Tín hiệu và exit. Ctrl-C từ terminal tới được chương trình, còn SIGTERM và SIGHUP được chuyển tiếp cho nó; ak chờ nó thoát và không bao giờ kill nó. Exit status của chương trình là của lệnh này. Lỗi của chính ak luôn in một dòng lỗi bắt đầu bằng secrets run: trên stderr; status của chương trình được chuyển tiếp nguyên vẹn, dù bản thân chương trình có thể in bất cứ gì.

Exec grant giới hạn chương trình nào nhận giá trị, không giới hạn chương trình làm gì với nó. Chương trình vẫn có thể gửi giá trị đi bất cứ đâu, ghi ra file hoặc chuyển cho tiến trình con của nó; một interpreter chạy bất kỳ script nào được đưa cho; một chương trình như curl, wget hay gh có thể được đối số của nó chỉ thị gửi một biến đi bất cứ đâu hoặc chạy chương trình khác; và bất kỳ tiến trình nào của cùng user đều đọc được môi trường của chương trình khi nó đang chạy. Chỉ cấp exec scope cho chương trình mà chính bạn sẵn sàng trao giá trị.

Lệnh đọc vault, file alias và file grant, ghi một dòng audit cho mỗi biến, và khởi chạy chương trình. Lệnh không bao giờ in giá trị.

Đầu ra

Khi thành công, ak không có đầu ra riêng: stdout và stderr mang output được chuyển tiếp của chương trình, với các giá trị đã grant bị gạch bỏ.

Kết quả và mã thoát

Mã thoátÝ nghĩa
0Chương trình thoát 0. Mọi status khác của nó được chuyển tiếp nguyên vẹn (128 cộng số hiệu tín hiệu nếu một tín hiệu kết thúc nó).
2Cờ không hợp lệ, --json, không có chương trình sau --, hoặc chương trình hay biến bị từ chối.
3Không có secret với ref đó.
5Không dùng được vault, file alias, file grant hoặc audit ledger, hoặc chương trình không khởi chạy được.
6Một block từ chối bên gọi, không xác định được danh tính của nó, hoặc chương trình đã thay đổi sau khi được kiểm tra.
7Vault của backend file cần passphrase và lần chạy này không có terminal.
8Không có exec grant nào bao phủ một biến; một yêu cầu đang chờ ak secrets approve.
9Bên gọi đã tạo quá nhiều yêu cầu duyệt và đang trong cool-down.
15Một policy của vault đã sync từ chối lần release này, hoặc không trả lời được là có policy nào chi phối nó hay không; sync.reason trong lỗi JSON nêu lý do.

Lệnh liên quan