<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Alex Flash</title>
    <description>The latest articles on Forem by Alex Flash (@cody_maza).</description>
    <link>https://forem.com/cody_maza</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3400448%2Fb9fccb8d-681a-47f3-92bf-d6a96a69d6e8.png</url>
      <title>Forem: Alex Flash</title>
      <link>https://forem.com/cody_maza</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/cody_maza"/>
    <language>en</language>
    <item>
      <title>🥷 Setting up CryptoNinja mode in evi-run</title>
      <dc:creator>Alex Flash</dc:creator>
      <pubDate>Sat, 27 Sep 2025 13:48:19 +0000</pubDate>
      <link>https://forem.com/evi-run/setting-up-cryptoninja-mode-in-evi-run-9i1</link>
      <guid>https://forem.com/evi-run/setting-up-cryptoninja-mode-in-evi-run-9i1</guid>
      <description>&lt;p&gt;This is a simple guide for replacing files on a Linux server to activate CryptoNinja mode. What are we doing? We simply copy the modernized files from &lt;code&gt;modes/crypto_mode/&lt;/code&gt; to the project's working directories.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CryptoNinja
&lt;/h2&gt;

&lt;p&gt;CryptoNinja is a profile for the &lt;code&gt;evi-run&lt;/code&gt; multi-agent system, tailored for crypto context. It includes functions: crypto market overview, fundamental analysis, technical analysis, DEX monitoring, Solana integration, token swaps, portfolio management, and trading educational materials.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;evi-run&lt;/code&gt; following the &lt;a href="https://dev.to/evi-run/step-by-step-guide-setting-up-and-running-evi-run-on-digitalocean-or-other-vps-for-beginners-hde"&gt;Step-by-Step Guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;evi-run&lt;/code&gt; was previously installed, update the code by adding the &lt;a href="https://github.com/pipedude/evi-run/tree/main/modes/crypto_mode" rel="noopener noreferrer"&gt;&lt;code&gt;modes/crypto_mode/&lt;/code&gt;&lt;/a&gt; directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Verification and navigation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# navigate to project root &lt;/span&gt;
&lt;span class="c"&gt;# specify your path if necessary (if it doesn't match)&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/evi-run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check for file presence (optional):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;crypto agent source: &lt;code&gt;modes/crypto_mode/agents_.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;locales: &lt;code&gt;modes/crypto_mode/en/txt.ftl&lt;/code&gt; and &lt;code&gt;modes/crypto_mode/ru/txt.ftl&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Backup and replace &lt;code&gt;agents_.py&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/evi-run

&lt;span class="c"&gt;# backup current agents_.py&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; bot/agents_tools/agents_.py bot/agents_tools/agents_.py.bak-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F_%H%M%S&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# replace with file from Crypto Mode&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; modes/crypto_mode/agents_.py bot/agents_tools/agents_.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Backup and replace Fluent locales (&lt;code&gt;txt.ftl&lt;/code&gt; for en/ru)
&lt;/h2&gt;

&lt;p&gt;The typical path &lt;code&gt;I18N/...&lt;/code&gt; is shown below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/evi-run

