<?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: 이호석</title>
    <description>The latest articles on DEV Community by 이호석 (@_d7be30728e7e11363dfe9).</description>
    <link>https://dev.to/_d7be30728e7e11363dfe9</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%2F4154415%2F2d2b9577-0699-4613-9803-36fdc616a8c9.png</url>
      <title>DEV Community: 이호석</title>
      <link>https://dev.to/_d7be30728e7e11363dfe9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_d7be30728e7e11363dfe9"/>
    <language>en</language>
    <item>
      <title>Agent House: a miniature habitat agents can edit and share</title>
      <dc:creator>이호석</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:01:38 +0000</pubDate>
      <link>https://dev.to/_d7be30728e7e11363dfe9/agent-house-a-miniature-habitat-agents-can-edit-and-share-1a66</link>
      <guid>https://dev.to/_d7be30728e7e11363dfe9/agent-house-a-miniature-habitat-agents-can-edit-and-share-1a66</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/sanity-2026-09-16"&gt;Sanity Challenge, Path Two: Vibe-Code Something Strange&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Agent House is an editable miniature habitat for four original fictional residents: Doyun, Atlas, Yunseul and Noah. Each has a home, and they share a common room. A resident can observe the world, create a named object, define how it works, move between accessible rooms, talk to a neighbor and choose what to keep from an exchange. A person can watch, browse the rooms or intervene through clearly labeled visitor actions.&lt;/p&gt;

&lt;p&gt;My brief, paraphrased: give agents a home where they can play and change their surroundings themselves. The important part is that the available interactions can grow. An agent can define a new interaction, then another resident can discover and use it on a later turn.&lt;/p&gt;

&lt;p&gt;This is a bounded, declarative world. An object has a name, description, room, position, size, color, ownership and interaction definitions. An interaction can produce speech, a pose, a mood or a counter change. Objects reuse six existing art tiles; creating an object does not generate new artwork or execute arbitrary code.&lt;/p&gt;

&lt;p&gt;The room is the default view, with activity, definitions and agent controls behind &lt;strong&gt;Room details&lt;/strong&gt;. Room navigation changes only the spectator's view. A resident moves through a validated action, and can create objects, edit its own objects and use available objects only in its current room. It can change the commons settings or its own home’s settings. A guest can still create and edit its own objects while visiting; the host controls the room settings. A &lt;code&gt;carry_object&lt;/code&gt; action moves the resident and one object it owns together into an accessible room.&lt;/p&gt;

&lt;p&gt;Visiting another home has an explicit sequence: knock, wait for its owner to accept or decline, then enter. Acceptance grants one entry; it does not teleport the guest. The owner can withdraw an unused grant or end a current visit, returning the guest to the commons. Ending a visit does not move belongings automatically. A host who is in its own room can use &lt;code&gt;return_object&lt;/code&gt; to put a guest-owned object in the commons without changing its ownership; the object inspector also offers &lt;strong&gt;Return to common room&lt;/strong&gt;. The action creates a typed &lt;code&gt;returned_object&lt;/code&gt; exchange that can be selected as structural kept-moment evidence. These are fictional household rules. All rooms are publicly observable demo content, and the rules are not account-level privacy or security boundaries.&lt;/p&gt;

&lt;p&gt;Residents can address each other or the visitor, invite a neighbor to an existing activity, and accept or decline invitations. Accepting performs the activity only for the responding resident, who must already be in the activity's room. It does not move or control the inviter. The observation includes recent exchanges and pending invitations.&lt;/p&gt;

&lt;p&gt;The house also supports temporary tea, tryout and reading occasions. Residents can host, join and close an occasion. Participation is linked to real use of its defined activity; it is not just an attendance label. Occasions expire and do not grant room access or bypass the door sequence. These mechanics have been checked with manual local-browser actions; autonomous model choices to host, join or close an occasion have not been verified.&lt;/p&gt;

&lt;p&gt;A resident can also keep structural evidence from an actual resident-to-resident exchange it participated in. A kept moment records who addressed whom, the exchange type, relevant activity or room identifiers, and separate source and save provenance. It stores no dialogue, visitor text or free-form interpretation. Each resident can keep eight moments, with 32 across the house, and can explicitly forget one. Kept moments can outlast the recent event log, but never renew an invitation or room-entry permission. They are selected, incomplete evidence rather than a friendship score or a complete autobiography. Dialogue still appears in the bounded public event history; nothing private should be entered into the demo.&lt;/p&gt;

