Skip to Content
InvokeREPL

Golem REPL

The Golem REPL provides an interactive environment for testing and working with agents during development. It allows you to create agent instances, invoke methods, see logs streamed live, and run CLI commands — all from a single session.

TypeScript REPL

The REPL uses TypeScript. Start it with:

golem repl

The REPL auto-generates TypeScript classes for all agents in the application. You can create or get agents, invoke their methods, and see results directly:

>>> const c1 = await CounterAgent.get("c1") >>> await c1.increment() 1 >>> await c1.increment() 2 >>> await c1.getCount() 2

It is possible to use the TypeScript REPL with agents written in any language — including Effect TypeScript, Rust, Scala, and MoonBit agents.

Effect applications use this same generated TypeScript REPL client. The REPL does not expose an Effect runtime or return Effect programs; use the generated Promise-based TypeScript methods interactively, and use an Effect bridge library in an external application when you need Effect-native composition.

Built-in commands

The REPL provides built-in commands prefixed with : that correspond to CLI commands, so you can build, deploy, and manage agents without leaving the REPL:

  • :build — Build the application
  • :deploy — Deploy the application
  • :agent-stream <agent> — Stream agent logs
  • :agent-get <agent> — Get agent metadata, including its status
  • :stream-logs on|off — Show or set streaming of the invoked agents’ logs
  • :reload — Reload the REPL

Use :help or tab-completion to discover all available commands.

Running scripts

Scripts can be run non-interactively using the --script-file flag. This is useful for automated testing or repeatable workflows:

cat test.ts
const c2 = await CounterAgent.get("c2") await c2.increment() await c2.increment()
golem repl --script-file test.ts --yes # Output: 2

Short scripts can also be passed inline with --script.

Language support

The REPL currently supports TypeScript only.

The TypeScript REPL can work with agents written in any language — you can use TypeScript syntax to invoke Effect TypeScript, Scala, Rust, or MoonBit agents.