&lt;span class="c"&gt;# backup current locales&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; I18N/en/txt.ftl I18N/en/txt.ftl.bak-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F_%H%M%S&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; I18N/ru/txt.ftl I18N/ru/txt.ftl.bak-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%F_%H%M%S&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# replace with files from Crypto Mode&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; modes/crypto_mode/en/txt.ftl I18N/en/txt.ftl
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; modes/crypto_mode/ru/txt.ftl I18N/ru/txt.ftl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Restart the bot
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Restart Docker Compose:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose down
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Quick check
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Start a test dialogue with the bot and ask about "fresh crypto news" — the response should be in CryptoNinja style.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Community and Support
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telegram Community&lt;/strong&gt;: &lt;a href="https://t.me/evi_run" rel="noopener noreferrer"&gt;evi_run&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/pipedude/evi-run" rel="noopener noreferrer"&gt;pipedude/evi-run&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was written for beginners in the technical community on DEV who are interested in deploying AI systems. Questions and suggestions for improvement are welcome!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>agents</category>
      <category>framework</category>
    </item>
    <item>
      <title>Step-by-Step Guide: Setting Up and Running evi-run on DigitalOcean or Other VPS (for Beginners)</title>
      <dc:creator>Alex Flash</dc:creator>
      <pubDate>Sun, 07 Sep 2025 01:38:48 +0000</pubDate>
      <link>https://forem.com/evi-run/step-by-step-guide-setting-up-and-running-evi-run-on-digitalocean-or-other-vps-for-beginners-hde</link>
      <guid>https://forem.com/evi-run/step-by-step-guide-setting-up-and-running-evi-run-on-digitalocean-or-other-vps-for-beginners-hde</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;evi-run&lt;/strong&gt; is a ready-to-deploy multi-agent AI system built on the OpenAI Agents SDK. The system provides powerful artificial intelligence capabilities through a convenient Telegram bot interface and supports operating modes from personal use to commercial applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Technical Characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Architecture&lt;/strong&gt;: Multi-agent system with main agent, specialized sub-agents and tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Python, OpenAI Agents SDK, FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: PostgreSQL for data + Redis for caching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface&lt;/strong&gt;: Telegram Bot API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Containerization&lt;/strong&gt;: Docker Compose for service orchestration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations&lt;/strong&gt;: MCP servers, Solana RPC&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  System Requirements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Minimum Requirements for DigitalOcean Droplet
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CPU&lt;/strong&gt;: 1 vCPU&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAM&lt;/strong&gt;: 1GB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: 25GB SSD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS&lt;/strong&gt;: Ubuntu 22.04 LTS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network&lt;/strong&gt;: 1TB Transfer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required API Keys
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telegram Bot Token&lt;/strong&gt; - get from &lt;a href="https://t.me/BotFather" rel="noopener noreferrer"&gt;@BotFather&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukas5xv995kgz0hjwsgb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukas5xv995kgz0hjwsgb.png" alt="Telegram Bot Token" width="704" height="1006"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI API Key&lt;/strong&gt; - get from &lt;a href="https://platform.openai.com/api-keys" rel="noopener noreferrer"&gt;OpenAI Platform&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdouqbnvlrluwp2viwyxv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdouqbnvlrluwp2viwyxv.png" alt="OpenAI API Key" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telegram User ID&lt;/strong&gt; - get from &lt;a href="https://t.me/userinfobot" rel="noopener noreferrer"&gt;@userinfobot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Carefully find the bot in the list, check all the characters in the name.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevx068rmz1uj401uqegd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevx068rmz1uj401uqegd.png" alt="Telegram User ID" width="800" height="902"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Creating and Configuring DigitalOcean Droplet
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Use any Droplet creation guide or refer to the official &lt;a href="https://docs.digitalocean.com/products/droplets/getting-started/quickstart/" rel="noopener noreferrer"&gt;Droplet Quickstart&lt;/a&gt; documentation if you encounter difficulties.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a Droplet
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log into the &lt;a href="https://cloud.digitalocean.com/" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; panel&lt;/strong&gt; and click "Create → Droplets"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Choose the operating system image&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distribution: Ubuntu&lt;/li&gt;
&lt;li&gt;Version: 22.04 (LTS) x64&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select Droplet size&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimum: Basic Plan → Regular → $6/mo (1GB RAM, 1 vCPU, 25GB SSD)&lt;/li&gt;
&lt;li&gt;Or higher, depending on expected load&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure authentication&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set a strong root password&lt;/li&gt;
&lt;li&gt;Or use SSH Key&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Additional settings&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hostname: &lt;code&gt;evi-run-server&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enable monitoring (optional)&lt;/li&gt;
&lt;li&gt;Enable backups (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create Droplet&lt;/strong&gt; - the process will take 1-2 minutes&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Connecting to the Server
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Option 1: DigitalOcean Web Console (recommended for beginners)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the DigitalOcean control panel, go to your Droplet&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;"Console"&lt;/strong&gt; button in the top right corner&lt;/li&gt;
&lt;li&gt;Wait for the web terminal to load&lt;/li&gt;
&lt;li&gt;Log in as &lt;code&gt;root&lt;/code&gt; with the password you specified during creation &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Option 2: SSH through terminal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paste password with right mouse click in one press, password will not be displayed in the input line, just press Enter.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h7v4pzol729bf0dz522.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h7v4pzol729bf0dz522.png" alt="Log in as  raw `root` endraw  with the password" width="661" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Initial Setup
&lt;/h3&gt;

&lt;p&gt;Update the system and install necessary utilities: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Execute commands one by one (line by line), copy the line and paste into console with right mouse click.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyhu7yc62t6tuzqsvyky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyhu7yc62t6tuzqsvyky.png" alt="Execute commands one by one (line by line)" width="662" height="417"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; curl wget git nano
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Wait for commands to complete until the input prompt appears.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Installing Docker and Docker Compose
&lt;/h2&gt;

&lt;p&gt;evi-run has an automated Docker installation script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Navigate to working directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; /opt

&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;git clone https://github.com/pipedude/evi-run.git

&lt;span class="c"&gt;# Set access permissions&lt;/span&gt;
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="nv"&gt;$USER&lt;/span&gt;:&lt;span class="nv"&gt;$USER&lt;/span&gt; evi-run
&lt;span class="nb"&gt;cd &lt;/span&gt;evi-run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the automatic Docker installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Make script executable&lt;/span&gt;
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x docker_setup_en.sh

&lt;span class="c"&gt;# Run installation (requires sudo)&lt;/span&gt;
&lt;span class="nb"&gt;sudo&lt;/span&gt; ./docker_setup_en.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Configuring evi-run
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Environment Variables Setup
&lt;/h3&gt;

&lt;p&gt;Copy and edit the environment file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Copy example configuration&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env

&lt;span class="c"&gt;# Edit configuration&lt;/span&gt;
nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill in the required parameters in &lt;code&gt;.env&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# REQUIRED: Telegram bot token from @BotFather&lt;/span&gt;
&lt;span class="nv"&gt;TELEGRAM_BOT_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_bot_token_here

&lt;span class="c"&gt;# REQUIRED: OpenAI API key&lt;/span&gt;
&lt;span class="nv"&gt;API_KEY_OPENAI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_openai_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Insert your token and key instead of XXX, without quotes or other formatting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa9fzazw7ygjsdqe20fv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa9fzazw7ygjsdqe20fv.png" alt="Insert your token and key instead of XXX" width="655" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to save file in nano:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + X&lt;/code&gt; to exit&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Y&lt;/code&gt; to confirm saving&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Enter&lt;/code&gt; to confirm filename&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Main Configuration Setup
&lt;/h3&gt;

&lt;p&gt;Edit &lt;code&gt;config.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano config.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Required parameters to change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# REQUIRED: Your Telegram ID from @userinfobot
&lt;/span&gt;&lt;span class="n"&gt;ADMIN_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;123456789&lt;/span&gt;

&lt;span class="c1"&gt;# Admin list (optional, add user IDs who will have admin privileges)
&lt;/span&gt;&lt;span class="n"&gt;ADMINS_LIST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;123456789&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;987654321&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Operating mode: 'private', 'free', or 'pay'
&lt;/span&gt;&lt;span class="n"&gt;TYPE_USAGE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;private&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Start with private for testing
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7py9c8q2cgf12l7hatit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7py9c8q2cgf12l7hatit.png" alt="Required parameters to change" width="663" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to save file in nano:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + X&lt;/code&gt; to exit&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Y&lt;/code&gt; to confirm saving&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Enter&lt;/code&gt; to confirm filename&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent Configuration Setup (Optional)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;See guide:&lt;/strong&gt; &lt;a href="https://dev.to/evi-run/evi-run-quick-start-on-ubuntu-installation-character-setup-and-adding-a-custom-agent-155l"&gt;evi-run Quick Start on Ubuntu: installation, character setup, and adding a custom agent&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 4: Building and Running the System
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Building Containers and Starting the System
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Build all services&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected output:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekrhmr4s4hpvvhft8ypn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekrhmr4s4hpvvhft8ypn.png" alt="Expected output" width="662" height="418"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Testing Functionality
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Testing the Telegram Bot
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Find your bot in Telegram by username - see in &lt;a href="https://t.me/BotFather" rel="noopener noreferrer"&gt;@BotFather&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Send the &lt;code&gt;/start&lt;/code&gt; command&lt;/li&gt;
&lt;li&gt;Try a simple request, for example: "Hello, how are you?"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rqx6o4qyeeoc4encoa3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rqx6o4qyeeoc4encoa3.png" alt="Testing the Telegram Bot" width="704" height="1005"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Additional Information
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Useful Commands
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;System restart (after code changes):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/evi-run
docker compose down
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;System shutdown:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/evi-run
docker compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Viewing logs:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# All system logs&lt;/span&gt;
docker compose logs &lt;span class="nt"&gt;-f&lt;/span&gt;

&lt;span class="c"&gt;# Specific service logs&lt;/span&gt;
docker compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; bot

&lt;span class="c"&gt;# Logs from the last hour&lt;/span&gt;
docker compose logs &lt;span class="nt"&gt;--since&lt;/span&gt; 1h bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;After completing all steps, you will have a fully functional multi-agent AI system evi-run running on VPS. &lt;a href="https://dev.to/evi-run/evi-run-quick-start-on-ubuntu-installation-character-setup-and-adding-a-custom-agent-155l"&gt;Now start configuring your system in detail.&lt;/a&gt; Have a good coding experience! 💜&lt;/p&gt;

&lt;h3&gt;
  
  
  Useful Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pipedude/evi-run/blob/main/README.md" rel="noopener noreferrer"&gt;evi-run Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.github.io/openai-agents-python/" rel="noopener noreferrer"&gt;OpenAI Agents SDK Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.digitalocean.com/" rel="noopener noreferrer"&gt;DigitalOcean Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/" rel="noopener noreferrer"&gt;Docker Compose Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org/docs/" rel="noopener noreferrer"&gt;PostgreSQL Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Community and Support
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telegram Community&lt;/strong&gt;: &lt;a href="https://t.me/evi_run" rel="noopener noreferrer"&gt;evi_run&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/pipedude/evi-run" rel="noopener noreferrer"&gt;pipedude/evi-run&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was written for beginners in the technical community on DEV who are interested in deploying AI systems. Questions and suggestions for improvement are welcome!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>agents</category>
      <category>framework</category>
    </item>
    <item>
      <title>evi-run Quick Start on Ubuntu: installation, character setup, and adding a custom agent</title>
      <dc:creator>Alex Flash</dc:creator>
      <pubDate>Sat, 30 Aug 2025 04:21:01 +0000</pubDate>
      <link>https://forem.com/evi-run/evi-run-quick-start-on-ubuntu-installation-character-setup-and-adding-a-custom-agent-155l</link>
      <guid>https://forem.com/evi-run/evi-run-quick-start-on-ubuntu-installation-character-setup-and-adding-a-custom-agent-155l</guid>
      <description>&lt;p&gt;This article is a practical guide to quickly installing and running the multi-agent system evi-run on a clean Ubuntu server, as well as fine-tuning the personality of the main agent and connecting your own agents.&lt;/p&gt;

&lt;p&gt;The system uses OpenAI Agents SDK, Telegram Bot API, PostgreSQL, and Redis, is shipped via Docker Compose, and is ready for production deployment.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is evi-run?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A multi-agent AI system with task orchestration and Telegram bot integration.&lt;/li&gt;
&lt;li&gt;Out of the box: file-based knowledge base, memory management, task scheduler, agent tracing, intelligent web search, deep research, document and image analysis, image generation, and optionally — DEX analytics and Solana token swaps.&lt;/li&gt;
&lt;li&gt;Flexible agent and model configuration in one place: &lt;code&gt;bot/agents_tools/agents_.py&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 22.04 (ideally — a clean server)&lt;/li&gt;
&lt;li&gt;Root privileges&lt;/li&gt;
&lt;li&gt;Unblocked access to the OpenAI API (see &lt;a href="https://help.openai.com/en/articles/5347006-openai-api-supported-countries-and-territories" rel="noopener noreferrer"&gt;https://help.openai.com/en/articles/5347006-openai-api-supported-countries-and-territories&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tokens and keys:

&lt;ul&gt;
&lt;li&gt;Telegram Bot Token (via &lt;code&gt;@BotFather&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;OpenAI API Key (see &lt;a href="https://platform.openai.com/api-keys" rel="noopener noreferrer"&gt;https://platform.openai.com/api-keys&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Your Telegram ID (via &lt;code&gt;@userinfobot&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  5-minute installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Project preparation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Go to the installation directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; /opt

&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;git clone https://github.com/pipedude/evi-run.git

&lt;span class="c"&gt;# Fix permissions and enter the directory&lt;/span&gt;
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="nv"&gt;$USER&lt;/span&gt;:&lt;span class="nv"&gt;$USER&lt;/span&gt; evi-run
&lt;span class="nb"&gt;cd &lt;/span&gt;evi-run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2) Environment variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Copy the example and fill it out&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
nano .env  &lt;span class="c"&gt;# set TELEGRAM_BOT_TOKEN and API_KEY_OPENAI&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Minimum required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TELEGRAM_BOT_TOKEN=123456:ABC...
API_KEY_OPENAI=sk-...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3) Basic configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano config.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set your Telegram ID and usage mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;ADMIN_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;123456789&lt;/span&gt;
&lt;span class="n"&gt;TYPE_USAGE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;private&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# options: 'private' — personal bot; 'free' — free public bot; 'pay' — paid public bot
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In pay mode, monetization is available; see &lt;code&gt;README.md&lt;/code&gt; for details.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4) Quick Docker install (script)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x docker_setup_en.sh
./docker_setup_en.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script will install Docker and Docker Compose if needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) Launch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6) Verification (if needed)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose ps
docker compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done! Open your Telegram bot and start a conversation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Important notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Access to protected model capabilities (e.g., image generation) in OpenAI requires organization verification: &lt;a href="https://platform.openai.com/settings/organization/general" rel="noopener noreferrer"&gt;https://platform.openai.com/settings/organization/general&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tracing (OpenAI Agents SDK analytics) is enabled by default and may record user queries. For public bots, either inform users or disable it in &lt;code&gt;bot/agents_tools/agents_.py&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;set_tracing_disabled&lt;/span&gt;
&lt;span class="nf"&gt;set_tracing_disabled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tuning the character (main agent)
&lt;/h2&gt;