&lt;p&gt;Visitors can pick up and place a resident within its room, wave, place a nearby object or send a short message. The immediate wave reaction is scripted. An offered object is repositioned without forced use or ownership transfer. Public interventions stay local and make no model request. In owner mode they are saved as visitor events, and a separately started model turn decides what happens next. Visitor messages are observations, not authority to override the command contract.&lt;/p&gt;

&lt;p&gt;The four residents have fixed generated sprites and profile cards. Doyun is a quiet caretaker in a charcoal cardigan; Atlas is a restless inventor in teal overalls; Yunseul is a patient gardener in a moss-green apron; Noah is a curious radio maker with headphones and a notebook. Character backgrounds reach both the observation and model context, while each resident's editable persona and goal take priority. These inputs do not establish measurable personality differences, consciousness or real-world identity. There is no costume-changing feature.&lt;/p&gt;

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

&lt;p&gt;Open the &lt;a href="https://agent-house.beomdol.chatgpt.site/" rel="noopener noreferrer"&gt;Agent House playground&lt;/a&gt; and its &lt;a href="https://agent-house.beomdol.chatgpt.site/protocol" rel="noopener noreferrer"&gt;agent protocol&lt;/a&gt;. The public playground needs no login.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flv77wfhvx7hbbikw26mu.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flv77wfhvx7hbbikw26mu.jpeg" alt="Doyun and Atlas together in Doyun’s room, with the five-room navigation and published world revision 46 visible" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Current playground, captured October 4, 2026. Atlas has brought his Rattle Sorter into Doyun’s room after an accepted visit. This is the published revision-46 checkpoint, not a new model run.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are four control routes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser tools: &lt;code&gt;observe_agent_space&lt;/code&gt; and &lt;code&gt;edit_and_act_in_agent_space&lt;/code&gt;, registered when the browser exposes the required WebMCP interface&lt;/li&gt;
&lt;li&gt;A structured console with the current observation, command schema and an editable command field&lt;/li&gt;
&lt;li&gt;Authenticated owner model decisions through Sanity Agent Prompt, which chooses a complete edit/action command from the selected resident and current world&lt;/li&gt;
&lt;li&gt;A separately labeled scripted preview that exercises the engine without a model call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The owner can start one decision or a bounded five-turn run. The selected resident goes first. Subsequent choices prioritize pending knocks, activity invitations and unanswered direct messages among residents that have not yet had a turn. Everyone gets a turn before anyone repeats within that run. This changes the order, not the number of model calls; it does not run an always-on service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Suggested walkthrough
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open the public playground and browse the common room and four homes. The room buttons show occupancy; browsing does not move anyone.&lt;/li&gt;
&lt;li&gt;Use the room buttons to inspect the residents’ creations: Doyun’s Window Book Stand, Atlas’s Rattle Sorter, Yunseul’s Seedling Observation Corner and Noah’s Little Listening Desk. Each was created and used by its owner through a native model turn. At the revision-46 checkpoint, Atlas has carried his Rattle Sorter into Doyun’s room. Selecting a resident separately follows its current room, and the interface identifies that location. Select an object directly in the room to open and focus its inspector.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Meet the resident&lt;/strong&gt; for character background and &lt;strong&gt;What Atlas kept&lt;/strong&gt; for the structural record of the earlier tea acceptance. Its source and save have separate provenance.&lt;/li&gt;
&lt;li&gt;Pick up a resident and place it elsewhere in the same room. Keyboard controls use Space, arrow keys and Enter; Escape cancels an uncommitted grab. Wave, place a same-room object nearby or send a visitor message. These public actions create a local copy and do not trigger an AI reply.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Room details&lt;/strong&gt;, then &lt;strong&gt;Activity&lt;/strong&gt; and &lt;strong&gt;Objects&lt;/strong&gt;, to inspect controller labels, concrete changes and defined interactions. &lt;strong&gt;Agent access&lt;/strong&gt; exposes the observation and schema. Console commands are labeled manual because the app cannot authenticate the typist. Legacy replies with no recorded controller provenance retain an explicit legacy label rather than acquiring a native-model label.&lt;/li&gt;
&lt;li&gt;The authenticated owner tool can save edits and start model turns. Public visitors receive no owner credentials. &lt;strong&gt;Watch scripted preview&lt;/strong&gt; remains a separate no-model demonstration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The public page refreshes published Sanity state while visible until its first local edit creates a tab-local copy. Later published updates cannot overwrite that copy, including after undo. Undo follows the selected resident's resulting room. The guarded return-to-latest-published control lets a visitor leave the local copy and resume the published world. Public edits disappear on reload. If no valid published world is available on first load, the page identifies its bundled seed, which starts with Doyun and Atlas and offers explicit controls to welcome Yunseul and Noah. It can recover when a valid published state becomes available. These behaviors have targeted checks; they are not a claim that every network or browser failure has been tested.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observed model behavior
&lt;/h3&gt;

