Packages
nous
0.13.3
0.17.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.17
0.12.16
0.12.15
0.12.14
0.12.13
0.12.12
0.12.11
0.12.9
0.12.7
0.12.6
0.12.5
0.12.3
0.12.2
0.12.0
0.11.3
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.5.0
AI agent framework for Elixir with multi-provider LLM support
Current section
Files
Jump to
Current section
Files
lib/nous/tools/file_write.ex
defmodule Nous.Tools.FileWrite do
@moduledoc """
File writing tool.
Creates or overwrites files. Automatically creates parent directories
if they don't exist.
"""
@behaviour Nous.Tool.Behaviour
@impl true
def metadata do
%{
name: "file_write",
description: "Write content to a file. Creates parent directories if needed.",
category: :write,
requires_approval: true,
parameters: %{
"type" => "object",
"properties" => %{
"file_path" => %{
"type" => "string",
"description" => "Path to the file to write"
},
"content" => %{
"type" => "string",
"description" => "The content to write to the file"
}
},
"required" => ["file_path", "content"]
}
}
end
@impl true
def execute(_ctx, %{"file_path" => file_path, "content" => content}) do
dir = Path.dirname(file_path)
with :ok <- File.mkdir_p(dir),
:ok <- File.write(file_path, content) do
{:ok, "Wrote #{byte_size(content)} bytes to #{file_path}"}
else
{:error, reason} ->
{:error, "Failed to write #{file_path}: #{inspect(reason)}"}
end
end
end