Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Error’d: Pickup Sticklers

      September 27, 2025

      From Prompt To Partner: Designing Your Custom AI Assistant

      September 27, 2025

      Microsoft unveils reimagined Marketplace for cloud solutions, AI apps, and more

      September 27, 2025

      Design Dialects: Breaking the Rules, Not the System

      September 27, 2025

      Building personal apps with open source and AI

      September 12, 2025

      What Can We Actually Do With corner-shape?

      September 12, 2025

      Craft, Clarity, and Care: The Story and Work of Mengchu Yao

      September 12, 2025

      Cailabs secures €57M to accelerate growth and industrial scale-up

      September 12, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      The first browser with JavaScript landed 30 years ago

      September 27, 2025
      Recent

      The first browser with JavaScript landed 30 years ago

      September 27, 2025

      Four Different Meanings of “Template” a WordPress Pro Should Know

      September 27, 2025

      Adding Functionality with functions.php, a Heart of WordPress Theme Development

      September 27, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured
      Recent
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»Machine Learning»Building a Secure and Memory-Enabled Cipher Workflow for AI Agents with Dynamic LLM Selection and API Integration

    Building a Secure and Memory-Enabled Cipher Workflow for AI Agents with Dynamic LLM Selection and API Integration

    August 11, 2025

    In this tutorial, we walk through building a compact but fully functional Cipher-based workflow. We start by securely capturing our Gemini API key in the Colab UI without exposing it in code. We then implement a dynamic LLM selection function that can automatically switch between OpenAI, Gemini, or Anthropic based on which API key is available. The setup phase ensures Node.js and the Cipher CLI are installed, after which we programmatically generate a cipher.yml configuration to enable a memory agent with long-term recall. We create helper functions to run Cipher commands directly from Python, store key project decisions as persistent memories, retrieve them on demand, and finally spin up Cipher in API mode for external integration. Check out the FULL CODES here.

    Copy CodeCopiedUse a different Browser
    import os, getpass
    os.environ["GEMINI_API_KEY"] = getpass.getpass("Enter your Gemini API key: ").strip()
    
    
    import subprocess, tempfile, pathlib, textwrap, time, requests, shlex
    
    
    def choose_llm():
       if os.getenv("OPENAI_API_KEY"):
           return "openai", "gpt-4o-mini", "OPENAI_API_KEY"
       if os.getenv("GEMINI_API_KEY"):
           return "gemini", "gemini-2.5-flash", "GEMINI_API_KEY"
       if os.getenv("ANTHROPIC_API_KEY"):
           return "anthropic", "claude-3-5-haiku-20241022", "ANTHROPIC_API_KEY"
       raise RuntimeError("Set one API key before running.")

    We start by securely entering our Gemini API key using getpass so it stays hidden in the Colab UI. We then define a choose_llm() function that checks our environment variables and automatically selects the appropriate LLM provider, model, and key based on what is available. Check out the FULL CODES here.

    Copy CodeCopiedUse a different Browser
    def run(cmd, check=True, env=None):
       print("▸", cmd)
       p = subprocess.run(cmd, shell=True, text=True, capture_output=True, env=env)
       if p.stdout: print(p.stdout)
       if p.stderr: print(p.stderr)
       if check and p.returncode != 0:
           raise RuntimeError(f"Command failed: {cmd}")
       return p

    We create a run() helper function that executes shell commands, prints both stdout and stderr for visibility, and raises an error if the command fails when check is enabled, making our workflow execution more transparent and reliable. Check out the FULL CODES here.

    Copy CodeCopiedUse a different Browser
    def ensure_node_and_cipher():
       run("sudo apt-get update -y && sudo apt-get install -y nodejs npm", check=False)
       run("npm install -g @byterover/cipher")

    We define ensure_node_and_cipher() to install Node.js, npm, and the Cipher CLI globally, ensuring our environment has all the necessary dependencies before running any Cipher-related commands. Check out the FULL CODES here.

    Copy CodeCopiedUse a different Browser
    def write_cipher_yml(workdir, provider, model, key_env):
       cfg = """
    llm:
     provider: {provider}
     model: {model}
     apiKey: ${key_env}
    systemPrompt:
     enabled: true
     content: |
       You are an AI programming assistant with long-term memory of prior decisions.
    embedding:
     disabled: true
    mcpServers:
     filesystem:
       type: stdio
       command: npx
       args: ['-y','@modelcontextprotocol/server-filesystem','.']
    """.format(provider=provider, model=model, key_env=key_env)
    
    
       (workdir / "memAgent").mkdir(parents=True, exist_ok=True)
       (workdir / "memAgent" / "cipher.yml").write_text(cfg.strip() + "n")

    We implement write_cipher_yml() to generate a cipher.yml configuration file inside a memAgent folder, setting the chosen LLM provider, model, and API key, enabling a system prompt with long-term memory, and registering a filesystem MCP server for file operations. Check out the FULL CODES here.

    Copy CodeCopiedUse a different Browser
    def cipher_once(text, env=None, cwd=None):
       cmd = f'cipher {shlex.quote(text)}'
       p = subprocess.run(cmd, shell=True, text=True, capture_output=True, env=env, cwd=cwd)
       print("Cipher says:n", p.stdout or p.stderr)
       return p.stdout.strip() or p.stderr.strip()

    We define cipher_once() to run a single Cipher CLI command with the provided text, capture and display its output, and return the response, allowing us to interact with Cipher programmatically from Python. Check out the FULL CODES here.

    Copy CodeCopiedUse a different Browser
    def start_api(env, cwd):
       proc = subprocess.Popen("cipher --mode api", shell=True, env=env, cwd=cwd,
                               stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
       for _ in range(30):
           try:
               r = requests.get("http://127.0.0.1:3000/health", timeout=2)
               if r.ok:
                   print("API /health:", r.text)
                   break
           except: pass
           time.sleep(1)
       return proc

    We create start_api() to launch Cipher in API mode as a subprocess, then repeatedly poll its /health endpoint until it responds, ensuring the API server is ready before proceeding. Check out the FULL CODES here.

    Copy CodeCopiedUse a different Browser
    def main():
       provider, model, key_env = choose_llm()
       ensure_node_and_cipher()
       workdir = pathlib.Path(tempfile.mkdtemp(prefix="cipher_demo_"))
       write_cipher_yml(workdir, provider, model, key_env)
       env = os.environ.copy()
    
    
       cipher_once("Store decision: use pydantic for config validation; pytest fixtures for testing.", env, str(workdir))
       cipher_once("Remember: follow conventional commits; enforce black + isort in CI.", env, str(workdir))
    
    
       cipher_once("What did we standardize for config validation and Python formatting?", env, str(workdir))
    
    
       api_proc = start_api(env, str(workdir))
       time.sleep(3)
       api_proc.terminate()
    
    
    if __name__ == "__main__":
       main()

    In main(), we select the LLM provider, install dependencies, and create a temporary working directory with a cipher.yml configuration. We then store key project decisions in Cipher’s memory, query them back, and finally start the Cipher API server briefly before shutting it down, demonstrating both CLI and API-based interactions.

    In conclusion, we have a working Cipher environment that securely manages API keys, selects the right LLM provider automatically, and configures a memory-enabled agent entirely through Python automation. Our implementation includes decision logging, memory retrieval, and a live API endpoint, all orchestrated in a Notebook/Colab-friendly workflow. This makes the setup reusable for other AI-assisted development pipelines, allowing us to store and query project knowledge programmatically while keeping the environment lightweight and easy to redeploy.


    Check out the FULL CODES here. Feel free to check out our GitHub Page for Tutorials, Codes and Notebooks. Also, feel free to follow us on Twitter and don’t forget to join our 100k+ ML SubReddit and Subscribe to our Newsletter.

    🇬 Star us on GitHub
    🇷 Join our ML Subreddit
    🇸 Sponsor us

    The post Building a Secure and Memory-Enabled Cipher Workflow for AI Agents with Dynamic LLM Selection and API Integration appeared first on MarkTechPost.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleOptimal Corpus Aware Training for Neural Machine Translation
    Next Article NuMind AI Releases NuMarkdown-8B-Thinking: A Reasoning Breakthrough in OCR and Document-to-Markdown Conversion

    Related Posts

    Machine Learning

    How to Evaluate Jailbreak Methods: A Case Study with the StrongREJECT Benchmark

    September 3, 2025
    Machine Learning

    Announcing the new cluster creation experience for Amazon SageMaker HyperPod

    September 3, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    🔍 Core Web Vitals Optimization: A Complete Guide (2025 Edition)

    Web Development

    Plotly brings vibe coding to visual data app development

    Tech & Work

    CNCF Arm64 Pilot: Impact and Insights

    Development

    Need a power bank you can keep in your pocket? I found one for $22 (and it packs a punch)

    News & Updates

    Highlights

    Development

    BlackSuit Ransomware’s Infrastructure Dismantled; Crypto Worth $1M Seized

    August 12, 2025

    The Department of Justice—backed by the FBI, U.S. Secret Service, Homeland Security Investigations (HSI), IRS…

    Grow A Garden Calculator

    August 23, 2025

    Buffalo Police Detective Indicted for Attempted Purchases on Genesis Market

    August 26, 2025

    New BPFDoor Controller Enables Stealthy Lateral Movement in Linux Server Attacks

    April 16, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.