Persistent prompt history
Recall what you typed across sessions and projects, not just the current one. Stored locally. Can be turned off in Settings.
Checking how the loader reads config files
$ sed -n 1,12p src/config/load.ts
export function loadConfig(source: string) {
return JSON.parse(source);
}
Took 0.1s
Guarding empty and whitespace-only files, then running the tests
edit src/config/load.ts
- return JSON.parse(source); + const text = source.trim(); + return text ? JSON.parse(text) : {};
Took 0.2s
$ npm test
Tests 8 passed (8) Duration 1.8s
Took 1.8s
Empty files now return an empty config. Existing behavior is preserved and covered by tests. Nothing has been committed.
Looking for the project’s existing warning helper
$ rg -n "export function warn" src
src/log.ts:8:export function warn(message: string) {
Took 0.1s
Warning on the empty branch and adding a test for it
edit src/config/load.ts
+ import { warn } from '../log'; - return text ? JSON.parse(text) : {}; + if (!text) { + warn('Config file is empty; using defaults'); + return {}; + } + return JSON.parse(text);
Took 0.2s
edit test/config/load.test.ts
+ it('warns on an empty file', () => { + loadConfig(' '); + expect(warn).toHaveBeenCalledOnce(); + });
Took 0.2s
$ npm test
Tests 9 passed (9) Duration 1.9s
Took 1.9s
Empty config files now log a warning and fall back to defaults. A new test covers it, and all 9 tests pass. Nothing has been committed.
Checking how the CLI parses its arguments
$ sed -n 1,9p src/cli.ts
import { readFileSync } from 'node:fs';
import { parseArgs } from 'node:util';
import { loadConfig } from './config/load';
const { values } = parseArgs({
options: { verbose: { type: 'boolean' } },
});
const source = readFileSync('orbit.json', 'utf8');
Took 0.1s
Adding the flag, with orbit.json as its default
edit src/cli.ts
- options: { verbose: { type: 'boolean' } }, + options: { verbose: { type: 'boolean' }, config: { type: 'string', default: 'orbit.json' } }, - const source = readFileSync('orbit.json', 'utf8'); + const source = readFileSync(values.config, 'utf8');
Took 0.2s
Trying the flag against an empty fixture
$ npx tsx src/cli.ts --config fixtures/empty.json
warn: Config file is empty; using defaults orbit ready (0 services)
Took 0.6s
$ npm test
Tests 9 passed (9) Duration 1.9s
Took 1.9s
orbit now accepts --config <path> and still defaults to orbit.json. It works with the empty fixture, and all 9 tests pass. Nothing has been committed.
Finding the usage section in the README
$ rg -n "## Usage" README.md
42:## Usage
Took 0.1s
Adding an options list under Usage
edit README.md
+ ### Options + + - `--config <path>`: config file to load (default `orbit.json`) + - `--verbose`: print detailed logs
Took 0.2s
Reviewing the changes before committing
$ git status --short
M README.md M src/cli.ts M src/config/load.ts M test/config/load.test.ts
Took 0.1s
$ git commit -am "Warn on empty config and add --config flag"
[main 3f9c2ab] Warn on empty config and add --config flag 4 files changed, 18 insertions(+), 4 deletions(-)
Took 0.2s
Committed as 3f9c2ab on main. The README now documents --config and --verbose. Nothing has been pushed.
This is an illustrative session. The look and experience of the terminal are subject to change. Install a1 to see the current release.
Vision
a1 keeps the essence of pi: a small, focused core. Everything else is built on top, from the details that make a working day smoother to the features that will matter as agentic engineering grows.
Recall what you typed across sessions and projects, not just the current one. Stored locally. Can be turned off in Settings.
After a response, a1 can propose a next prompt. Accepting only places it in the editor. Nothing is sent until you press Enter.
Prompts, tool output, and responses are laid out to be read. Scroll back through a long answer, then return to the editor without losing context.
Leave a1 and come back with a1 --session <id> from the same project.
Drop a screenshot into the prompt. Size limits are configurable in Settings.
Select transcript text with the mouse and copy it, even while a response is streaming.
a1 install, remove, list, and update for npm, Git, or local packages.
a1 checks for a newer release at most once a day and shows the command. It never installs anything by itself.
Everything lives in ~/.a1/agent. Your pi profile is never read, copied, or changed.
Architecture
A better interface shouldn’t cost you the tools you already have.
pi handles models, sessions, and tool execution. a1 owns the layer you interact with and stays compatible with pi extensions. Install the packages you already use and keep working the way you like.
~/.a1/agent. Your pi settings and sessions are not imported or changed.interface · prompt history · suggestions · profile
models · sessions · tool execution
Comparison
a1 is pi with a different front. Your models, extensions, and workflow carry over. What changes is the layer you spend all day looking at.
| Capability | pithe extensible foundation | a1pi, with the a1 experience |
|---|---|---|
| Coding tools | ✓Read, edit, run commands | ✓Powered by the pi engine |
| Model choice | ✓Multiple providers | ✓Same providers, through pi |
| Extensions & workflows | ✓Extensions, skills, templates, themes | ✓pi-compatible ecosystem |
| License | ✓MIT | ✓MIT |
| Terminal interface | pi’s interface | ✓Redesigned interface |
| Profile & settings | ~/.pi/agent | ~/.a1/agent |
This compares the pi foundation a1 uses with a1’s documented behavior, not every community extension or future pi release. pi is intentionally extensible, and custom packages can add overlapping capabilities. Features may vary by release.
The same engine, the same providers, the same extension packages. a1 runs pi underneath and does not fork its tool behavior.
Persistent prompt history, next-step suggestions, a redesigned transcript, mouse selection and copy, and a profile that is yours.
a1 uses its own profile and never touches ~/.pi/agent. Try it on one project. Remove it with nothing to clean up.
Roadmap
Each version is a milestone a1 is working toward, in order. Versions describe targets, not dates or features available today.
Repository, packaging, installer, and release pipeline in place.
Everything you rely on in pi works in a1, with an improved UX around it.
Run several agents side by side from one a1 session.
Split a task across agents and coordinate their results.
Watch and steer many agent sessions in one terminal.
A fully a1-designed interface across every view.
Extensions built for a1, alongside the pi ecosystem.
Hand work to agents running on other machines.
Check on remote agents and approve their work from your phone.
Stable, documented, and ready for everyday use.
The roadmap may change without notice. Follow the repository for progress and releases.
Installation
Install a1, open a project, and start with a small task. Bring your pi extensions and the model provider you already use.
One command. Requires Node.js ≥22.19 and <25 with npm.
Run a1 in any project directory. Your editor stays the same.
Use /login for provider access and /models to choose a model. Usage is billed by your provider.
npm x -y -- @timurproko/a1-installcd your-project && a1
# then /login and /models inside a1
FAQ
a1, Agent Number One, is an open-source, terminal-native AI coding agent built on pi. It adds an a1-owned interface, persistent prompt history, and optional next-step suggestions around pi’s coding engine. A multi-agent workspace is the longer-term direction, not a currently available capability.
pi supplies the underlying coding engine and extension ecosystem. a1 focuses on the experience around that engine: how you interact with a session, recall prompts, read output, and decide what to do next. It is a separate project built on pi, not a replacement for its ecosystem.
a1 preserves pi extension compatibility. Install packages from npm, Git, or a local path into a1’s own profile. Your existing pi profile is not automatically imported. For MCP tools, install an adapter such as pi-mcp-adapter, then run /mcp setup inside a1. See the extension instructions.
No. a1 runs in your terminal, alongside the editor and development tools you already use. Open a terminal in your project directory and launch a1. It works with your project files; you do not need to move your code into a new hosted workspace.
Install Node.js ≥22.19 and <25 with npm available, then run:
npm x -y -- @timurproko/a1-install
Open your project directory and run a1. Use /login to configure provider access and /models to choose an available model. Start with a small task, such as explaining a module or reviewing a change. See the installation guide.
a1 connects to models through the pi engine. Available choices depend on the providers supported by your installed release and the credentials or subscriptions you configure. a1 does not require an a1-exclusive model. Use the model selector to see your available options; provider terms and limits still apply.
a1’s source code is available under the MIT license. Model access is separate: you bring a supported provider account, subscription, or API credentials, and that provider’s pricing and terms apply. Optional prompt suggestions make additional model requests. Open-source software does not mean unlimited or free model usage.
Not yet. Multi-agent work is a roadmap target for version 0.3.X, not a released feature. Today, a1 focuses on the pi-powered coding experience. Follow the repository for development updates.
a1 keeps its profile at ~/.a1/agent, separate from pi’s ordinary ~/.pi/agent profile. It does not automatically copy, merge, or import your pi settings, credentials, extensions, or sessions. Configure a1’s provider access and install your preferred extensions independently. Both tools can still edit the project files you give them access to.
Yes, through compatible extensions. For example, install the MCP adapter with:
a1 install npm:pi-mcp-adapter
Then launch a1 and run /mcp setup. MCP connectivity comes from the adapter, not a separate built-in a1 MCP service. Only install extensions and connect servers you trust; they can execute code or access data using the permissions you provide.
No. A next-step suggestion is proposed text, not approval or a submitted prompt. Pressing Tab accepts it into the editor; you still press Enter separately to send it. You can edit or ignore it, and turn suggestions off in Settings. Once you submit a task, the coding agent can use its enabled tools. Suggestion controls are not a sandbox or an approval gate for every tool call.
a1 uses ~/.a1/agent for its profile. Persistent prompt history is stored locally as unencrypted text in a separate database and can be disabled in Settings; disabling it does not delete saved entries. Model requests go to your configured provider. Terminal-native does not mean local inference. Read the history and storage documentation for details.
The terminal application and its file tools run on your machine. Model inference happens wherever your configured provider runs it. With a remote provider, requests containing task context are sent to that provider. A local-model setup depends on a compatible endpoint and configuration; a1 is not an offline model bundled with the installer.
For a persisted a1 session, use the resume command printed when you leave it, or run a1 --session <id> from the original project directory. Persistent prompt history is different: it recalls what you typed, not the full conversation or an agent’s memory. See the session documentation for current behavior and storage options.
Run a1 update to install the release channel. Run a1 update --extensions to update installed packages, or a1 update --models to refresh model catalogs. Development previews are available with a1 update --develop; these can differ from a stable release. Check the repository for release instructions and changes.
Treat generated code and commands as work to review, not guaranteed-correct output. Use version control, inspect diffs, run tests, and keep secrets out of prompts. The agent’s tools can read, change, and execute files with the permissions of the process. For untrusted code or unattended work, use an appropriate container or sandbox. A polished interface is not a security boundary.
a1 is developed in the open on GitHub. You can inspect the source, follow releases, and report reproducible issues. Include your a1 version, operating system, terminal, and a minimal example. Remove private prompts, credentials, and project data before sharing logs or screenshots.