<?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>DEV Community: Paul Apile</title>
    <description>The latest articles on DEV Community by Paul Apile (@paul_apile_e562a1a20b08cc).</description>
    <link>https://dev.to/paul_apile_e562a1a20b08cc</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4145749%2F15c940e0-5048-4cf0-b28a-90bd74625437.png</url>
      <title>DEV Community: Paul Apile</title>
      <link>https://dev.to/paul_apile_e562a1a20b08cc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/paul_apile_e562a1a20b08cc"/>
    <language>en</language>
    <item>
      <title>Vormir Sentinel</title>
      <dc:creator>Paul Apile</dc:creator>
      <pubDate>Fri, 30 Oct 2026 03:10:00 +0000</pubDate>
      <link>https://dev.to/paul_apile_e562a1a20b08cc/vormir-sentinel-3gkf</link>
      <guid>https://dev.to/paul_apile_e562a1a20b08cc/vormir-sentinel-3gkf</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Vormir Sentinel（沃米尔守魂者终端）&lt;/strong&gt;, a complete local AI terminal experience in which a fictional Stonekeeper occupies the machine and turns an ordinary command line into a four-act psychological drama.&lt;/p&gt;

&lt;p&gt;I interpreted “Ghost in the Machine” as a ghost that changes the machine's perceived identity without ever compromising the real system. A familiar installation sequence drifts into impossible paths and architecture warnings. The terminal mutates into &lt;code&gt;root@vormir:/#&lt;/code&gt;, Johann Schmidt takes over the dialogue, and ordinary commands such as &lt;code&gt;whoami&lt;/code&gt;, &lt;code&gt;uname&lt;/code&gt;, and &lt;code&gt;ls&lt;/code&gt; become fragments of a darker world.&lt;/p&gt;

&lt;p&gt;The project also explores persistence as haunting. After the main story is cleared, later launches enter &lt;strong&gt;Death Echoes&lt;/strong&gt;: the ASCII skull decays, cipher fragments disappear, and the character eventually dissolves into noise. The player has only a few returning visits to record enough pieces of the final puzzle.&lt;/p&gt;

&lt;p&gt;The repository now ships an executable &lt;strong&gt;v0.6.0 Python/Ollama implementation&lt;/strong&gt; with the full narrative, interaction, prompt engineering, state machine, puzzle system, accessibility controls, safety boundary, tests, and release checklist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;The current demo is the complete interactive-design walkthrough in the repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/888xiyan/vormir-sentinel" rel="noopener noreferrer"&gt;Project overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/888xiyan/vormir-sentinel/blob/main/Vormir_Sentinel_%E5%AE%8C%E6%95%B4%E6%96%B9%E6%A1%88.md" rel="noopener noreferrer"&gt;完整方案（中文）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The executable release candidate can be installed from the repository or built wheel; a video walkthrough remains optional for the final release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/888xiyan" rel="noopener noreferrer"&gt;
        888xiyan
      &lt;/a&gt; / &lt;a href="https://github.com/888xiyan/vormir-sentinel" rel="noopener noreferrer"&gt;
        vormir-sentinel
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Vormir Sentinel&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A local fictional AI terminal where a ghost changes the machine without compromising it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vormir Sentinel pairs an open-weight local model with a four-act story, a safe virtual terminal, and the RedSkoll Agent page. It never executes host commands, downloads models in the background, or uploads conversations.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.11+&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ollama.com/" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; for local model dialogue&lt;/li&gt;
&lt;li&gt;A supported GPU/CPU model, or use offline mode&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vormir Sentinel contacts only loopback Ollama (&lt;code&gt;127.0.0.1&lt;/code&gt;, &lt;code&gt;localhost&lt;/code&gt;, or &lt;code&gt;::1&lt;/code&gt;). Remote inference and external networking are rejected.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install Ollama&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Install Ollama using its official instructions, then start the local service yourself:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama serve&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Vormir Sentinel only prints this command when needed. It never starts Ollama automatically.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Download a model&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Choose the profile that matches your machine:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull qwen2.5:7b-instruct-q4_K_M
ollama pull qwen2.5:3b-instruct-q4_K_M&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The first command is recommended for capable GPUs. The second is the safer CPU fallback. Vormir Sentinel never runs…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/888xiyan/vormir-sentinel" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Direct repository link: &lt;a href="https://github.com/888xiyan/vormir-sentinel" rel="noopener noreferrer"&gt;github.com/888xiyan/vormir-sentinel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository ships the open implementation, inspectable prompt specification, state model, command map, safety boundary, tests, CI, packaged narrative assets, and release roadmap.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The experience is designed around an entirely local, open AI stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local inference:&lt;/strong&gt; Ollama&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default open-weight model:&lt;/strong&gt; Qwen2.5-7B-Instruct&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alternative models:&lt;/strong&gt; Llama 3.1 8B Instruct and Mistral 7B&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client and interaction layer:&lt;/strong&gt; Python 3.11+ with Rich or Textual&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GNU-style input:&lt;/strong&gt; Readline on Linux/macOS and pyreadline3 on Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent story state:&lt;/strong&gt; versioned local JSON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final artifacts:&lt;/strong&gt; harmless Brainfuck, Whitespace, and polyglot text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resurrection handoff:&lt;/strong&gt; static HTML/CSS with a user-initiated GitHub link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The character is controlled through a strong, inspectable System Prompt that fixes Johann Schmidt's voice while preserving useful answers. The architecture separates the character engine, story director, virtual filesystem, command router, puzzle system, and safety boundary.&lt;/p&gt;

