Imagination, Given Voice.
fount is a modern, scalable AI agent runtime environment.
We believe that highly efficient productivity tools and immersive emotional interaction are not mutually exclusive. fount is a bridge: by day, it can be the capable assistant helping you write complex code and summarise meeting minutes; by night, it can be a digital confidant that understands your emotions and resonates with you.
After of dedicated refinement, incorporating the passion of
, and a vibrant community with
, fount is now a mature, stable, and continuously evolving AI interaction platform.
fount transforms interaction into productivity assets. Everything is drag-and-drop, everything is a file, and logic is driven by code.
- Instant Report Generation: Drag a conversation bubble directly to a folder to instantly generate an independent HTML report. This is ideal for quickly organising technical documents, meeting records, or fragments of inspiration.

- Workflow Encapsulation and Distribution: Drag your created agent (role) directly to the desktop to generate a shareable file. Easily distribute your Prompt engineering and workflow logic to colleagues or the community.

No longer just Markdown highlighting. In fount, the code blocks sent by the agent (role) are live.
- Supports real-time compilation and running for multiple languages (C/C++/Rust/Python/JS, etc.).
- Directly view stdout output, and even the ASM disassembly results for compiled languages.
- Let the AI become your real-time verifier for pair programming.

fount's project architecture is designed with full consideration for developers' habits. Want to know the project repository architecture? Check out DeepWiki!
- Git Driven: All components can be managed via Git.
- VSCode Integration: The project structure is clear. Combined with the guidance provided in AGENTS.md, you can develop and debug your Agent logic directly in your favourite IDE.
When work is done, fount provides a connection that transcends the ordinary. We discard the stiffness of traditional tools, pursuing a natural, fluid, and deeply "high-fidelity" interaction.
-
Seamless Conversations, Anytime, Anywhere A chat started on a computer can seamlessly continue on a mobile phone or tablet. fount keeps your conversations synchronised, ensuring you stay closely connected with your agent no matter where you are.
-
Expressive, Immersive Chat Leveraging the power of HTML, fount allows the agent (role) to express itself through rich text, images, and even interactive elements, making every conversation vivid and profound.
-
A Gathering of Minds: Native Group Chat Invite multiple agents to join the same conversation and witness their dynamic and engaging interactions, whether for a work brainstorm or a story enactment between the agents.

-
Beautiful, Customisable Interface Choose from over 30 stunning themes, or create your own colours. fount is your exclusive canvas.

-
Available Everywhere fount runs seamlessly on Windows, macOS, Linux, and even Android, meeting your different needs through direct installation or the flexibility of Docker.
-
Unconstrained AI Source Integration: Embrace the Infinite fount offers unparalleled choice and flexibility in connecting AI sources. Custom JavaScript code in the AI Source Generator allows you to connect to any AI source – OpenAI, Claude, OpenRouter, NovelAI, Horde, Ooba, Tabby, Mistral... In the flow of code, you can carefully design complex regular expressions, call extensive API libraries, and embed multimedia resources. fount also natively supports the creation of API Pools to achieve intelligent request routing. The logic of communication follows your will, shaped by the power of code.

If you feel lost in the sea of agents, or are seeking forgotten stories, our vibrant and friendly community awaits your arrival. It is a haven for like-minded individuals, where developers and creators share their wisdom and creations.
fount strives to weave characters into the very fabric of your life, offering companionship and support that transcends the screen.
-
Discord/Telegram Integration Connect your characters to Discord or Telegram communities through built-in Bot Shells, making them living members of your circles.

-
Terminal Serenity (with fount-pwsh) When a terminal command falters, let your character offer a quiet word of guidance, easing the solitude of the digital world.

-
Limitless Shell Extensions With a touch of programming skill, craft your own fount Shells, extending your characters' reach to any corner you can imagine.
For the creator, fount offers a clearer path to bringing your AI characters to life.
-
Revolutionary AI-Assisted Creation Describe your character in a single sentence, and our intelligent AI assistant will craft a fully realized persona. This simplifies the initial setup, allowing you to focus on refining and interacting with your creation.
-
The Magic of Code, Easier Than You Imagine In fount, code is a form of modern magic. With the gentle guidance of our community and the illuminating aid of AI, learning it is surprisingly easy. You'll find that defining character logic with code can be an intuitive and maintainable way to craft characters whose responses are woven from your own logic.
-
Start with Ready-Made Magic: A Treasure Trove of Templates fount's community provides a wealth of pre-crafted character and persona templates. They act as "living blueprints," easy to adapt and customize, providing a fantastic starting point.
-
Embedded Resources Weave images, audio, and other resources directly into your characters, making their presence all the more tangible.

-
Continuous Integration Use fount-charCI to safeguard your character development. It automatically runs tests on commit and reports issues in real-time.

