README.md

# TerrariumExe

[![Hex.pm](https://img.shields.io/hexpm/v/terrarium_exe.svg)](https://hex.pm/packages/terrarium_exe)
[![HexDocs](https://img.shields.io/badge/hex-docs-blue.svg)](https://hexdocs.pm/terrarium_exe)
[![CI](https://github.com/pepicrft/terrarium_exe/actions/workflows/terrarium_exe.yml/badge.svg)](https://github.com/pepicrft/terrarium_exe/actions/workflows/terrarium_exe.yml)

[exe.dev](https://exe.dev) provider for [Terrarium](https://github.com/pepicrft/terrarium) sandbox environments.

exe.dev provides persistent Linux VMs with sub-second start times, unrestricted outbound internet access, and SSH-based access.

## Installation

```elixir
def deps do
  [
    {:terrarium_exe, "~> 0.1.0"}
  ]
end
```

## Usage

```elixir
# Configure
config :terrarium,
  providers: [
    exe: {Terrarium.Providers.Exe,
      token: System.fetch_env!("EXE_DEV_TOKEN"),
      ssh_key_path: "~/.ssh/id_ed25519"
    }
  ]

# Create a sandbox
{:ok, sandbox} = Terrarium.create(:exe)

# Execute commands
{:ok, result} = Terrarium.exec(sandbox, "echo hello")

# File operations
:ok = Terrarium.write_file(sandbox, "/home/exedev/config.txt", "content")
{:ok, content} = Terrarium.read_file(sandbox, "/home/exedev/config.txt")

# Clean up
:ok = Terrarium.destroy(sandbox)
```

## Authentication

exe.dev uses token-based authentication. Tokens are generated by signing with your SSH key registered with exe.dev. See the [exe.dev API docs](https://exe.dev/docs/api) for token generation details.

## License

MIT