Permission update types for configuring permissions via the control protocol.
These types match the TypeScript/Python SDK permission update structures and can be used to programmatically update tool permissions in sessions.
Update Types
:add_rules- Add new permission rules:replace_rules- Replace existing permission rules:remove_rules- Remove specific permission rules:set_mode- Change the permission mode:add_directories- Add directories to allowed paths:remove_directories- Remove directories from allowed paths
Destinations
Permission updates can target different storage locations:
:user_settings- User-level settings (persistent):project_settings- Project-level settings (persistent):local_settings- Local directory settings (persistent):session- Session-only settings (temporary)
Examples
# Add a rule to allow Bash commands in session
update = Update.add_rules(
rules: [RuleValue.new("Bash", "echo *")],
behavior: :allow,
destination: :session
)
# Set permission mode for the session
update = Update.set_mode(:accept_edits, destination: :session)
Summary
Types
Permission behavior for rules.
Destination for permission updates.
Permission update struct.
Permission update type.
Functions
Creates an add_directories update.
Creates an add_rules update.
Creates a new permission update.
Creates a remove_directories update.
Creates a remove_rules update.
Creates a replace_rules update.
Creates a set_mode update.
Converts a permission update to a map for the control protocol.
Types
@type behavior() :: :allow | :deny | :ask
Permission behavior for rules.
@type destination() :: :user_settings | :project_settings | :local_settings | :session
Destination for permission updates.
@type t() :: %ClaudeAgentSDK.Permission.Update{ behavior: behavior() | nil, destination: destination() | nil, directories: [String.t()] | nil, mode: ClaudeAgentSDK.Permission.permission_mode() | nil, rules: [ClaudeAgentSDK.Permission.RuleValue.t()] | nil, type: update_type() }
Permission update struct.
@type update_type() ::
:add_rules
| :replace_rules
| :remove_rules
| :set_mode
| :add_directories
| :remove_directories
Permission update type.
Functions
Creates an add_directories update.
Creates an add_rules update.
@spec new( update_type(), keyword() ) :: t()
Creates a new permission update.
Parameters
type- Update type (:add_rules, :replace_rules, :remove_rules, :set_mode, :add_directories, :remove_directories)opts- Options for the update (rules, behavior, mode, directories, destination)
Examples
Update.new(:add_rules,
rules: [RuleValue.new("Bash", "echo *")],
behavior: :allow,
destination: :session
)
Creates a remove_directories update.
Creates a remove_rules update.
Creates a replace_rules update.
@spec set_mode( ClaudeAgentSDK.Permission.permission_mode(), keyword() ) :: t()
Creates a set_mode update.
Converts a permission update to a map for the control protocol.
Examples
iex> update = Update.add_rules(
...> rules: [RuleValue.new("Bash", "echo *")],
...> behavior: :allow,
...> destination: :session
...> )
iex> Update.to_map(update)
%{
"type" => "addRules",
"rules" => [%{"toolName" => "Bash", "ruleContent" => "echo *"}],
"behavior" => "allow",
"destination" => "session"
}