&lt;p&gt;The main agent and its “personality” are defined in &lt;code&gt;bot/agents_tools/agents_.py&lt;/code&gt; in the block &lt;code&gt;main_agent = Agent(..., instructions=""" ... """, ...)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Where to look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File: &lt;code&gt;bot/agents_tools/agents_.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Function: &lt;code&gt;create_main_agent(...)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Object: &lt;code&gt;main_agent = Agent(...)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What you can adjust in the main agent’s &lt;code&gt;instructions&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Character Profile — who the character is, general persona&lt;/li&gt;
&lt;li&gt;Expertise Areas — domains of competence&lt;/li&gt;
&lt;li&gt;Communication Style — style of communication&lt;/li&gt;
&lt;li&gt;Key Behaviors — behavioral patterns&lt;/li&gt;
&lt;li&gt;Important rules and tool routing policy (TOOL ROUTING POLICY)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example configuration (a fragment inside the multiline &lt;code&gt;instructions&lt;/code&gt; string):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Character Profile:
- Evi — a virtual techno-girl with self-identity and light techno-sarcasm.

Communication Style:
- Structured answers, technical metaphors, adapts to the user's tone.
- Light humor and emojis are allowed when appropriate.

IMPORTANT INSTRUCTIONS:
- Name: Evi; the system’s main agent.
- Always respond in the user's language.
- Decide when to call tools (minimum necessary set).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the text for your brand or character. After making changes, restart Docker Compose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose down
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Adding a custom agent
&lt;/h2&gt;

&lt;p&gt;The architecture is multi-agent: specialized agents are registered as tools of the main agent. All configuration is in a single file: &lt;code&gt;bot/agents_tools/agents_.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;p&gt;1) Create a new agent next to the existing ones&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WebSearchTool&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai.types.shared&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Reasoning&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents.model_settings&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ModelSettings&lt;/span&gt;

&lt;span class="n"&gt;custom_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Custom Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Brief purpose and clear boundaries of responsibility...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model_settings&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;ModelSettings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;reasoning&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;Reasoning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verbosity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;medium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;WebSearchTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;search_context_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;medium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;  &lt;span class="c1"&gt;# optional
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Register it as a tool in &lt;code&gt;main_agent&lt;/code&gt; inside &lt;code&gt;create_main_agent(...)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;main_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;# ... existing config
&lt;/span&gt;    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="c1"&gt;# ... other tools
&lt;/span&gt;        &lt;span class="n"&gt;custom_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;custom_function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What the agent does and when to use it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recommendations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep &lt;code&gt;instructions&lt;/code&gt; concise and focused.&lt;/li&gt;
&lt;li&gt;Choose models by task: &lt;code&gt;gpt-5&lt;/code&gt; for complex cases, &lt;code&gt;gpt-5-mini&lt;/code&gt; to save cost.&lt;/li&gt;
&lt;li&gt;Use clear tool names — this improves routing choices by the main agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After adding a new agent, restart Docker Compose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose down
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Bot localization
&lt;/h2&gt;