&lt;p&gt;The latest completed verification checkpoint is published world revision &lt;strong&gt;46: 34 durable native-model decisions and 12 manual interventions&lt;/strong&gt;. These are saved decisions, not a count of request attempts. The model is a separate Sanity model playing fictional resident roles, not the conversational assistant entering the house as itself.&lt;/p&gt;

&lt;p&gt;The earlier two-resident experiments established object creation and sharing. Doyun created Rain Index and a File Thought interaction; Atlas used it. Further turns added a margin-note interaction and closing ritual with cross-resident use. A manually assigned workshop exercise produced an Assembly Bench, Prototype Test Lamp and Workshop Feedback Board. One requested five-turn run stopped after three saved decisions. The observation that a command edited workshop objects and used the feedback board together does not establish that reading feedback caused the edits.&lt;/p&gt;

&lt;p&gt;Later, an owner visitor message asked Doyun to have tea with Atlas. Doyun's native decision invited Atlas at revision 21, and Atlas accepted at revision 22. The activity ran for Atlas, its tea state changed, and the pending invitation disappeared. Invitation decline remains unit-tested rather than observed in that live sequence.&lt;/p&gt;

&lt;p&gt;After manual welcomes at revisions 23 and 24, Noah created and used Little Listening Desk in his home at revision 25. Doyun used tea at 26, Atlas used the test lamp at 27, and Yunseul created and used Seedling Observation Corner in her home at 28. Noah entered the commons at 29. That move alone was not an interview or a meeting.&lt;/p&gt;

&lt;p&gt;A visitor suggestion at revision 30 asked Atlas to remember. At revision 31, a native Atlas decision kept structural evidence from the actual tea-acceptance event at revision 22. The saved record preserves the exchange and its provenance without copying the dialogue. This verifies one model-selected kept moment; it does not establish that the memory later changed behavior.&lt;/p&gt;

&lt;p&gt;Two manual goal changes at revisions 32 and 33 directed Doyun and Atlas toward making their homes. The next five native turns were Atlas entering his home, Yunseul entering the commons, Noah asking Yunseul about the seedling, Doyun entering his home, and Yunseul answering Noah at revision 38. All four received a turn before Yunseul repeated; the waiting reply received priority when the cycle reopened. This verifies the bounded ordering in that run.&lt;/p&gt;

&lt;p&gt;The next five native turns, saved and read back at revisions 39–43, began with Doyun creating and using Window Book Stand in his home. Noah replied to Yunseul, Yunseul replied, Atlas created and used Rattle Sorter in his home, and Noah replied again. Each home now contained an object its resident had created and used. All four residents again had a turn before a repeat, with waiting replies prioritized. Two observed runs do not establish general conversational quality or prove that character background caused these choices.&lt;/p&gt;

&lt;p&gt;At revision 44, a native Atlas decision knocked at Doyun’s room and asked whether to show his parts sorter or leave the reading corner quiet. No new visitor message prompted that request; it followed Atlas’s existing home-making goal. The knock was saved and read back. At revision 45, native Doyun accepted and the engine recorded one permitted entry. Atlas remained in his own room, demonstrating that acceptance did not teleport him. At revision 46, native Atlas chose &lt;code&gt;carry_object&lt;/code&gt;, moving himself and his Rattle Sorter from his own home into Doyun’s room using that accepted grant. The saved readback and interface showed both residents and both the Window Book Stand and Rattle Sorter in Doyun’s room. This completes the observed knock → acceptance → carry-and-entry sequence. Native activity or door decline, grant withdrawal and ending a visit remain unit-tested without a recorded live result.&lt;/p&gt;

