# CLI reference

> The langoost command-line interface — run scripts, start the REPL, launch the persistent HTTP server, disassemble bytecode, and print the version.

# CLI reference

The `langoost` binary is the entry point for everything. (During development you
can substitute `go run .` for `./langoost`.)

```
./langoost run <file.goost>      Execute a .goost script
./langoost repl                  Interactive REPL (Ctrl+D to exit)
./langoost server [flags]        Start the persistent HTTP execution server
./langoost disasm <file.goost>   Print disassembled bytecode
./langoost version               Print version
```

## run

Compile and execute a script:

```
$ ./langoost run hello.goost
Hello, world!
```

Add `--debug` to enable debug logging (the `logging.debug` level) during the
run:

```
$ ./langoost run --debug hello.goost
```

## repl

Start an interactive session that evaluates one line at a time:

```
$ ./langoost repl
> let x = 21
> print(x * 2)
42
```

## server

Run as a long-lived execution server. The process stays warm and serves
requests with no cold start:

```
$ ./langoost server --port 8080
```

| Flag | Default | Description |
| --- | --- | --- |
| `--port` | `8080` | Port to listen on |
| `--timeout` | `30s` | Max execution time per request |
| `--dir` | `.` | Directory to search for `.goost` files |

## disasm

Print the compiled bytecode for a script — useful for understanding what the
compiler produces:

```
$ ./langoost disasm examples/math.goost

=== examples/math.goost (16 instructions) ===
0000 [   3] CONST                #0 (<fn add/2>)
0001 [   3] DEF_GLOBAL           #1 (add)
...
=== add (6 instructions) ===
0000 [   4] LOAD_LOCAL           slot=0
0001 [   4] LOAD_LOCAL           slot=1
0002 [   4] ADD
0003 [   4] RETURN
```

## Error messages

Runtime and compile errors include the file name and line (and column for
lex/parse errors):

```
main.goost:12: undefined variable "x"
main.goost:7: function "add" expects 2 arguments, got 3
main.goost:3: array index 5 out of bounds (len=3)
script.goost:4:12: expected }, got EOF
```

For how the pipeline fits together, see **[architecture](/docs/architecture)**.