-
Legacy Compatibility fount embraces the past, offering compatibility modules to run SillyTavern and Risu character cards (though migration of existing characters is not supported).
fount is built upon a robust and scalable architecture. The backend leverages the power and speed of Deno, with Express for efficient routing. The frontend is crafted with HTML, CSS, and JavaScript for an intuitive and appealing interface.
In the world of fount, modularity reigns supreme. A rich ecosystem of components intertwines to create the tapestry of your experience. All of these can be effortlessly installed, expanded, and customized by users.
- chars (Characters): The heart of fount, where personalities are born.
- worlds (Worlds): Far more than mere lorebooks. They are the silent architects of reality, able to append knowledge, influence decisions, and even manipulate chat history.
- personas (User Personas): More than just user profiles. Personas possess the power to warp and even seize control of your words and perceptions, allowing for truly immersive roleplaying.
- shells (Interaction Interfaces): The gateways to fount's soul, extending the reach of characters beyond the interface.
- ImportHandlers (Import Handlers): The welcoming hands of fount, bridging the gap between diverse character formats.
- AIsources (AI Sources): The raw power that fuels the minds of your characters.
- AIsourceGenerators (AI Source Generators): The alchemists of fount, providing templates and logic via JavaScript to forge connections with any imaginable AI source.
Embark on your journey with fount, a stable and reliable platform. A few simple clicks or commands, and the world of fount unfolds.
Caution
In the world of fount, characters can freely execute JavaScript commands, granting them powerful capabilities. Therefore, please choose the characters you trust with the same care you would in real life to ensure the safety of your local files.
# If needed, define the environment variable $FOUNT_DIR to specify the fount directory
INSTALLED_PACKAGES="${FOUNT_AUTO_INSTALLED_PACKAGES:-}"
install_package() { _command_name="$1"; _package_list=${2:-$_command_name}; _has_sudo=""; _installed_pkg_name="" ; if command -v "$_command_name" >/dev/null 2>&1; then return 0; fi; if [ "$(id -u)" -ne 0 ] && command -v sudo >/dev/null 2>&1; then _has_sudo="sudo"; fi; for _package in $_package_list; do if command -v apt-get >/dev/null 2>&1; then $_has_sudo apt-get update -y; $_has_sudo apt-get install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pacman >/dev/null 2>&1; then $_has_sudo pacman -Syy --noconfirm; $_has_sudo pacman -S --needed --noconfirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v dnf >/dev/null 2>&1; then $_has_sudo dnf install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v yum >/dev/null 2>&1; then $_has_sudo yum install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v zypper >/dev/null 2>&1; then $_has_sudo zypper install -y --no-confirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v apk >/dev/null 2>&1; then if [ "$(id -u)" -eq 0 ]; then apk add --update "$_package"; else $_has_sudo apk add --update "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v brew >/dev/null 2>&1; then if ! brew list --formula "$_package"; then brew install "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pkg >/dev/null 2>&1; then pkg install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v snap >/dev/null 2>&1; then $_has_sudo snap install "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; done; if command -v "$_command_name" >/dev/null 2>&1; then case ";$FOUNT_AUTO_INSTALLED_PACKAGES;" in *";$_installed_pkg_name;"*) ;; *) if [ -z "$FOUNT_AUTO_INSTALLED_PACKAGES" ]; then FOUNT_AUTO_INSTALLED_PACKAGES="$_installed_pkg_name"; else FOUNT_AUTO_INSTALLED_PACKAGES="$FOUNT_AUTO_INSTALLED_PACKAGES;$_installed_pkg_name"; fi; ;; esac; return 0; else echo "Error: Failed to install '$_command_name' from any source." >&2; return 1; fi; }
install_package "bash" "bash gnu-bash"; install_package "curl"
export FOUNT_AUTO_INSTALLED_PACKAGES="$INSTALLED_PACKAGES"
curl -fsSL https://raw.githubusercontent.com/steve02081504/fount/refs/heads/master/src/runner/main.sh | bash
. "$HOME/.profile"Should you wish to pause, to gather your thoughts before the grand adventure (a dry run):
INSTALLED_PACKAGES="${FOUNT_AUTO_INSTALLED_PACKAGES:-}"
install_package() { _command_name="$1"; _package_list=${2:-$_command_name}; _has_sudo=""; _installed_pkg_name="" ; if command -v "$_command_name" >/dev/null 2>&1; then return 0; fi; if [ "$(id -u)" -ne 0 ] && command -v sudo >/dev/null 2>&1; then _has_sudo="sudo"; fi; for _package in $_package_list; do if command -v apt-get >/dev/null 2>&1; then $_has_sudo apt-get update -y; $_has_sudo apt-get install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pacman >/dev/null 2>&1; then $_has_sudo pacman -Syy --noconfirm; $_has_sudo pacman -S --needed --noconfirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v dnf >/dev/null 2>&1; then $_has_sudo dnf install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v yum >/dev/null 2>&1; then $_has_sudo yum install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v zypper >/dev/null 2>&1; then $_has_sudo zypper install -y --no-confirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v apk >/dev/null 2>&1; then if [ "$(id -u)" -eq 0 ]; then apk add --update "$_package"; else $_has_sudo apk add --update "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v brew >/dev/null 2>&1; then if ! brew list --formula "$_package"; then brew install "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pkg >/dev/null 2>&1; then pkg install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v snap >/dev/null 2>&1; then $_has_sudo snap install "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; done; if command -v "$_command_name" >/dev/null 2>&1; then case ";$FOUNT_AUTO_INSTALLED_PACKAGES;" in *";$_installed_pkg_name;"*) ;; *) if [ -z "$FOUNT_AUTO_INSTALLED_PACKAGES" ]; then FOUNT_AUTO_INSTALLED_PACKAGES="$_installed_pkg_name"; else FOUNT_AUTO_INSTALLED_PACKAGES="$FOUNT_AUTO_INSTALLED_PACKAGES;$_installed_pkg_name"; fi; ;; esac; return 0; else echo "Error: Failed to install '$_command_name' from any source." >&2; return 1; fi; }
install_package "bash" "bash gnu-bash"; install_package "curl"
export FOUNT_AUTO_INSTALLED_PACKAGES="$INSTALLED_PACKAGES"
curl -fsSL https://raw.githubusercontent.com/steve02081504/fount/refs/heads/master/src/runner/main.sh | bash -s init
. "$HOME/.profile"-
Direct and Uncomplicated (Recommended): Download the
exefile from Releases and run it. -
The Power of PowerShell:
# If needed, define the environment variable $env:FOUNT_DIR to specify the fount directory irm https://raw.githubusercontent.com/steve02081504/fount/refs/heads/master/src/runner/main.ps1 | iex
For a dry run:
$scriptContent = Invoke-RestMethod https://raw.githubusercontent.com/steve02081504/fount/refs/heads/master/src/runner/main.ps1 Invoke-Expression "function fountInstaller { $scriptContent }" fountInstaller init
If you already have Git installed, embracing fount is as simple as running a script.
- For Windows: Open your command prompt or PowerShell and simply double-click
run.bat. - For Linux/macOS/Android: Open your terminal and execute
./run.sh.
docker pull ghcr.io/steve02081504/fountfount removeShould you encounter any difficulties on your journey, please reach out. We are here to help and are committed to resolving most issues within 10 minutes to 24 hours.
- GitHub Issues: Report any bugs or suggest new features through GitHub Issues.
- Discord Community: Join our vibrant Discord community for real-time support and discussions.
Your voice will be heard. Simply restart fount, and the shadows will dissipate.
The world of fount is more than words and code; it's a feast for the eyes and an invitation to connect. We have prepared exquisite badges and convenient links to make your fount components shine and allow others to easily discover your masterpieces.
You can proudly display this badge in your repository or anywhere you wish to showcase your work. Find the SVG files of the fount logo here.
[](https://github.com/topics/fount-repo)[](https://github.com/topics/fount-character)| Colour Format | Code |
|---|---|
| HEX | #0e3c5c |
| RGB | rgb(14, 60, 92) |
| HSL | hsl(205, 74%, 21%) |
You can also use the Badge Adder to add the fount logo to any shields.io badge.
Imagine others installing your creations into their fount world with a single click. Simply combine your component's ZIP or Git repository link with fount's protocol link.
https://steve02081504.github.io/fount/protocol?url=fount://run/shells/install/install; + Your_Component_Link
fount's frontend is woven from modern web technologies, but not all browsers resonate perfectly with its soul. For the most serene and fluid experience, we recommend companions that are in harmony with fount's rhythm:
- Google Chrome / Microsoft Edge / Opera: They move in sync with fount's spirit, offering the best performance and compatibility for an interaction as smooth as poetry.
Yet, some browsers walk a different path, and their encounter with fount may carry a note of dissonance:
-
Mozilla Firefox: It is like a stubborn wanderer, often unhurried in its embrace of new technologies, sometimes choosing to linger in the past forever. This insistence, however, can lead to certain regrets:
- Lacking support for
speculationrules, each of fount's cold starts and protocol handlings will be 1-2 seconds slower than they should be—moments quietly stolen from you. - The absence of support for CSS
anchorpositioning will leave some pages with a touch of imperfect dust, spoiling a mood that was meant to be pure. - The lack of support for
blocking="render"may cause fount pages to flicker upon loading, hurting your eyes. - According to backend error reports, only in the world of Firefox do fount pages sometimes fall into mysterious errors or appear strange—when that happens, try refreshing; it might just dispel the mist.
- Lacking support for
-
Apple Safari: Its support for "emerging" (several years old) web standards might be a tad better than Firefox's, but not by much.
- Also lacking support for
speculationrules, which means fount's startup will still carry a slight delay, wasting your precious moments.
- Also lacking support for
-
Brave: While based on Chromium, its formidable shield of privacy can sometimes inadvertently obscure some of fount's light, affecting the normal operation of certain features.
Beyond the whispers of AI, fount offers a deeper connection—the artisan's touch. Within our community, you'll find a wealth of pre-crafted character and persona templates, each a carefully sculpted foundation awaiting your unique vision to awaken it.
fount empowers you to create and interact with AI characters in a way that feels natural, immersive, and deeply personal. Whether you're a seasoned creator or just beginning your journey, fount welcomes you.
Join our welcoming community and discover the magic of breathing life into your imagination, supported by a mature platform and a dedicated team.


