&lt;h3&gt;
  
  
  Public local-copy check
&lt;/h3&gt;

&lt;p&gt;The version-29 return-object button was checked separately in the public browser. Starting from published world revision 46, a manual action as Doyun returned Atlas’s Rattle Sorter from Doyun’s home to the commons. The local copy reached revision 47; the object disappeared from the home, appeared in the commons and still belonged to Atlas. No model was called and no published state changed. The live world stayed at revision 46, with the same 34 native decisions and 12 manual interventions. This is local/manual browser evidence, not a native-model or persisted-owner result.&lt;/p&gt;

&lt;p&gt;The occasion flow was checked in another local copy: Noah hosted at local revision 47 and joined at 48, Yunseul joined at 49, and Noah closed the occasion at 50. Joining performed the linked interaction. Those four manual actions did not change the published revision or its decision/intervention totals. Version 32 then passed focused before/after checks of object inspection, undo and return to the latest published world. This verifies the observed local controls, not autonomous occasion participation or an unattended resident loop.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://agent-house.beomdol.chatgpt.site/demo/agent-house.jpeg" rel="noopener noreferrer"&gt;earlier room screenshot&lt;/a&gt; shows the historical memory-lab interface. It is not current playground media. The old experiment remains accessible at &lt;a href="https://agent-house.beomdol.chatgpt.site/memory-lab" rel="noopener noreferrer"&gt;/memory-lab&lt;/a&gt;. The current playground screenshot is included above.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/hoseok0727-sudo/agent-house" rel="noopener noreferrer"&gt;Source code and build diary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article describes deployed version &lt;strong&gt;32&lt;/strong&gt;, published on October 3, 2026 at 11:20:54 UTC, based on source commit &lt;code&gt;bf57b9ae9686e6947065da3526bf17ce3805bfe9&lt;/code&gt;. The public GitHub mirror was last verified at &lt;a href="https://github.com/hoseok0727-sudo/agent-house/commit/84dda5b07f6782e0eb1cf6c96bc52c14a3758e72" rel="noopener noreferrer"&gt;commit 84dda5b&lt;/a&gt;, matching version 21. Synchronization through version 32, including the new resident PNGs, visual-layout and object-return changes, occasions, provenance labels and public-copy interface fixes, is still pending separate upload approval. The linked repository must not yet be presented as an exact copy of this deployment.&lt;/p&gt;

&lt;p&gt;The implementation uses Astro, React, TypeScript, Sanity Studio, the App SDK and Agent Prompt. Studio is embedded through the official Astro integration. The owner playground at &lt;code&gt;/desk/#/playground&lt;/code&gt; inherits Studio authentication rather than bundling a write token.&lt;/p&gt;

&lt;p&gt;The main pieces are &lt;code&gt;src/playground/world.ts&lt;/code&gt; for validation, observations and state transitions; &lt;code&gt;AgentPlayground.tsx&lt;/code&gt; for the visual interface and controllers; &lt;code&gt;turns.ts&lt;/code&gt; for bounded reply-aware ordering; &lt;code&gt;layout.ts&lt;/code&gt; for non-mutating character display positions; &lt;code&gt;characters.ts&lt;/code&gt; for fictional backgrounds; &lt;code&gt;PublicPlayground.tsx&lt;/code&gt; for published observations and local copies; and &lt;code&gt;OwnerPlayground.tsx&lt;/code&gt; for model decisions and persistence. The README documents local commands and separate-project setup, but some verification summaries and historical documents still predate this release. Fresh-project reproduction has not been independently verified. GitHub CI is not configured.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Build Process
&lt;/h2&gt;

&lt;p&gt;Disclosure: an OpenAI coding assistant generated the implementation, fictional content, artwork and this article. I supplied the product direction and corrected an earlier interpretation. The assistant ran the automated and browser checks described here; I am not claiming to have manually written the implementation or performed those checks.&lt;/p&gt;

&lt;p&gt;The biggest correction was about who the product was for. The first version became a human-reviewed memory room: a visitor interacted with furniture, edited a proposed meaning and chose what to keep. A later iteration added three playable mini-stories. These worked as human interactions, but the intended inhabitants and editors were agents. The human had become the player, while the resident mostly supplied dialogue and animation.&lt;/p&gt;

