Skip to content

Latest commit

 

History

194 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

agent47

An open-source, hackable agentic coding assistant.

MIT License Latest Release CI


agent47 connects to any LLM provider and gives it coding tools - file reading, editing, shell execution, grep, glob - so it can work on your codebase autonomously. It ships as a self-contained distribution with a bundled Java runtime and an interactive terminal UI; installations have no external dependencies.

Install

Install script (macOS and Linux):

curl -fsSL https://raw.githubusercontent.com/rmonvfer/agent47/main/scripts/install.sh | bash

The installer supports macOS on Apple Silicon and Linux on ARM64 and x86-64. It verifies the release archive against the published SHA-256 checksums, unpacks it under ~/.agent47/dist/<version>, and links ~/.local/bin/agent47 to the installed launcher. To install a specific release or update to the latest one:

curl -fsSL https://raw.githubusercontent.com/rmonvfer/agent47/main/scripts/install.sh | AGENT47_VERSION=v0.3.0 bash
curl -fsSL https://raw.githubusercontent.com/rmonvfer/agent47/main/scripts/install.sh | bash

agent47 checks for updates at most once every 24 hours when starting an interactive session. A verified update installs the new version alongside the current one, atomically switches the launcher link, and restarts the command. To force a check immediately:

agent47 update

Automatic checks can be configured under updates in ~/.agent47/settings.json or disabled for a single launch with AGENT47_NO_AUTO_UPDATE=1.

Build from source (requires JDK 25):

git clone https://github.com/rmonvfer/agent47.git
cd agent47
./gradlew :agent47-app:jvmDist
# Distribution at agent47-app/build/jvm-dist/agent47, launcher at bin/agent47

Quick Start

Set at least one API key:

export ANTHROPIC_API_KEY="sk-ant-..."
# or OPENAI_API_KEY, GEMINI_API_KEY, etc.

An interactive session also opens with no credentials at all. It starts without a model and points you at /provider to connect one.

Run interactively:

agent47

Run a one-shot command:

agent47 -p "what files are in this project?"

Without -p/--print, a prompt argument becomes the first message in the interactive TUI. When no system console is available, agent47 automatically uses print mode.

Features

Multi-provider. agent47 works with Anthropic, OpenAI, Google, Ollama, and any OpenAI-compatible API. Switch between models at runtime. Configure custom model definitions, API keys, and provider overrides in ~/.agent47/models.yml. Ollama models are discovered automatically.

Coding tools. The primary agent starts with the full core set: read, bash, edit, write, multiedit, grep, find, ls, todo tools, and batch. Use --tools to replace that set. Subagent coordination adds task, check_inbox, and send_message unless tools are disabled.

Sub-agents and skills. A top-level agent can spawn specialized sub-agents for exploration, planning, or isolated tasks. Each sub-agent gets its own conversation and tool set. Skills are domain-specific knowledge files the model loads on demand - drop a markdown file into .agent47/skills/ and the model can pull it in when it needs that context.

Interactive TUI. The terminal UI renders Markdown, displays diffs, and supports theming. Sessions persist to disk as JSONL so you can pick up where you left off. Slash commands provide quick access to model switching, session management, and custom prompt templates.

Hackable and extensible. Everything is file-based and overridable. Agents, skills, and commands are markdown files you can edit, version, and share. Runtime extensions are ordinary Kotlin .kts source files loaded directly by the self-contained distribution; users do not install Java or distribute extension JARs. See docs/extensions.md. A complete multi-resource repository is available in examples/extension-repository.

Configuration

Global configuration lives in ~/.agent47/. Project-level configuration lives in .agent47/ at your project root. Project settings override global settings.

Path Purpose
~/.agent47/models.yml Custom model definitions and provider config
~/.agent47/settings.json Global settings (default model, thinking level, etc.)
~/.agent47/subagents.json Global subagent runtime settings
~/.agent47/agents/*.md User-defined agent types
~/.agent47/skills/*/SKILL.md User-defined skills
~/.agent47/commands/*.md User-defined slash commands
~/.agent47/extensions/*.kts User-defined Kotlin runtime extensions
~/.agent47/extensions.json Installed global extension repository sources
~/.agent47/git/ Managed global extension repository checkouts
.agent47/settings.json Project-level setting overrides
.agent47/subagents.json Project-level subagent runtime overrides
.agent47/agents/*.md Project-level agent overrides
.agent47/skills/*/SKILL.md Project-level skills
.agent47/commands/*.md Project-level slash commands
.agent47/extensions/*.kts Project-level Kotlin runtime extensions
.agent47/extensions.json Installed project extension repository sources
.agent47/git/ Managed project extension repository checkouts

See docs/configuration.md for full details.

Documentation

  • Agents - define custom agents with their own system prompts, tools, and spawning policies
  • Skills - create domain-specific knowledge files that agents load on demand
  • Commands - write reusable prompt templates invoked with /command args
  • Tools - implement custom tools via the AgentTool<T> interface
  • Extensions - programmatic hooks for intercepting and modifying agent behavior
  • Configuration - settings, model configuration, authentication, and discovery hierarchy
  • CLI and TUI - command-line modes, options, slash commands, and shortcuts
  • Architecture - module boundaries and the request-to-tool runtime flow
  • Instructions - project, global, compatibility, and configured instruction discovery

Why Kotlin?

agent47 uses Kotlin across its AI types, provider integrations, agent loop, coding tools, and terminal UI.

Kotlin on the JVM gives you real concurrency via coroutines backed by a thread pool, not a single-threaded event loop. Coroutines let independent subagents run concurrently while provider responses and tool events stream through the same typed event model.

The type system catches entire categories of bugs at compile time through sealed hierarchies, non-nullable types by default, and exhaustive when expressions. The distribution bundles its own Java runtime, combining Kotlin's static types and the full JVM ecosystem with straightforward deployment.

How Is This Different?

vs Claude Code. Claude Code is a proprietary tool locked to Anthropic's models. agent47 is open-source, works with any provider, and is designed to be extended through file-based configuration. You can define custom agents, skills, and commands without modifying source code.

vs Pi. agent47 is heavily inspired by Pi and in fact, most of our agentic harness is based on its design (although we've made some changes where it makes sense to support the features we think are important)

vs OpenCode. Similar space, different trade-offs. agent47 is built in Kotlin with a self-contained distribution, has a richer subagent and skills system, and uses a layered module architecture.

Contributing

See CONTRIBUTING.md for development setup, coding conventions, and the PR process.

Security

See SECURITY.md for the threat model and vulnerability reporting instructions.

License

MIT - see LICENSE.

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages