## ADDED Requirements

### Requirement: System creates Cloudflare tunnel on instance start
When a tool instance is started, the system SHALL create a Cloudflare tunnel and DNS record to expose it publicly.

#### Scenario: Start instance creates tunnel
- **WHEN** a user starts a tool instance
- **THEN** the system calls the Cloudflare API to create a tunnel
- **AND** creates a CNAME DNS record for `instance-{id}.{zone}`
- **AND** stores the tunnel ID and public URL in the database

#### Scenario: Tunnel points to correct container
- **WHEN** a tunnel is created for an instance
- **THEN** the tunnel ingress rule maps the subdomain to the container's internal DNS name and port

### Requirement: System deletes Cloudflare tunnel on instance stop
When a tool instance is stopped or deleted, the system SHALL clean up the associated Cloudflare tunnel and DNS record.

#### Scenario: Stop instance deletes tunnel
- **WHEN** a user stops a running instance
- **THEN** the system deletes the DNS record
- **AND** deletes the Cloudflare tunnel

#### Scenario: Delete instance cleans up tunnel
- **WHEN** a user deletes an instance
- **AND** the instance has an active tunnel
- **THEN** the system deletes both the DNS record and the tunnel

### Requirement: Frontend uses public URL for instance access
The frontend SHALL display and link to the public Cloudflare URL for running instances.

#### Scenario: Open button uses public URL
- **WHEN** a user views a running instance
- **THEN** the "Open" button links to the instance's public URL
- **AND** the URL opens in a new tab

#### Scenario: Session list shows public URL
- **WHEN** a user views their sessions
- **THEN** each running session displays its public URL

### Requirement: Only instance owner can start/stop/delete tunnels
The system SHALL verify that only the instance owner can trigger tunnel creation or deletion.

#### Scenario: Owner starts instance
- **WHEN** the instance owner clicks "Start"
- **THEN** the tunnel is created successfully

#### Scenario: Non-owner attempts to start
- **WHEN** a non-owner attempts to start an instance
- **THEN** the request returns 403 Forbidden
