Skip to main content

fj — one-shot CLI coding agent powered by soothe-nano

Project description

fj

fj is a one-shot coding-agent CLI — everything after the command is the query:

fj explain this repo
fj -f what did we decide last time?
fj summarize README.md

It embeds soothe-nano — tools, skills, MCP, subagents, and progressive loading — with SQLite persistence.

Package name: fj-ai. Runtime: soothe-nano.

Quick start

1. Install

pip install fj-ai
# or
uv tool install fj-ai

Requires Python 3.11+.

2. Config

fj setup

fj setup is a guided setup for a local OpenAI-compatible server (Ollama, LM Studio, vLLM, ...) — it updates only endpoint/key/model basics in ~/.soothe/config/nano.yml and keeps other keys intact.

Cloud (no config file):

export OPENAI_API_KEY=sk-...
fj summarize README.md

Missing nano.yml falls back to OPENAI_API_KEY or ANTHROPIC_API_KEY.

3. Run

fj who are you
fj list Python files in this directory

Usage

fj setup
fj completion zsh|bash
fj [options] [--] <query...>
Flag Meaning
-c PATH / --config Alternate nano.yml
-t ID / --thread Alone: pin active thread; with query: continue it
-f / --follow Continue the latest active thread
-l / --list List latest threads (newest first; default 20)
-n NUM Threads to list with -l (0 = all); requires -l
-w DIR / --workspace Workspace root
--no-stream Wait for the full answer instead of streaming tokens
-v / --verbose Mirror tool calls and custom events on stderr
-V / --version Version
-- Force remaining argv into the query

Query modes:

fj QUERY...              # start a new thread (default)
fj -f QUERY...           # continue the latest active thread
fj -t ID QUERY...        # continue a specific thread
fj -t ID                 # pin thread as active (no query)
  • Queries start a new thread by default; use -f to continue the latest or -t to continue/pin a specific one.
  • -f and -t are mutually exclusive; -n requires -l; -l takes no query.
  • One query per thread at a time; different threads may run concurrently.
  • With -v, fj prints the thread <id> on stderr before the run.

Shell completion

# zsh
eval "$(fj completion zsh)"
# bash
eval "$(fj completion bash)"
# persist in ~/.zshrc / ~/.bashrc

Tab completion predicts natural-language intents (not only flags) using the router fast model from nano.yml — it does not start the coding agent. If fast is omitted, it falls back to default.

Defaults

Concern Default
Config ~/.soothe/config/nano.yml (SOOTHE_HOME overrides home)
Checkpoints SQLite at ~/.soothe/data/soothe_checkpoints.db
Workspace CWD (SOOTHE_WORKSPACE)
Output Progress on stdout line 1 (tools + AI narration); final answer printed once (--no-stream hides narration preview)

Builtin skills

fj ships AgentSkills under fj_ai/builtin_skills/ (planning, TDD, debugging, document tools, and more) and registers them with soothe-nano on startup. They appear in progressive skill discovery alongside nano’s own builtins.

Add your own by pointing nano.yml at skill folders (SKILL.md + frontmatter):

skills:
  - ~/.soothe/skills/my-reviewer
  - ./skills/deploy

Progressive skills are on by default (compact catalog + load on demand). Tune under progressive_skills: in nano.yml.

MCP servers

mcp_builtins:
  - playwright

mcp_servers:
  - name: filesystem
    transport: stdio
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
    defer: true
    enabled: true

With defer: true (default), MCP tools activate on demand.

Powered by

fj is built on soothe-nano — tools, skills, MCP, subagents, and progressive loading, with SQLite persistence. For a full TUI coding agent from the same stack, see mirasoth/soothe.

Development

git clone https://github.com/caesar0301/fj-ai.git
cd fj-ai
make sync-dev
make test
make lint
  • CI — format, lint, tests on Python 3.11–3.13; build + twine check
  • Release — GitHub Release → PyPI

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fj_ai-1.0.9.tar.gz (612.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fj_ai-1.0.9-py3-none-any.whl (750.6 kB view details)

Uploaded Python 3

File details

Details for the file fj_ai-1.0.9.tar.gz.

File metadata

  • Download URL: fj_ai-1.0.9.tar.gz
  • Upload date:
  • Size: 612.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fj_ai-1.0.9.tar.gz
Algorithm Hash digest
SHA256 fefe166256a92fda3480d88e5c9683963ff09863a9e00fb4734fa379e96ca8a3
MD5 2868ef236db9adda5ed221e08afc66d3
BLAKE2b-256 d0421028110d64916fc6ada47310490cd71ccc5e70d7a027409a959b94cd2acb

See more details on using hashes here.

File details

Details for the file fj_ai-1.0.9-py3-none-any.whl.

File metadata

  • Download URL: fj_ai-1.0.9-py3-none-any.whl
  • Upload date:
  • Size: 750.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fj_ai-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 eb375c0275bff88892176db89fe17d3a5ebf7f831f904388df218610758c67e3
MD5 35234e3807db839192b3561f02973cbb
BLAKE2b-256 03f4e33087c519af6b695fe6ab412fae470928094ee7a1d9539f6b8dbcc20804

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page