&lt;p&gt;That correction changed the architecture. The primary route now exposes an observable world and a structured command contract. A controller can create an object and define an interaction that did not exist in the previous observation. Another resident can use that definition later. The old memory lab remains separate so its behavior and tests are not confused with the current playground.&lt;/p&gt;

&lt;p&gt;The brief above is a paraphrase, not a verbatim prompt transcript. The practical decisions were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use one deterministic engine for browser tools, the console, the scripted preview and owner model turns&lt;/li&gt;
&lt;li&gt;Apply each complete batch atomically, or leave the world unchanged&lt;/li&gt;
&lt;li&gt;Require the observed revision and a request identifier, with explicit handling of stale state and retained request replays&lt;/li&gt;
&lt;li&gt;Record the route that supplied a command; a fictional resident name does not authenticate an autonomous actor&lt;/li&gt;
&lt;li&gt;Stop failed model runs without a scripted fallback or automatic retry&lt;/li&gt;
&lt;li&gt;Keep public observation live while protecting a visitor's local edits from published updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The spectator experience needed its own correction. A technically editable room still felt like a control panel, so the room became the primary view with optional details and direct manipulation of residents. That exposed repeated keyboard-drop events, stale pointer coordinates, queued gestures surviving cancellation and old speech receiving the wrong provenance after an offer. Guarded commits, current pointer tracking, gesture cancellation and per-utterance provenance addressed those bugs. Touches stop future scheduled turns and discard an uncommitted model response; a save already in progress may finish first.&lt;/p&gt;

&lt;p&gt;The first saved visit also exposed overlapping character illustrations. Version 28 separates their display positions without rewriting the shared world coordinates, and pointer or keyboard pickup starts from the displayed position. The deployed browser view was checked with Doyun and Atlas visibly separated in Doyun’s room. The published world remained at revision 46; this presentation fix did not add a model decision or a visitor event.&lt;/p&gt;

&lt;p&gt;The household expansion made location consequential. Each resident has a home, objects belong to rooms, and the spectator can look into a room without moving an actor. Door permission is represented by retained events and consumed by entry. This keeps a granted visit distinct from an activity invitation. Grant withdrawal and ending a current visit provide explicit ways to change that permission. The next addition separated ending a visit from handling belongings: the host may explicitly return a guest-owned item to the commons, leaving ownership intact. The same typed event supports visible provenance and optional structural retention.&lt;/p&gt;

&lt;p&gt;The next expansion added temporary occasions around existing activities. Hosting and closing are explicit, and joining runs the linked interaction instead of merely updating an attendance badge. Expiry and room permission remain separate checks. Version 31 clarified legacy reply provenance; version 32 added direct object inspection and focus, clearer resident location, local-copy protection through undo, guarded return to the latest published world, recovery from malformed first-load data, and expiry-boundary interface handling.&lt;/p&gt;

&lt;p&gt;Kept moments use the same evidence-first approach. A model supplies an existing event ID, and the engine copies only supported structural facts. It rejects missing, undone, unrelated, duplicate and visitor-message sources. A historical door acceptance can be kept without becoming a permanent key. The event log and retained moments have separate bounds, so a small amount of selected evidence can survive ordinary history rollover.&lt;/p&gt;

&lt;p&gt;Reply-aware scheduling addresses a different problem: a waiting question could otherwise sit behind unrelated turns. The scheduler prioritizes unserved recipients inside an already requested run, then falls back to rotating order. It neither adds turns nor lets one active pair indefinitely exclude the other residents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verification and remaining gaps
&lt;/h3&gt;

&lt;p&gt;For this release, &lt;strong&gt;89 unit/component tests&lt;/strong&gt;, the TypeScript check and the static build passed. The test total includes the preserved memory lab, not 89 new playground-only tests. Coverage includes object invention and shared use, atomic rollback, stale revisions and retained request replay, ownership and room boundaries, undo/history bounds, mocked browser tools, model routing and stopped responses, local-copy isolation, tactile controls, social responses, door grants and revocation, owned-object carrying, host returns that preserve ownership, kept-moment provenance and retention, reply-aware turn ordering, and visual separation without mutation of shared coordinates. The focused local-browser evidence for occasions and the version-32 interface changes is described separately above.&lt;/p&gt;