&lt;p&gt;A crucial design decision was to make the takeover &lt;em&gt;diegetic&lt;/em&gt;. The program may clear its own screen, redraw the prompt, fabricate &lt;code&gt;uname&lt;/code&gt; output, and intercept &lt;code&gt;dir&lt;/code&gt;, but it never invokes a real shell. Sacrifices are symbolic and reversible. The user always retains &lt;code&gt;exit --now&lt;/code&gt;, repeated-interrupt escape, and the ability to close the physical window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation makes this project possible in ways a closed API would not.&lt;/p&gt;

&lt;p&gt;First, the ghost can live entirely on the user's machine. Open-weight models through Ollama keep conversations local, work offline, and allow users to choose the model that fits their hardware and language needs.&lt;/p&gt;

&lt;p&gt;Second, the persona can be audited and remixed. Because the System Prompt, state transitions, puzzle encoding, and output filters are all open, contributors can improve the character without hiding the mechanics behind a proprietary agent service.&lt;/p&gt;

&lt;p&gt;Third, community ownership protects the fiction. Players can add commands, decay stages, translations, alternative endings, accessibility modes, and harmless polyglot relics. They can also inspect every artifact and verify that the terminal takeover remains theatrical rather than malicious.&lt;/p&gt;

&lt;p&gt;Finally, open weights let the experience outlive a single commercial model or pricing change. The story belongs to the repository and its contributors, not to a rented endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;No external agent session is attached to this submission. The design, safety constraints, prompt draft, state model, and implementation roadmap were developed directly in the project workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;There is one moment I want the experience to preserve:&lt;/p&gt;

&lt;p&gt;The player finally escapes. The terminal behaves normally for a second and a half—and then, without permission, it types a single impossible command and redraws the red prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You cannot escape the void with a keyboard interrupt.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the moment the machine stops being a tool and becomes a character.&lt;/p&gt;

&lt;p&gt;But the ending points the other way. The ghost does not survive by infecting the computer. It survives because the player chooses to record the disappearing fragments, return before they are gone, and open the repository again. In this version of the legend, sacrifice means attention, time, and the willingness to keep a story alive.&lt;/p&gt;




&lt;p&gt;Team Submissions: This is an individual submission.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
