PHPackages                             artisan-build/tobias - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [CLI &amp; Console](/categories/cli)
4. /
5. artisan-build/tobias

ActiveProject[CLI &amp; Console](/categories/cli)

artisan-build/tobias
====================

Tobias — an agentic terminal coding assistant. Globally installable as `toby`.

v0.1.0(1mo ago)00[1 PRs](https://github.com/artisan-build/tobias/pulls)MITPHPPHP ^8.4

Since Jun 3Pushed 1mo agoCompare

[ Source](https://github.com/artisan-build/tobias)[ Packagist](https://packagist.org/packages/artisan-build/tobias)[ Docs](https://github.com/artisan-build/tobias)[ RSS](/packages/artisan-build-tobias/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (12)Versions (3)Used By (0)

 [![Tobias — an Artisan Build experiment](art/toby_edit.png)](art/toby_edit.png)

 *An experimental agentic coding assistant for the terminal — built in the open, using pure PHP, unfinished on purpose.*

 [![Latest Version on Packagist](https://camo.githubusercontent.com/d115c5e1ad691661f3794de18441432773521121d0bcb1ff31235f8eedea1a81/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6172746973616e2d6275696c642f746f626961732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/artisan-build/tobias) [![PHP Version](https://camo.githubusercontent.com/d73cbc202a957f93c50b259a28ce9038fdef3ff8c7724f1f93d217bd9009e6df/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6172746973616e2d6275696c642f746f626961732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/artisan-build/tobias) [![License](https://camo.githubusercontent.com/d016d864b94bbea9e1c14ff0132f644673cc3d7a863fda91e9a30d7c55654a8f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6172746973616e2d6275696c642f746f626961732e7376673f7374796c653d666c61742d737175617265)](LICENSE)

---

> **Heads up — this is a learning exercise, not a product.**Tobias (Toby to friends) is an experiment in building an agent *platform* in PHP. It is early, it is rough, and that's the point: it exists so we can learn how far Laravel, [Prism](https://github.com/prism-php/prism), and an async terminal UI can be pushed toward a real coding agent. How good it gets depends on the models *and* the architecture — and figuring out which is which is half the fun. Use it to tinker, not to ship.

What it is
----------

[](#what-it-is)

Tobias is a full-screen terminal UI (TUI) coding agent. It's **modal, like vim** — you drive it from a NORMAL mode and drop into INSERT to type or a `:`COMMAND line to run commands. It runs **multiple chat sessions in parallel**, talks to **both hosted and locally-run models** through Prism, and can read, write, and edit files in your project. It installs globally as the `toby`binary.

It's built as a *platform* — the providers, tools, slash-commands, and UI components are all pluggable pieces, with deliberate empty sockets where more will go. Most of the interesting work is still ahead of it (see [Roadmap](#roadmap)).

 [![The Tobias TUI — sessions, conversation, context, and the keyboard-shortcuts overlay](art/screengrab.png)](art/screengrab.png)

How it's built
--------------

[](#how-its-built)

PieceWhat it does**laravel-zero**The application framework and `toby` binary.**Prism**Provider orchestration — one API across hosted and local models.**Parfait**[`artisan-build/parfait`](https://github.com/artisan-build/parfait) — the component-based TUI rendering library.**ReactPHP**A non-blocking event loop drives keystrokes through an `AsyncPrompt`, so the terminal never freezes while the agent thinks.**Resonance**Optional Pusher/WebSocket layer for real-time collaboration — dormant until a channel is connected.The agent itself lives under `app/Console/Prompts/Code` — provider adapters, file tools, slash-commands, and session management, each in its own small, swappable class.

Requirements
------------

[](#requirements)

- PHP **8.4+** (required by `artisan-build/resonance`)
- `ext-mbstring`, `ext-intl`

Installation
------------

[](#installation)

### Global

[](#global)

```
composer global require artisan-build/tobias
```

Make sure your global Composer `bin` directory is on your `PATH`(`~/.composer/vendor/bin` or `~/.config/composer/vendor/bin`), then run `toby`.

> To track the bleeding edge instead of tagged releases, install `dev-main`straight from the GitHub repo:
>
> ```
> composer global require artisan-build/tobias:dev-main
> ```

### Local (development)

[](#local-development)

```
git clone https://github.com/artisan-build/tobias
cd tobias
composer install
./toby
```

Configuration
-------------

[](#configuration)

Tobias reads provider credentials from the environment. Set keys for the providers you use — in your shell profile for global use, or a `.env` for local development (copy `.env.example`). You can switch providers from inside the app.

```
export ANTHROPIC_API_KEY=sk-ant-...
export OPENAI_API_KEY=sk-...
export GEMINI_API_KEY=...

# Local models need no key — just point at the server:
export LMSTUDIO_URL=http://127.0.0.1:1234/v1
export OLLAMA_URL=http://localhost:11434
```

Prism is configured in `config/prism.php` and recognizes a wide range of providers (OpenAI, Anthropic, Gemini, Mistral, Groq, xAI, DeepSeek, OpenRouter, Ollama, LM Studio, and more). The in-app provider switcher currently wires up **Anthropic, OpenAI, Gemini, and LM Studio** — adding the rest is a matter of dropping a small adapter into `app/Console/Prompts/Code/Providers`.

Usage
-----

[](#usage)

```
toby            # launch the assistant (default command)
toby code       # the same thing, explicitly
toby list       # show all commands
```

### Modal editing (like vim)

[](#modal-editing-like-vim)

Tobias has three modes. The current one shows in the status bar (`NORMAL` / `INSERT` / `COMMAND`).

- **NORMAL** — the default. Navigate and act with single keys:
    - `i` enter INSERT · `:` enter COMMAND · `?` help · `q` quit
    - `Tab` / `Shift-Tab` move between panels · `Ctrl-P` command palette
    - `j` / `k` move the cursor, `l` select, `G` jump to bottom (panel-aware, vim-style) · `~` / `@` attach a file reference
    - `Enter` sends the current message
- **INSERT** — type your message. `Esc` returns to NORMAL (then `Enter` sends).
- **COMMAND** — a `:` command line. For example, `:model ` switches the active model. `Esc` cancels.

### Slash-commands

[](#slash-commands)

From the message line: `/help`, `/new`, `/sessions`, `/resume`, `/save`, `/clear`, `/context`, `/quit`.

### Tools

[](#tools)

The agent has file tools — `list_files`, `read_file`, `write_file`, `update_file` — and a guarded `run_bash` that asks for approval before it runs anything.

Roadmap
-------

[](#roadmap)

Tobias is a sketch of an agent platform, not a finished one. The empty sockets we most want to fill:

- **Migrate onto the core Laravel AI package** (still orchestrated through Prism).
- **Persist sessions in SQLite** instead of holding them only in memory.
- **Embeddings for smart auto-compaction &amp; RAG** over long sessions and the codebase.
- **Fully async I/O** via the ReactPHP PSR-18 browser, so *nothing* — model calls, tools, network — ever blocks the terminal loop.
- **Stronger tools** (richer editing, search, project-aware actions).
- **A real test suite** — boot/command-registration, provider, and tool coverage.
- Maybe **session branching**. Undecided — opinions welcome.

If any of that sounds fun to hack on, that's exactly what this repo is for.

A note on the persona
---------------------

[](#a-note-on-the-persona)

Toby thinks of itself as a PHP programmer in the Laravel ecosystem — terse, honest about tradeoffs, and quick to say "it depends." It's built and maintained by [Artisan Build](https://artisan.build) ([Len Woodward / ProjektGopher](https://github.com/ProjektGopher)and Ed Grosvenor / MaybeEdward).

License
-------

[](#license)

MIT

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance90

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

51d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/63312522f1920cf5b3c34ea474511a484162b36166a33ae4b9fde6c65ab2c2fc?d=identicon)[ProjektGopher](/maintainers/ProjektGopher)

---

Tags

cliconsoleailaravel-zeroAgentcodingtui

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/artisan-build-tobias/health.svg)

```
[![Health](https://phpackages.com/badges/artisan-build-tobias/health.svg)](https://phpackages.com/packages/artisan-build-tobias)
```

###  Alternatives

[ccxt/ccxt

A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go

43.2k341.0k1](/packages/ccxt-ccxt)[nunomaduro/collision

Cli error handling for console/command-line PHP applications.

4.7k357.7M11.5k](/packages/nunomaduro-collision)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M246](/packages/laravel-ai)[mehrancodes/laravel-harbor

A CLI tool to Quickly create On-Demand preview environment for your apps.

10097.5k](/packages/mehrancodes-laravel-harbor)[rector/rector-src

Instant Upgrade and Automated Refactoring of any PHP code

136406.3k14](/packages/rector-rector-src)[whatsdiff/whatsdiff

See what's changed in your project's dependencies

771.2k](/packages/whatsdiff-whatsdiff)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