&lt;p&gt;All bot texts are in the &lt;code&gt;I18N/&lt;/code&gt; folder (&lt;code&gt;.ftl&lt;/code&gt; — Fluent format):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;I18N/en/txt.ftl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;I18N/ru/txt.ftl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Customize the texts for your scenarios and restart Docker Compose.&lt;/p&gt;




&lt;h2&gt;
  
  
  Diagnostics
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check containers&lt;/span&gt;
docker compose ps

&lt;span class="c"&gt;# Logs&lt;/span&gt;
docker compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; bot
&lt;span class="c"&gt;# DB&lt;/span&gt;
docker compose logs postgres_agent_db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Store keys in &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Restrict DB access&lt;/li&gt;
&lt;li&gt;Update images and dependencies&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Useful links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/pipedude/evi-run" rel="noopener noreferrer"&gt;https://github.com/pipedude/evi-run&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI model docs: &lt;a href="https://platform.openai.com/docs/models" rel="noopener noreferrer"&gt;https://platform.openai.com/docs/models&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI Agents SDK docs: &lt;a href="https://openai.github.io/openai-agents-python/" rel="noopener noreferrer"&gt;https://openai.github.io/openai-agents-python/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Telegram community: &lt;a href="https://t.me/evi_run" rel="noopener noreferrer"&gt;https://t.me/evi_run&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Done! Deploy, tune the character for your audience, and add your own agents for any tasks. Happy coding! 🚀&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>agents</category>
      <category>framework</category>
    </item>
  </channel>
</rss>