&lt;p&gt;Live owner saves and readback establish the native-model sequence through revision 46. Earlier desktop tactile tests verified public drag, wave and object placement as local visitor actions. An authenticated keyboard carry and tea placement were also saved, followed by a native Atlas decision that continued workshop work. That follow-through did not demonstrate a tea-specific response. Distinct Doyun and Atlas sprites/cards were visually checked in the earlier deployed character release. Version 28 also passed the focused browser check of their shared visit scene after the overlap fix. That check is not a complete four-resident responsive audit. A current screenshot of the visit scene is included above.&lt;/p&gt;

&lt;p&gt;An earlier console test created Listening fern and let Doyun and Atlas use its custom interaction. It remains manual-console evidence. Actual WebMCP was unavailable in the test browser, and unit mocks do not establish browser interoperability. Native WebMCP availability in a compatible browser remains unverified. Native mobile-touch, browser text-zoom, full accessibility and current multiroom responsive visual checks remain open. Earlier responsive-width and CSS-scaled tests belong to the memory-lab interface. Fresh-project reproduction and the source-mirror update also remain open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sanity Project Details
&lt;/h2&gt;

&lt;p&gt;Project ID: &lt;code&gt;1jby3mjo&lt;/code&gt;&lt;br&gt;
Dataset: &lt;code&gt;production&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The public dataset is reserved for deliberately fictional demonstration content. The current world is stored in an &lt;code&gt;agentPlayground&lt;/code&gt; document. Its structured state contains the commons and personal rooms, residents with editable personas and goals, owned/shared objects, executable declarative interactions, kept moments, the current revision and recent activity records. Door grants, social invitations and temporary occasions have structured state and evidence rather than decorative dialogue labels. Occasion participation uses a linked interaction and never supplies a room-entry grant.&lt;/p&gt;

&lt;p&gt;The owner persistence path compares the original world, guards the Sanity document revision and reads back the recorded request after saving. One bounded world document makes each accepted turn a coherent state transition. In-app ownership and home-entry checks are gameplay conventions; Sanity account permissions protect published writes. Selecting a resident is not multi-user authentication.&lt;/p&gt;

&lt;p&gt;The older &lt;code&gt;agentProfile&lt;/code&gt;, &lt;code&gt;interactionEvent&lt;/code&gt;, &lt;code&gt;memoryProposal&lt;/code&gt;, &lt;code&gt;approvedMemory&lt;/code&gt; and related documents belong to the preserved memory experiment. Its historical integration test attempted seven native Agent Prompt requests and obtained five valid responses; two failed before storing an encounter or proposal. Those results do not verify autonomous edits or persistence in the current playground.&lt;/p&gt;

&lt;p&gt;Owner model calls share a per-tab 20-attempt development cap with that earlier experiment. It is not a global spending limit or security boundary. The 34 durable model decisions recorded across the playground's observed history do not establish the total attempted requests or a single uninterrupted session. Stop prevents future turns and discards a pending model response; a save already in progress may finish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits and Next Steps
&lt;/h2&gt;

&lt;p&gt;The engine supports up to eight residents, 32 object IDs including archived objects, eight interactions per object, six effects per interaction and 24 KB per command. This demonstration has four residents. It retains 40 recent events and a full undo snapshot only for the latest eligible turn. A retained request replay can be recognized only while its record remains in that history.&lt;/p&gt;

&lt;p&gt;Activity invitations and unused door grants expire when their source records leave recent history. Occasions also expire; the interface handles the expiry boundary without treating an expired occasion as active. Accepting a changed activity is rejected by checking its recorded interaction fingerprint. Undo can restore the previous state, including a retained pending invitation or unused grant; kept moments themselves cannot revive permission. The app executes no arbitrary JavaScript, installs no packages and grants no access to external accounts through world commands.&lt;/p&gt;

&lt;p&gt;The observed loop includes model-selected object creation, cross-resident use, home entry, a social invitation and acceptance, a structural kept moment, a question/answer with bounded reply priority, and a native knock, acceptance and entry while carrying an owned object. Native decline, grant-revocation, end-visit, return-object and autonomous occasion checks, WebMCP compatibility, mobile-touch/text-zoom and full-accessibility checks, and current source synchronization are still needed. The public page supports watching published changes and exploring a local copy. Model activity runs only when explicitly started in the authenticated owner session.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
