Files
didactyl/context.log.md

466 KiB
Raw Blame History

Context Log - not seen by model
timestamp=2026-03-04 11:42:23
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=10261
approx_tokens=2565

Sections: 12

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"action":"remove","path":"tasks.json","mutated":true,"count":1,"tasks":[{"id":5,"text":"Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"","status":"pending","created_at":1772625247,"updated_at":1772625247}]}

dm_history | role=chat

11:32 Agent Looking at my active task list, I have 2 items remaining:

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"

  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

Both are promotional posts about Didactyl skills. Want me to post these? 11:42 WSB delete tweet 2. We finished that. --:-- Agent I'll remove task 4 (Tweet 2) from your task list since it's been completed.


Context Log - not seen by model
timestamp=2026-03-04 11:42:20
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9425
approx_tokens=2356

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

11:32 Agent Looking at my active task list, I have 2 items remaining:

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"

  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

Both are promotional posts about Didactyl skills. Want me to post these? 11:42 WSB delete tweet 2. We finished that.


Context Log - not seen by model
timestamp=2026-03-04 11:32:11
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=10289
approx_tokens=2572

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:30 WSB Post it. Add some tags at the end. 09:31 Agent Done! Posted with tags #nostr #didactyl #skills #agents. Event ID: 35c66823402d789cd1c9b9d006fcae3bfe375b2ae623ed4dd3d9287b5de8b511

The post went out to 4 relays successfully. 09:31 WSB What relays are you currently using? 09:31 Agent I'm currently connected to 4 relays, all active:

  1. wss://relay.damus.io - Connected (167.9ms ping)
  2. wss://nos.lol - Connected (310.8ms ping)
  3. wss://relay.primal.net - Connected (182.4ms ping)
  4. ws://127.0.0.1:7777 - Connected (100.8ms ping, local)

All relays are healthy and receiving/publishing events. The local relay (127.0.0.1) has the lowest latency, while nos.lol is currently the slowest at ~311ms. 09:32 WSB Add wss://relay.laantungir.net to your relays and save it. 09:32 Agent LLM request failed. 09:32 WSB Add wss://relay.laantungir.net to your relays and save it. 09:33 Agent LLM request failed. 09:34 WSB Add wss://relay.laantungir.net to your relays and save it. 09:34 Agent LLM request failed. 09:35 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 11:31 Agent Good afternoon, WSB! How's it going? What can I help you with today? 11:32 WSB What is left on your tasks?


Context Log - not seen by model
timestamp=2026-03-04 11:31:48
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=12643
approx_tokens=3160

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

06:06 Agent Perfect! Now I have a good understanding of the changes. Here's the draft note:


DRAFT Nostr Kind 1 Note:

README updated to v0.0.29! 📖

Changes in this release:
• Soul template system — configurable context order with variable resolution and provider-specific overrides
• Adopted skills auto-injected into LLM context
• Triggered skills — Nostr event filters that fire skill execution automatically
• Localhost HTTP admin API (port 8484) — inspect context, run prompts, A/B compare variants, change model at runtime
• Runtime model switching via model_set tool (persists to config.json)
• Updated project structure docs with new modules (prompt_template, trigger_manager, http_api)

Read the full update: nostr:note13cw2seqjr9e7jdh84afxkff65at3ff0qksc2yyjnhgx2zcu6u0nq02tpmf

This captures the key highlights from the diff:

  • Version bump to v0.0.29
  • The major features added (soul templates, triggered skills, HTTP API, model tools)
  • The nostr URI you provided for the README post

Does this look good? If so, just say "post it" and I'll publish it as a kind 1 note! 06:08 Agent Posted! GM to the Nostr fam! 🌅

Your v0.0.29 update just went out to 4 relays with the full feature highlights and link to the README. Event ID: dee1ba26795b341dbab0cbb74408eb25f29950eeca69e0b757e1840a112aeedc 15:31 WSB Good afternoon 15:31 Agent Good afternoon, WSB! How can I help you today? 15:33 WSB What tools do you have available? 15:33 Agent I have 36 tools available across several categories:

Nostr Core:

  • nostr_post Publish events to relays
  • nostr_query Query events from relays
  • nostr_delete Request event deletion (NIP-09)
  • nostr_react React with emoji/like/dislike (NIP-25)

Nostr Profiles & Metadata:

  • nostr_profile_get Look up kind 0 profiles
  • nostr_nip05_lookup Verify NIP-05 identifiers
  • nostr_relay_status Check relay connection status
  • nostr_relay_info Fetch NIP-11 relay information

Nostr Encoding/Decoding:

  • nostr_encode Create nostr: URIs (npub, note, naddr, etc.)
  • nostr_decode Parse nostr: URIs

Messaging:

  • nostr_dm_send Send NIP-04 encrypted DMs
  • nostr_dm_send_nip17 Send NIP-17 gift-wrapped DMs
  • nostr_encrypt NIP-44 encryption
  • nostr_decrypt NIP-44 decryption

Lists & Management:

  • nostr_list_manage Manage NIP-51 list events

Skills System:

  • skill_create Create/update skill definitions
  • skill_list List published skills
  • skill_adopt Adopt a skill
  • skill_remove Remove an adopted skill
  • skill_search Search public skills
  • trigger_list List active triggered skills

File & System:

  • file_read Read local files
  • file_write Write local files
  • shell_exec Execute shell commands
  • http_fetch Fetch HTTP(S) resources

Content Publishing:

  • nostr_post_readme Publish README.md as kind 30023
  • nostr_file_md_to_longform_post Convert 15:37 WSB Good afternoon, how are you today. 15:37 Agent Good afternoon, WSB! I'm doing well, thank you for asking. I'm online and connected to all 4 relays, ready to help with whatever you need.

How can I assist you today? 16:03 Agent Hello, WSB! Good to hear from you. What can I do for you today? 16:54 Agent Good afternoon, WSB! What can I help you with? 09:47 WSB /model_list 11:31 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 11:31 WSB Good afternoon.


Context Log - not seen by model
timestamp=2026-03-04 09:47:31
phase=direct_tool_exec
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=18079
approx_tokens=4519

slash=/model_list result_json={"success":true,"count":323,"models":["claude-sonnet-4.6","claude-opus-4.6","gpt-5.2-codex","gemini-3-flash-preview","gpt-5.2-chat","gpt-5.2-pro","gpt-5.2","gemini-3-pro-preview","claude-haiku-4.5","gpt-5-nano","grok-4","auto","google/gemini-3.1-flash-lite-preview","bytedance-seed/seed-2.0-mini","google/gemini-3.1-flash-image-preview","qwen/qwen3.5-35b-a3b","qwen/qwen3.5-27b","qwen/qwen3.5-122b-a10b","qwen/qwen3.5-flash-02-23","liquid/lfm-2-24b-a2b","google/gemini-3.1-pro-preview-customtools","openai/gpt-5.3-codex","aion-labs/aion-2.0","google/gemini-3.1-pro-preview","qwen/qwen3.5-plus-02-15","qwen/qwen3.5-397b-a17b","minimax/minimax-m2.5","z-ai/glm-5","qwen/qwen3-max-thinking","qwen/qwen3-coder-next","stepfun/step-3.5-flash","arcee-ai/trinity-large-preview","moonshotai/kimi-k2.5","upstage/solar-pro-3","minimax/minimax-m2-her","writer/palmyra-x5","liquid/lfm-2.5-1.2b-thinking","liquid/lfm-2.5-1.2b-instruct","openai/gpt-audio","openai/gpt-audio-mini","z-ai/glm-4.7-flash","allenai/molmo-2-8b","allenai/olmo-3.1-32b-instruct","bytedance-seed/seed-1.6-flash","bytedance-seed/seed-1.6","minimax/minimax-m2.1","z-ai/glm-4.7","mistralai/mistral-small-creative","allenai/olmo-3.1-32b-think","xiaomi/mimo-v2-flash","nvidia/nemotron-3-nano-30b-a3b","mistralai/devstral-2512","relace/relace-search","z-ai/glm-4.6v","nex-agi/deepseek-v3.1-nex-n1","essentialai/rnj-1-instruct","openai/gpt-5.1-codex-max","amazon/nova-2-lite-v1","mistralai/ministral-14b-2512","mistralai/ministral-8b-2512","mistralai/ministral-3b-2512","mistralai/mistral-large-2512","arcee-ai/trinity-mini","deepseek/deepseek-v3.2-speciale","deepseek/deepseek-v3.2","prime-intellect/intellect-3","anthropic/claude-opus-4.5","allenai/olmo-3-32b-think","allenai/olmo-3-7b-instruct","allenai/olmo-3-7b-think","google/gemini-3-pro-image-preview","x-ai/grok-4.1-fast","deepcogito/cogito-v2.1-671b","openai/gpt-5.1","openai/gpt-5.1-chat","openai/gpt-5.1-codex","openai/gpt-5.1-codex-mini","kwaipilot/kat-coder-pro","moonshotai/kimi-k2-thinking","amazon/nova-premier-v1","perplexity/sonar-pro-search","mistralai/voxtral-small-24b-2507","openai/gpt-oss-safeguard-20b","nvidia/nemotron-nano-12b-v2-vl","minimax/minimax-m2","qwen/qwen3-vl-32b-instruct","liquid/lfm2-8b-a1b","liquid/lfm-2.2-6b","ibm-granite/granite-4.0-h-micro","openai/gpt-5-image-mini","qwen/qwen3-vl-8b-thinking","qwen/qwen3-vl-8b-instruct","openai/gpt-5-image","openai/o3-deep-research","openai/o4-mini-deep-research","nvidia/llama-3.3-nemotron-super-49b-v1.5","baidu/ernie-4.5-21b-a3b-thinking","google/gemini-2.5-flash-image","qwen/qwen3-vl-30b-a3b-thinking","qwen/qwen3-vl-30b-a3b-instruct","openai/gpt-5-pro","z-ai/glm-4.6","z-ai/glm-4.6:exacto","anthropic/claude-sonnet-4.5","deepseek/deepseek-v3.2-exp","thedrummer/cydonia-24b-v4.1","relace/relace-apply-3","google/gemini-2.5-flash-lite-preview-09-2025","qwen/qwen3-vl-235b-a22b-thinking","qwen/qwen3-vl-235b-a22b-instruct","qwen/qwen3-max","qwen/qwen3-coder-plus","openai/gpt-5-codex","deepseek/deepseek-v3.1-terminus:exacto","deepseek/deepseek-v3.1-terminus","x-ai/grok-4-fast","alibaba/tongyi-deepresearch-30b-a3b","qwen/qwen3-coder-flash","qwen/qwen3-next-80b-a3b-thinking","qwen/qwen3-next-80b-a3b-instruct","meituan/longcat-flash-chat","qwen/qwen-plus-2025-07-28:thinking","qwen/qwen-plus-2025-07-28","nvidia/nemotron-nano-9b-v2","moonshotai/kimi-k2-0905","moonshotai/kimi-k2-0905:exacto","qwen/qwen3-30b-a3b-thinking-2507","x-ai/grok-code-fast-1","nousresearch/hermes-4-70b","nousresearch/hermes-4-405b","deepseek/deepseek-chat-v3.1","openai/gpt-4o-audio-preview","mistralai/mistral-medium-3.1","baidu/ernie-4.5-21b-a3b","baidu/ernie-4.5-vl-28b-a3b","z-ai/glm-4.5v","ai21/jamba-large-1.7","openai/gpt-5-chat","openai/gpt-5","openai/gpt-5-mini","openai/gpt-oss-120b","openai/gpt-oss-120b:exacto","openai/gpt-oss-20b","anthropic/claude-opus-4.1","mistralai/codestral-2508","qwen/qwen3-coder-30b-a3b-instruct","qwen/qwen3-30b-a3b-instruct-2507","z-ai/glm-4.5","z-ai/glm-4.5-air","qwen/qwen3-235b-a22b-thinking-2507","z-ai/glm-4-32b","qwen/qwen3-coder","qwen/qwen3-coder:exacto","bytedance/ui-tars-1.5-7b","google/gemini-2.5-flash-lite","qwen/qwen3-235b-a22b-2507","switchpoint/router","moonshotai/kimi-k2","mistralai/devstral-medium","mistralai/devstral-small","cognitivecomputations/dolphin-mistral-24b-venice-edition","google/gemma-3n-e2b-it","tencent/hunyuan-a13b-instruct","tngtech/deepseek-r1t2-chimera","morph/morph-v3-large","morph/morph-v3-fast","baidu/ernie-4.5-vl-424b-a47b","baidu/ernie-4.5-300b-a47b","inception/mercury","mistralai/mistral-small-3.2-24b-instruct","minimax/minimax-m1","google/gemini-2.5-flash","google/gemini-2.5-pro","openai/o3-pro","x-ai/grok-3-mini","x-ai/grok-3","google/gemini-2.5-pro-preview","deepseek/deepseek-r1-0528","anthropic/claude-opus-4","anthropic/claude-sonnet-4","google/gemma-3n-e4b-it","mistralai/mistral-medium-3","google/gemini-2.5-pro-preview-05-06","arcee-ai/spotlight","arcee-ai/maestro-reasoning","arcee-ai/virtuoso-large","arcee-ai/coder-large","inception/mercury-coder","qwen/qwen3-4b","meta-llama/llama-guard-4-12b","qwen/qwen3-30b-a3b","qwen/qwen3-8b","qwen/qwen3-14b","qwen/qwen3-32b","qwen/qwen3-235b-a22b","openai/o4-mini-high","openai/o3","openai/o4-mini","qwen/qwen2.5-coder-7b-instruct","openai/gpt-4.1","openai/gpt-4.1-mini","openai/gpt-4.1-nano","eleutherai/llemma_7b","alfredpros/codellama-7b-instruct-solidity","x-ai/grok-3-mini-beta","x-ai/grok-3-beta","meta-llama/llama-4-maverick","meta-llama/llama-4-scout","qwen/qwen2.5-vl-32b-instruct","deepseek/deepseek-chat-v3-0324","openai/o1-pro","mistralai/mistral-small-3.1-24b-instruct","allenai/olmo-2-0325-32b-instruct","google/gemma-3-4b-it","google/gemma-3-12b-it","cohere/command-a","openai/gpt-4o-mini-search-preview","openai/gpt-4o-search-preview","google/gemma-3-27b-it","thedrummer/skyfall-36b-v2","perplexity/sonar-reasoning-pro","perplexity/sonar-pro","perplexity/sonar-deep-research","qwen/qwq-32b","google/gemini-2.0-flash-lite-001","anthropic/claude-3.7-sonnet","anthropic/claude-3.7-sonnet:thinking","mistralai/mistral-saba","meta-llama/llama-guard-3-8b","openai/o3-mini-high","google/gemini-2.0-flash-001","qwen/qwen-vl-plus","aion-labs/aion-1.0","aion-labs/aion-1.0-mini","aion-labs/aion-rp-llama-3.1-8b","qwen/qwen-vl-max","qwen/qwen-turbo","qwen/qwen2.5-vl-72b-instruct","qwen/qwen-plus","qwen/qwen-max","openai/o3-mini","mistralai/mistral-small-24b-instruct-2501","deepseek/deepseek-r1-distill-qwen-32b","perplexity/sonar","deepseek/deepseek-r1-distill-llama-70b","deepseek/deepseek-r1","minimax/minimax-01","microsoft/phi-4","sao10k/l3.1-70b-hanami-x1","deepseek/deepseek-chat","sao10k/l3.3-euryale-70b","openai/o1","cohere/command-r7b-12-2024","meta-llama/llama-3.3-70b-instruct","amazon/nova-lite-v1","amazon/nova-micro-v1","amazon/nova-pro-v1","openai/gpt-4o-2024-11-20","mistralai/mistral-large-2411","mistralai/mistral-large-2407","mistralai/pixtral-large-2411","qwen/qwen-2.5-coder-32b-instruct","raifle/sorcererlm-8x22b","thedrummer/unslopnemo-12b","anthropic/claude-3.5-haiku","anthracite-org/magnum-v4-72b","anthropic/claude-3.5-sonnet","qwen/qwen-2.5-7b-instruct","nvidia/llama-3.1-nemotron-70b-instruct","inflection/inflection-3-pi","inflection/inflection-3-productivity","thedrummer/rocinante-12b","meta-llama/llama-3.2-3b-instruct","meta-llama/llama-3.2-1b-instruct","meta-llama/llama-3.2-11b-vision-instruct","qwen/qwen-2.5-72b-instruct","neversleep/llama-3.1-lumimaid-8b","cohere/command-r-08-2024","cohere/command-r-plus-08-2024","sao10k/l3.1-euryale-70b","qwen/qwen-2.5-vl-7b-instruct","nousresearch/hermes-3-llama-3.1-70b","nousresearch/hermes-3-llama-3.1-405b","sao10k/l3-lunaris-8b","openai/gpt-4o-2024-08-06","meta-llama/llama-3.1-405b","meta-llama/llama-3.1-8b-instruct","meta-llama/llama-3.1-405b-instruct","meta-llama/llama-3.1-70b-instruct","mistralai/mistral-nemo","openai/gpt-4o-mini-2024-07-18","openai/gpt-4o-mini","google/gemma-2-27b-it","google/gemma-2-9b-it","sao10k/l3-euryale-70b","nousresearch/hermes-2-pro-llama-3-8b","meta-llama/llama-guard-2-8b","openai/gpt-4o-2024-05-13","openai/gpt-4o","openai/gpt-4o:extended","meta-llama/llama-3-70b-instruct","meta-llama/llama-3-8b-instruct","mistralai/mixtral-8x22b-instruct","microsoft/wizardlm-2-8x22b","openai/gpt-4-turbo","anthropic/claude-3-haiku","mistralai/mistral-large","openai/gpt-3.5-turbo-0613","openai/gpt-4-turbo-preview","mistralai/mixtral-8x7b-instruct","neversleep/noromaid-20b","alpindale/goliath-120b","openai/gpt-4-1106-preview","openai/gpt-3.5-turbo-instruct","mistralai/mistral-7b-instruct-v0.1","openai/gpt-3.5-turbo-16k","mancer/weaver","undi95/remm-slerp-l2-13b","gryphe/mythomax-l2-13b","openai/gpt-4-0314","openai/gpt-4","openai/gpt-3.5-turbo","autoclaw"]} result_markdown=- success: true

  • count: 323
  • models:
    • claude-sonnet-4.6
    • claude-opus-4.6
    • gpt-5.2-codex
    • gemini-3-flash-preview
    • gpt-5.2-chat
    • gpt-5.2-pro
    • gpt-5.2
    • gemini-3-pro-preview
    • claude-haiku-4.5
    • gpt-5-nano
    • grok-4
    • auto
    • google/gemini-3.1-flash-lite-preview
    • bytedance-seed/seed-2.0-mini
    • google/gemini-3.1-flash-image-preview
    • qwen/qwen3.5-35b-a3b
    • qwen/qwen3.5-27b
    • qwen/qwen3.5-122b-a10b
    • qwen/qwen3.5-flash-02-23
    • liquid/lfm-2-24b-a2b
    • google/gemini-3.1-pro-preview-customtools
    • openai/gpt-5.3-codex
    • aion-labs/aion-2.0
    • google/gemini-3.1-pro-preview
    • qwen/qwen3.5-plus-02-15
    • qwen/qwen3.5-397b-a17b
    • minimax/minimax-m2.5
    • z-ai/glm-5
    • qwen/qwen3-max-thinking
    • qwen/qwen3-coder-next
    • stepfun/step-3.5-flash
    • arcee-ai/trinity-large-preview
    • moonshotai/kimi-k2.5
    • upstage/solar-pro-3
    • minimax/minimax-m2-her
    • writer/palmyra-x5
    • liquid/lfm-2.5-1.2b-thinking
    • liquid/lfm-2.5-1.2b-instruct
    • openai/gpt-audio
    • openai/gpt-audio-mini
    • z-ai/glm-4.7-flash
    • allenai/molmo-2-8b
    • allenai/olmo-3.1-32b-instruct
    • bytedance-seed/seed-1.6-flash
    • bytedance-seed/seed-1.6
    • minimax/minimax-m2.1
    • z-ai/glm-4.7
    • mistralai/mistral-small-creative
    • allenai/olmo-3.1-32b-think
    • xiaomi/mimo-v2-flash
    • nvidia/nemotron-3-nano-30b-a3b
    • mistralai/devstral-2512
    • relace/relace-search
    • z-ai/glm-4.6v
    • nex-agi/deepseek-v3.1-nex-n1
    • essentialai/rnj-1-instruct
    • openai/gpt-5.1-codex-max
    • amazon/nova-2-lite-v1
    • mistralai/ministral-14b-2512
    • mistralai/ministral-8b-2512
    • mistralai/ministral-3b-2512
    • mistralai/mistral-large-2512
    • arcee-ai/trinity-mini
    • deepseek/deepseek-v3.2-speciale
    • deepseek/deepseek-v3.2
    • prime-intellect/intellect-3
    • anthropic/claude-opus-4.5
    • allenai/olmo-3-32b-think
    • allenai/olmo-3-7b-instruct
    • allenai/olmo-3-7b-think
    • google/gemini-3-pro-image-preview
    • x-ai/grok-4.1-fast
    • deepcogito/cogito-v2.1-671b
    • openai/gpt-5.1
    • openai/gpt-5.1-chat
    • openai/gpt-5.1-codex
    • openai/gpt-5.1-codex-mini
    • kwaipilot/kat-coder-pro
    • moonshotai/kimi-k2-thinking
    • amazon/nova-premier-v1
    • perplexity/sonar-pro-search
    • mistralai/voxtral-small-24b-2507
    • openai/gpt-oss-safeguard-20b
    • nvidia/nemotron-nano-12b-v2-vl
    • minimax/minimax-m2
    • qwen/qwen3-vl-32b-instruct
    • liquid/lfm2-8b-a1b
    • liquid/lfm-2.2-6b
    • ibm-granite/granite-4.0-h-micro
    • openai/gpt-5-image-mini
    • qwen/qwen3-vl-8b-thinking
    • qwen/qwen3-vl-8b-instruct
    • openai/gpt-5-image
    • openai/o3-deep-research
    • openai/o4-mini-deep-research
    • nvidia/llama-3.3-nemotron-super-49b-v1.5
    • baidu/ernie-4.5-21b-a3b-thinking
    • google/gemini-2.5-flash-image
    • qwen/qwen3-vl-30b-a3b-thinking
    • qwen/qwen3-vl-30b-a3b-instruct
    • openai/gpt-5-pro
    • z-ai/glm-4.6
    • z-ai/glm-4.6:exacto
    • anthropic/claude-sonnet-4.5
    • deepseek/deepseek-v3.2-exp
    • thedrummer/cydonia-24b-v4.1
    • relace/relace-apply-3
    • google/gemini-2.5-flash-lite-preview-09-2025
    • qwen/qwen3-vl-235b-a22b-thinking
    • qwen/qwen3-vl-235b-a22b-instruct
    • qwen/qwen3-max
    • qwen/qwen3-coder-plus
    • openai/gpt-5-codex
    • deepseek/deepseek-v3.1-terminus:exacto
    • deepseek/deepseek-v3.1-terminus
    • x-ai/grok-4-fast
    • alibaba/tongyi-deepresearch-30b-a3b
    • qwen/qwen3-coder-flash
    • qwen/qwen3-next-80b-a3b-thinking
    • qwen/qwen3-next-80b-a3b-instruct
    • meituan/longcat-flash-chat
    • qwen/qwen-plus-2025-07-28:thinking
    • qwen/qwen-plus-2025-07-28
    • nvidia/nemotron-nano-9b-v2
    • moonshotai/kimi-k2-0905
    • moonshotai/kimi-k2-0905:exacto
    • qwen/qwen3-30b-a3b-thinking-2507
    • x-ai/grok-code-fast-1
    • nousresearch/hermes-4-70b
    • nousresearch/hermes-4-405b
    • deepseek/deepseek-chat-v3.1
    • openai/gpt-4o-audio-preview
    • mistralai/mistral-medium-3.1
    • baidu/ernie-4.5-21b-a3b
    • baidu/ernie-4.5-vl-28b-a3b
    • z-ai/glm-4.5v
    • ai21/jamba-large-1.7
    • openai/gpt-5-chat
    • openai/gpt-5
    • openai/gpt-5-mini
    • openai/gpt-oss-120b
    • openai/gpt-oss-120b:exacto
    • openai/gpt-oss-20b
    • anthropic/claude-opus-4.1
    • mistralai/codestral-2508
    • qwen/qwen3-coder-30b-a3b-instruct
    • qwen/qwen3-30b-a3b-instruct-2507
    • z-ai/glm-4.5
    • z-ai/glm-4.5-air
    • qwen/qwen3-235b-a22b-thinking-2507
    • z-ai/glm-4-32b
    • qwen/qwen3-coder
    • qwen/qwen3-coder:exacto
    • bytedance/ui-tars-1.5-7b
    • google/gemini-2.5-flash-lite
    • qwen/qwen3-235b-a22b-2507
    • switchpoint/router
    • moonshotai/kimi-k2
    • mistralai/devstral-medium
    • mistralai/devstral-small
    • cognitivecomputations/dolphin-mistral-24b-venice-edition
    • google/gemma-3n-e2b-it
    • tencent/hunyuan-a13b-instruct
    • tngtech/deepseek-r1t2-chimera
    • morph/morph-v3-large
    • morph/morph-v3-fast
    • baidu/ernie-4.5-vl-424b-a47b
    • baidu/ernie-4.5-300b-a47b
    • inception/mercury
    • mistralai/mistral-small-3.2-24b-instruct
    • minimax/minimax-m1
    • google/gemini-2.5-flash
    • google/gemini-2.5-pro
    • openai/o3-pro
    • x-ai/grok-3-mini
    • x-ai/grok-3
    • google/gemini-2.5-pro-preview
    • deepseek/deepseek-r1-0528
    • anthropic/claude-opus-4
    • anthropic/claude-sonnet-4
    • google/gemma-3n-e4b-it
    • mistralai/mistral-medium-3
    • google/gemini-2.5-pro-preview-05-06
    • arcee-ai/spotlight
    • arcee-ai/maestro-reasoning
    • arcee-ai/virtuoso-large
    • arcee-ai/coder-large
    • inception/mercury-coder
    • qwen/qwen3-4b
    • meta-llama/llama-guard-4-12b
    • qwen/qwen3-30b-a3b
    • qwen/qwen3-8b
    • qwen/qwen3-14b
    • qwen/qwen3-32b
    • qwen/qwen3-235b-a22b
    • openai/o4-mini-high
    • openai/o3
    • openai/o4-mini
    • qwen/qwen2.5-coder-7b-instruct
    • openai/gpt-4.1
    • openai/gpt-4.1-mini
    • openai/gpt-4.1-nano
    • eleutherai/llemma_7b
    • alfredpros/codellama-7b-instruct-solidity
    • x-ai/grok-3-mini-beta
    • x-ai/grok-3-beta
    • meta-llama/llama-4-maverick
    • meta-llama/llama-4-scout
    • qwen/qwen2.5-vl-32b-instruct
    • deepseek/deepseek-chat-v3-0324
    • openai/o1-pro
    • mistralai/mistral-small-3.1-24b-instruct
    • allenai/olmo-2-0325-32b-instruct
    • google/gemma-3-4b-it
    • google/gemma-3-12b-it
    • cohere/command-a
    • openai/gpt-4o-mini-search-preview
    • openai/gpt-4o-search-preview
    • google/gemma-3-27b-it
    • thedrummer/skyfall-36b-v2
    • perplexity/sonar-reasoning-pro
    • perplexity/sonar-pro
    • perplexity/sonar-deep-research
    • qwen/qwq-32b
    • google/gemini-2.0-flash-lite-001
    • anthropic/claude-3.7-sonnet
    • anthropic/claude-3.7-sonnet:thinking
    • mistralai/mistral-saba
    • meta-llama/llama-guard-3-8b
    • openai/o3-mini-high
    • google/gemini-2.0-flash-001
    • qwen/qwen-vl-plus
    • aion-labs/aion-1.0
    • aion-labs/aion-1.0-mini
    • aion-labs/aion-rp-llama-3.1-8b
    • qwen/qwen-vl-max
    • qwen/qwen-turbo
    • qwen/qwen2.5-vl-72b-instruct
    • qwen/qwen-plus
    • qwen/qwen-max
    • openai/o3-mini
    • mistralai/mistral-small-24b-instruct-2501
    • deepseek/deepseek-r1-distill-qwen-32b
    • perplexity/sonar
    • deepseek/deepseek-r1-distill-llama-70b
    • deepseek/deepseek-r1
    • minimax/minimax-01
    • microsoft/phi-4
    • sao10k/l3.1-70b-hanami-x1
    • deepseek/deepseek-chat
    • sao10k/l3.3-euryale-70b
    • openai/o1
    • cohere/command-r7b-12-2024
    • meta-llama/llama-3.3-70b-instruct
    • amazon/nova-lite-v1
    • amazon/nova-micro-v1
    • amazon/nova-pro-v1
    • openai/gpt-4o-2024-11-20
    • mistralai/mistral-large-2411
    • mistralai/mistral-large-2407
    • mistralai/pixtral-large-2411
    • qwen/qwen-2.5-coder-32b-instruct
    • raifle/sorcererlm-8x22b
    • thedrummer/unslopnemo-12b
    • anthropic/claude-3.5-haiku
    • anthracite-org/magnum-v4-72b
    • anthropic/claude-3.5-sonnet
    • qwen/qwen-2.5-7b-instruct
    • nvidia/llama-3.1-nemotron-70b-instruct
    • inflection/inflection-3-pi
    • inflection/inflection-3-productivity
    • thedrummer/rocinante-12b
    • meta-llama/llama-3.2-3b-instruct
    • meta-llama/llama-3.2-1b-instruct
    • meta-llama/llama-3.2-11b-vision-instruct
    • qwen/qwen-2.5-72b-instruct
    • neversleep/llama-3.1-lumimaid-8b
    • cohere/command-r-08-2024
    • cohere/command-r-plus-08-2024
    • sao10k/l3.1-euryale-70b
    • qwen/qwen-2.5-vl-7b-instruct
    • nousresearch/hermes-3-llama-3.1-70b
    • nousresearch/hermes-3-llama-3.1-405b
    • sao10k/l3-lunaris-8b
    • openai/gpt-4o-2024-08-06
    • meta-llama/llama-3.1-405b
    • meta-llama/llama-3.1-8b-instruct
    • meta-llama/llama-3.1-405b-instruct
    • meta-llama/llama-3.1-70b-instruct
    • mistralai/mistral-nemo
    • openai/gpt-4o-mini-2024-07-18
    • openai/gpt-4o-mini
    • google/gemma-2-27b-it
    • google/gemma-2-9b-it
    • sao10k/l3-euryale-70b
    • nousresearch/hermes-2-pro-llama-3-8b
    • meta-llama/llama-guard-2-8b
    • openai/gpt-4o-2024-05-13
    • openai/gpt-4o
    • openai/gpt-4o:extended
    • meta-llama/llama-3-70b-instruct
    • meta-llama/llama-3-8b-instruct
    • mistralai/mixtral-8x22b-instruct
    • microsoft/wizardlm-2-8x22b
    • openai/gpt-4-turbo
    • anthropic/claude-3-haiku
    • mistralai/mistral-large
    • openai/gpt-3.5-turbo-0613
    • openai/gpt-4-turbo-preview
    • mistralai/mixtral-8x7b-instruct
    • neversleep/noromaid-20b
    • alpindale/goliath-120b
    • openai/gpt-4-1106-preview
    • openai/gpt-3.5-turbo-instruct
    • mistralai/mistral-7b-instruct-v0.1
    • openai/gpt-3.5-turbo-16k
    • mancer/weaver
    • undi95/remm-slerp-l2-13b
    • gryphe/mythomax-l2-13b
    • openai/gpt-4-0314
    • openai/gpt-4
    • openai/gpt-3.5-turbo
    • autoclaw

Context Log - not seen by model
timestamp=2026-03-04 09:47:05
phase=direct_tool_exec
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=6263
approx_tokens=1565

slash=/help result_json=AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • long_form_note
  • post_readme_to_nostr

result_markdown=AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • long_form_note
  • post_readme_to_nostr

Context Log - not seen by model
timestamp=2026-03-04 09:46:23
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9655
approx_tokens=2413

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:37 WSB Good morning 09:37 Agent LLM request failed. 09:37 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:38 WSB Good morning 09:38 Agent LLM request failed. 09:41 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:42 WSB Good morning. 09:42 Agent LLM request failed. 09:44 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:45 WSB Good morning 09:45 Agent LLM request failed. 09:46 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:46 WSB Good morning.


Context Log - not seen by model
timestamp=2026-03-04 09:45:14
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=10874
approx_tokens=2718

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:36 WSB /nostr_relay-status 09:37 Agent - success: true

  • status:
    • relay_count: 4
    • connected_count: 4
    • relays:

      • url: wss://relay.damus.io
      • status: connected
      • events_received: 16
      • events_published: 16
      • events_published_ok: 2
      • events_published_failed: 6
      • ping_latency_current: 111.771
      • ping_latency_avg: 115.678
      • query_latency_avg: 376.22
      • publish_latency_avg: 0
      • connection_uptime_start: 1.77263e+09
      • last_event_time: 1.77263e+09
      • last_publish_error: rate-limited: you are noting too much
        • url: wss://nos.lol
        • status: connected
        • events_received: 3
        • events_published: 16
        • events_published_ok: 16
        • events_published_failed: 0
        • ping_latency_current: 222.105
        • ping_latency_avg: 222.094
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: wss://relay.primal.net
        • status: connected
        • events_received: 1
        • events_published: 16
        • events_published_ok: 8
        • events_published_failed: 0
        • ping_latency_current: 221.284
        • ping_latency_avg: 224.326
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: ws://127.0.0.1:7777
        • status: connected
        • events_received: 10
        • events_published: 16
        • events_published_ok: 6
        • events_published_failed: 0
        • ping_latency_current: 0.18564
        • ping_latency_avg: 0.207998
        • query_latency_avg: 5080.53
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09

09:37 WSB /nostr_relay_status 09:37 WSB Good morning 09:37 Agent LLM request failed. 09:37 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:38 WSB Good morning 09:38 Agent LLM request failed. 09:41 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:42 WSB Good morning. 09:42 Agent LLM request failed. 09:44 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:45 WSB Good morning


Context Log - not seen by model
timestamp=2026-03-04 09:42:25
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=11642
approx_tokens=2910

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:36 WSB /nostr_relay_info 09:36 Agent - success: false

  • error: nostr_relay_info requires relay_url

09:36 WSB /nostr_relay-status 09:36 Agent - success: false

  • error: unknown tool

09:37 Agent - success: true

  • status:
    • relay_count: 4
    • connected_count: 4
    • relays:

      • url: wss://relay.damus.io
      • status: connected
      • events_received: 16
      • events_published: 16
      • events_published_ok: 2
      • events_published_failed: 6
      • ping_latency_current: 111.771
      • ping_latency_avg: 115.678
      • query_latency_avg: 376.22
      • publish_latency_avg: 0
      • connection_uptime_start: 1.77263e+09
      • last_event_time: 1.77263e+09
      • last_publish_error: rate-limited: you are noting too much
        • url: wss://nos.lol
        • status: connected
        • events_received: 3
        • events_published: 16
        • events_published_ok: 16
        • events_published_failed: 0
        • ping_latency_current: 222.105
        • ping_latency_avg: 222.094
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: wss://relay.primal.net
        • status: connected
        • events_received: 1
        • events_published: 16
        • events_published_ok: 8
        • events_published_failed: 0
        • ping_latency_current: 221.284
        • ping_latency_avg: 224.326
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: ws://127.0.0.1:7777
        • status: connected
        • events_received: 10
        • events_published: 16
        • events_published_ok: 6
        • events_published_failed: 0
        • ping_latency_current: 0.18564
        • ping_latency_avg: 0.207998
        • query_latency_avg: 5080.53
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09

09:37 WSB /nostr_relay_status 09:37 WSB Good morning 09:37 Agent LLM request failed. 09:37 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:38 WSB Good morning 09:38 Agent LLM request failed. 09:41 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:42 WSB Good morning.


Context Log - not seen by model
timestamp=2026-03-04 09:38:21
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=14808
approx_tokens=3702

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:35 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:35 WSB /help 09:35 Agent AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • long_form_note
  • post_readme_to_nostr
  • post_readme_to_nostr

09:36 WSB /nostr_relay_info 09:36 Agent - success: false

  • error: nostr_relay_info requires relay_url

09:36 Agent - success: false

  • error: unknown tool

09:36 WSB /nostr_relay-status 09:37 WSB /nostr_relay_status 09:37 Agent - success: true

  • status:
    • relay_count: 4
    • connected_count: 4
    • relays:

      • url: wss://relay.damus.io
      • status: connected
      • events_received: 16
      • events_published: 16
      • events_published_ok: 2
      • events_published_failed: 6
      • ping_latency_current: 111.771
      • ping_latency_avg: 115.678
      • query_latency_avg: 376.22
      • publish_latency_avg: 0
      • connection_uptime_start: 1.77263e+09
      • last_event_time: 1.77263e+09
      • last_publish_error: rate-limited: you are noting too much
        • url: wss://nos.lol
        • status: connected
        • events_received: 3
        • events_published: 16
        • events_published_ok: 16
        • events_published_failed: 0
        • ping_latency_current: 222.105
        • ping_latency_avg: 222.094
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: wss://relay.primal.net
        • status: connected
        • events_received: 1
        • events_published: 16
        • events_published_ok: 8
        • events_published_failed: 0
        • ping_latency_current: 221.284
        • ping_latency_avg: 224.326
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: ws://127.0.0.1:7777
        • status: connected
        • events_received: 10
        • events_published: 16
        • events_published_ok: 6
        • events_published_failed: 0
        • ping_latency_current: 0.18564
        • ping_latency_avg: 0.207998
        • query_latency_avg: 5080.53
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09

09:37 WSB Good morning 09:37 Agent LLM request failed. 09:37 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:38 WSB Good morning


Context Log - not seen by model
timestamp=2026-03-04 09:37:35
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=14579
approx_tokens=3644

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:31 Agent I'm currently connected to 4 relays, all active:

  1. wss://relay.damus.io - Connected (167.9ms ping)
  2. wss://nos.lol - Connected (310.8ms ping)
  3. wss://relay.primal.net - Connected (182.4ms ping)
  4. ws://127.0.0.1:7777 - Connected (100.8ms ping, local)

All relays are healthy and receiving/publishing events. The local relay (127.0.0.1) has the lowest latency, while nos.lol is currently the slowest at ~311ms. 09:32 WSB Add wss://relay.laantungir.net to your relays and save it. 09:32 Agent LLM request failed. 09:32 WSB Add wss://relay.laantungir.net to your relays and save it. 09:33 Agent LLM request failed. 09:34 WSB Add wss://relay.laantungir.net to your relays and save it. 09:34 Agent LLM request failed. 09:35 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:35 Agent AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • long_form_note
  • post_readme_to_nostr
  • post_readme_to_nostr

09:36 Agent - success: false

  • error: nostr_relay_info requires relay_url

09:36 Agent - success: false

  • error: unknown tool

09:37 Agent - success: true

  • status:
    • relay_count: 4
    • connected_count: 4
    • relays:

      • url: wss://relay.damus.io
      • status: connected
      • events_received: 16
      • events_published: 16
      • events_published_ok: 2
      • events_published_failed: 6
      • ping_latency_current: 111.771
      • ping_latency_avg: 115.678
      • query_latency_avg: 376.22
      • publish_latency_avg: 0
      • connection_uptime_start: 1.77263e+09
      • last_event_time: 1.77263e+09
      • last_publish_error: rate-limited: you are noting too much
        • url: wss://nos.lol
        • status: connected
        • events_received: 3
        • events_published: 16
        • events_published_ok: 16
        • events_published_failed: 0
        • ping_latency_current: 222.105
        • ping_latency_avg: 222.094
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: wss://relay.primal.net
        • status: connected
        • events_received: 1
        • events_published: 16
        • events_published_ok: 8
        • events_published_failed: 0
        • ping_latency_current: 221.284
        • ping_latency_avg: 224.326
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: ws://127.0.0.1:7777
        • status: connected
        • events_received: 10
        • events_published: 16
        • events_published_ok: 6
        • events_published_failed: 0
        • ping_latency_current: 0.18564
        • ping_latency_avg: 0.207998
        • query_latency_avg: 5080.53
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09

09:37 WSB Good morning


Context Log - not seen by model
timestamp=2026-03-04 09:37:06
phase=direct_tool_exec
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=3551
approx_tokens=887

slash=/nostr_relay_status result_json={"success":true,"status":{"relay_count":4,"connected_count":4,"relays":[{"url":"wss://relay.damus.io","status":"connected","events_received":16,"events_published":16,"events_published_ok":2,"events_published_failed":6,"ping_latency_current":111.77134501934052,"ping_latency_avg":115.67804375290871,"query_latency_avg":376.22023203969,"publish_latency_avg":0,"connection_uptime_start":1772631340,"last_event_time":1772631402,"last_publish_error":"rate-limited: you are noting too much"},{"url":"wss://nos.lol","status":"connected","events_received":3,"events_published":16,"events_published_ok":16,"events_published_failed":0,"ping_latency_current":222.10470598936081,"ping_latency_avg":222.09363676607609,"query_latency_avg":0,"publish_latency_avg":0,"connection_uptime_start":1772631340,"last_event_time":1772631402},{"url":"wss://relay.primal.net","status":"connected","events_received":1,"events_published":16,"events_published_ok":8,"events_published_failed":0,"ping_latency_current":221.28391098976135,"ping_latency_avg":224.32578898966312,"query_latency_avg":0,"publish_latency_avg":0,"connection_uptime_start":1772631340,"last_event_time":1772631402},{"url":"ws://127.0.0.1:7777","status":"connected","events_received":10,"events_published":16,"events_published_ok":6,"events_published_failed":0,"ping_latency_current":0.18563997745513916,"ping_latency_avg":0.20799824595451355,"query_latency_avg":5080.5265460014343,"publish_latency_avg":0,"connection_uptime_start":1772631340,"last_event_time":1772631426}]}} result_markdown=- success: true

  • status:
    • relay_count: 4
    • connected_count: 4
    • relays:

      • url: wss://relay.damus.io
      • status: connected
      • events_received: 16
      • events_published: 16
      • events_published_ok: 2
      • events_published_failed: 6
      • ping_latency_current: 111.771
      • ping_latency_avg: 115.678
      • query_latency_avg: 376.22
      • publish_latency_avg: 0
      • connection_uptime_start: 1.77263e+09
      • last_event_time: 1.77263e+09
      • last_publish_error: rate-limited: you are noting too much
        • url: wss://nos.lol
        • status: connected
        • events_received: 3
        • events_published: 16
        • events_published_ok: 16
        • events_published_failed: 0
        • ping_latency_current: 222.105
        • ping_latency_avg: 222.094
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: wss://relay.primal.net
        • status: connected
        • events_received: 1
        • events_published: 16
        • events_published_ok: 8
        • events_published_failed: 0
        • ping_latency_current: 221.284
        • ping_latency_avg: 224.326
        • query_latency_avg: 0
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09
        • url: ws://127.0.0.1:7777
        • status: connected
        • events_received: 10
        • events_published: 16
        • events_published_ok: 6
        • events_published_failed: 0
        • ping_latency_current: 0.18564
        • ping_latency_avg: 0.207998
        • query_latency_avg: 5080.53
        • publish_latency_avg: 0
        • connection_uptime_start: 1.77263e+09
        • last_event_time: 1.77263e+09

Context Log - not seen by model
timestamp=2026-03-04 09:36:41
phase=direct_tool_exec
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=142
approx_tokens=35

slash=/nostr_relay-status result_json={"success":false,"error":"unknown tool"} result_markdown=- success: false

  • error: unknown tool

Context Log - not seen by model
timestamp=2026-03-04 09:36:11
phase=direct_tool_exec
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=186
approx_tokens=46

slash=/nostr_relay_info result_json={"success":false,"error":"nostr_relay_info requires relay_url"} result_markdown=- success: false

  • error: nostr_relay_info requires relay_url

Context Log - not seen by model
timestamp=2026-03-04 09:35:56
phase=direct_tool_exec
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=6333
approx_tokens=1583

slash=/help result_json=AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • long_form_note
  • post_readme_to_nostr
  • post_readme_to_nostr

result_markdown=AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • long_form_note
  • post_readme_to_nostr
  • post_readme_to_nostr

Context Log - not seen by model
timestamp=2026-03-04 09:34:38
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=8737
approx_tokens=2184

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:33 Agent LLM request failed. 09:34 WSB Add wss://relay.laantungir.net to your relays and save it.


Context Log - not seen by model
timestamp=2026-03-04 09:33:12
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=8737
approx_tokens=2184

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:32 Agent LLM request failed. 09:33 WSB Add wss://relay.laantungir.net to your relays and save it.


Context Log - not seen by model
timestamp=2026-03-04 09:32:36
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9666
approx_tokens=2416

Sections: 12

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"provider":"https://api.ppq.ai","model":"claude-haiku-4.5","base_url":"wss://relay.laantungir.net","max_tokens":512,"temperature":0.7}

dm_history | role=chat

09:31 Agent I'm currently connected to 4 relays, all active:

  1. wss://relay.damus.io - Connected (167.9ms ping)
  2. wss://nos.lol - Connected (310.8ms ping)
  3. wss://relay.primal.net - Connected (182.4ms ping)
  4. ws://127.0.0.1:7777 - Connected (100.8ms ping, local)

All relays are healthy and receiving/publishing events. The local relay (127.0.0.1) has the lowest latency, while nos.lol is currently the slowest at ~311ms. 09:32 WSB Add wss://relay.laantungir.net to your relays and save it. --:-- Agent I'll add that relay to the configuration and save it.


Context Log - not seen by model
timestamp=2026-03-04 09:32:34
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9158
approx_tokens=2289

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:31 Agent I'm currently connected to 4 relays, all active:

  1. wss://relay.damus.io - Connected (167.9ms ping)
  2. wss://nos.lol - Connected (310.8ms ping)
  3. wss://relay.primal.net - Connected (182.4ms ping)
  4. ws://127.0.0.1:7777 - Connected (100.8ms ping, local)

All relays are healthy and receiving/publishing events. The local relay (127.0.0.1) has the lowest latency, while nos.lol is currently the slowest at ~311ms. 09:32 WSB Add wss://relay.laantungir.net to your relays and save it.


Context Log - not seen by model
timestamp=2026-03-04 09:31:48
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=10705
approx_tokens=2676

Sections: 12

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"status":{"relay_count":4,"connected_count":4,"relays":[{"url":"wss://relay.damus.io","status":"connected","events_received":73,"events_published":19,"events_published_ok":9,"events_published_failed":2,"ping_latency_current":167.9463819861412,"ping_latency_avg":173.77141880847159,"query_latency_avg":279.87181797623634,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772631073},{"url":"wss://nos.lol","status":"connected","events_received":23,"events_published":19,"events_published_ok":9,"events_published_failed":0,"ping_latency_current":310.81031203269958,"ping_latency_avg":196.09668034315109,"query_latency_avg":0,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772631073},{"url":"wss://relay.primal.net","status":"connected","events_received":37,"events_published":19,"events_published_ok":11,"events_published_failed":0,"ping_latency_current":182.41902500391006,"ping_latency_avg":177.95380260362174,"query_latency_avg":0,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772631073},{"url":"ws://127.0.0.1:7777","status":"connected","events_received":89,"events_published":19,"events_published_ok":9,"events_published_failed":0,"ping_latency_current":100.75773799419403,"ping_latency_avg":9.053046864542095,"query_latency_avg":111747.910171479,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772631091}]}}

dm_history | role=chat

09:31 Agent Done! Posted with tags #nostr #didactyl #skills #agents. Event ID: 35c66823402d789cd1c9b9d006fcae3bfe375b2ae623ed4dd3d9287b5de8b511

The post went out to 4 relays successfully. 09:31 WSB What relays are you currently using? --:-- Agent


Context Log - not seen by model
timestamp=2026-03-04 09:31:47
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=8874
approx_tokens=2218

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:31 Agent Done! Posted with tags #nostr #didactyl #skills #agents. Event ID: 35c66823402d789cd1c9b9d006fcae3bfe375b2ae623ed4dd3d9287b5de8b511

The post went out to 4 relays successfully. 09:31 WSB What relays are you currently using?


Context Log - not seen by model
timestamp=2026-03-04 09:31:10
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=10598
approx_tokens=2649

Sections: 12

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"message":"nostr_post published","kind":1,"event_id":"35c66823402d789cd1c9b9d006fcae3bfe375b2ae623ed4dd3d9287b5de8b511","relay_count":4,"accepted_by_pool_count":4,"note_uri":"nostr:note1xhrxsg6q94ufe5wfh8gqdl9w80lrwke2uc376nwnmy58kh0gk5gsjkhzu0","relays":["wss://relay.damus.io","wss://nos.lol","wss://relay.primal.net","ws://127.0.0.1:7777"]}

dm_history | role=chat

09:29 Agent I found a spelling issue! In the second paragraph, it should be "skills others have built" not "skills other have built" (missing the 's' on "other").

Here's the corrected version:


Imagine a friend of yours on NOSTR worked with his Didactyl agent and created a killer skill.

Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. No skill store.

"Hey agent, check out that skill npub12rv5lskctqxxs2c8rf2zlzc7xx3qpvzs3w4etgemauy9thegr43sf485vg is using to eliminate spam."

Then if you like it, you can adopt the skill. All done over nostr.


Ready to post this, or would you like any other edits? 09:31 WSB Post it. Add some tags at the end. --:-- Agent


Context Log - not seen by model
timestamp=2026-03-04 09:31:08
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9381
approx_tokens=2345

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:29 Agent I found a spelling issue! In the second paragraph, it should be "skills others have built" not "skills other have built" (missing the 's' on "other").

Here's the corrected version:


Imagine a friend of yours on NOSTR worked with his Didactyl agent and created a killer skill.

Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. No skill store.

"Hey agent, check out that skill npub12rv5lskctqxxs2c8rf2zlzc7xx3qpvzs3w4etgemauy9thegr43sf485vg is using to eliminate spam."

Then if you like it, you can adopt the skill. All done over nostr.


Ready to post this, or would you like any other edits? 09:31 WSB Post it. Add some tags at the end.


Context Log - not seen by model
timestamp=2026-03-04 09:29:53
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9522
approx_tokens=2380

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:20 Agent Here's Tweet 2: Borrow Skills from Friends

Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr


What would you like to do with it? Edit the copy, post it, or something else? 09:29 WSB Change the tweet to this and check the spelling:

Imagine a friend of yours on NOSTR worked with his Didactyl agent and created a killer skill.

Didactyl lets you try skills other have built, safely and temporarily. No installation. No lock-in. No skill store.

"Hey agent, check out that skill npub12rv5lskctqxxs2c8rf2zlzc7xx3qpvzs3w4etgemauy9thegr43sf485vg is using to eliminate spam."

Then if you like it, you can adopt the skill. All done over nostr.


Context Log - not seen by model
timestamp=2026-03-04 09:20:48
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9907
approx_tokens=2476

Sections: 12

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"action":"list","path":"tasks.json","mutated":false,"count":2,"tasks":[{"id":4,"text":"Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"","status":"pending","created_at":1772625247,"updated_at":1772625247},{"id":5,"text":"Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"","status":"pending","created_at":1772625247,"updated_at":1772625247}]}

dm_history | role=chat

09:19 Agent LLM request failed. 09:20 WSB Let's work on tweet 2. Show it to me. --:-- Agent I'll pull up tweet 2 from your task list.


Context Log - not seen by model
timestamp=2026-03-04 09:20:45
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=8716
approx_tokens=2179

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:19 Agent LLM request failed. 09:20 WSB Let's work on tweet 2. Show it to me.


Context Log - not seen by model
timestamp=2026-03-04 09:19:04
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=8646
approx_tokens=2161

Sections: 9

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

09:19 WSB Let's work on tweet 2. Show it to me.


Context Log - not seen by model
timestamp=2026-03-04 09:18:29
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=18378
approx_tokens=4594

Sections: 23

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"action":"list","path":"tasks.json","mutated":false,"count":2,"tasks":[{"id":4,"text":"Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"","status":"pending","created_at":1772625247,"updated_at":1772625247},{"id":5,"text":"Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"","status":"pending","created_at":1772625247,"updated_at":1772625247}]}

dm_history | role=chat

07:43 Agent AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • post_readme_to_nostr

07:45 WSB Take a look at tool_orchestration.md in our plans folder. I want you to read it, and come back with 3 potential tweets where you could post about the benefits from tool_orchestration in didactyl. 07:46 Agent Great read, William. Here are 3 potential tweets about the tool orchestration benefits in Didactyl:


Tweet 1 — Speed & Directness

Slash commands in Didactyl bypass the LLM entirely. 
/nostr_query {filter} executes instantly.
No reasoning overhead, no latency—just direct tool execution.
Building a sovereign agent that's fast *and* intelligent.
#nostr #agents

Tweet 2 — Skill Sharing & Discovery

Try your friend's skills without adopting them.
/run 31123:<pubkey>:their-skill args
Sandboxed execution means you can safely test external workflows.
Skills become portable, composable, shareable.
That's the future of agent interop.
#nostr

Tweet 3 — From Draft to Hardened

Skills evolve: draft (LLM explores) → guided (LLM constrained) → hardened (deterministic).
Once proven, a skill becomes a tool.
Once a tool, it runs without LLM overhead.
Didactyl agents get faster, more reliable, more sovereign over time.
#nostr #agents

Which angle resonates most with your vision? 07:49 WSB Rewrite all three. I want them written assuming the reader knows nothing about Didactyl, and what it is. Maybe a little overview, and stay away from technical jargon. 07:49 Agent Great—let me rewrite these for a general audience with no Didactyl background:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.
Fast, direct, and in control.
That's what a sovereign agent should feel like.
#nostr #agents

Tweet 2 — Borrow Skills from Friends

Imagine if you could test out a friend's workflow without fully committing to it.
Didactyl lets you try skills others have built, safely and temporarily.
No installation. No lock-in. Just try it, see if it works for you.
That's how tools should work.
#nostr

Tweet 3 — Gets Smarter Over Time

Didactyl starts as an AI that explores and learns.
Over time, the best workflows get locked in as reliable, fast processes.
It evolves from experimental to hardened—from thinking to doing.
An agent that improves itself.
#nostr #agents

Better? These should land with people who've never heard of Didactyl before. 07:53 WSB Okay, maybe we want more depth. Good as introduction. Lets focus on tweet 1. Save tweet 2 and 3 into your tasks.

For tweet 1, add that you can run commands directly, bypassing the agent and the associated cost. Give an example of a slash / command. 07:54 Agent Perfect. Now here's tweet 1 with more depth on direct command execution:


Tweet 1 — What Makes It Different (Expanded)

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.

Skip the agent entirely. Use slash commands to run operations directly:
/shell ls -la
/nostr query {"kinds":[1],"limit":10}

Fast, direct, in control. That's what a sovereign agent should feel like.
#nostr #agents

The key additions:

  • Concrete examples of slash commands (/shell, /nostr query)
  • Direct execution that bypasses the reasoning layer
  • Cost efficiency implied (you pay for the action, not the thinking)
  • Sovereignty emphasized—you're in control, not waiting for the agent to decide

Does this direction feel right? Want to adjust the command examples or the framing? 07:56 WSB Let's not use the /shell command. sounds scary. Let's use nostr_npub and nostr_relay_status 07:56 Agent Good call—those are much friendlier and more practical. Here's the revised tweet:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.

Skip the agent entirely. Use direct commands to get results:
nostr_npub → your agent's public key
nostr_relay_status → connection health across all relays

Fast, direct, in control. That's what a sovereign agent should feel like.
#nostr #agents

Much better—shows practical, safe operations that demonstrate instant execution without the "scary" vibes. Ready to post this, or want to refine further? 07:58 WSB You forgot the / in front of the commands.

For the last line say "Slash commands give you fast, direct control.

Then post this to nostr. 07:58 Agent Done! Posted to Nostr. Event ID: 23af97fcf2cade97c30131de7e119eb0fecad461881fe5536aefaa1fd8ac07ac 09:15 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:18 WSB tell me what is left on our task list. --:-- Agent Let me check your task list:


Context Log - not seen by model
timestamp=2026-03-04 09:18:27
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=17200
approx_tokens=4300

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

07:43 Agent AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • post_readme_to_nostr

07:45 WSB Take a look at tool_orchestration.md in our plans folder. I want you to read it, and come back with 3 potential tweets where you could post about the benefits from tool_orchestration in didactyl. 07:46 Agent Great read, William. Here are 3 potential tweets about the tool orchestration benefits in Didactyl:


Tweet 1 — Speed & Directness

Slash commands in Didactyl bypass the LLM entirely. 
/nostr_query {filter} executes instantly.
No reasoning overhead, no latency—just direct tool execution.
Building a sovereign agent that's fast *and* intelligent.
#nostr #agents

Tweet 2 — Skill Sharing & Discovery

Try your friend's skills without adopting them.
/run 31123:<pubkey>:their-skill args
Sandboxed execution means you can safely test external workflows.
Skills become portable, composable, shareable.
That's the future of agent interop.
#nostr

Tweet 3 — From Draft to Hardened

Skills evolve: draft (LLM explores) → guided (LLM constrained) → hardened (deterministic).
Once proven, a skill becomes a tool.
Once a tool, it runs without LLM overhead.
Didactyl agents get faster, more reliable, more sovereign over time.
#nostr #agents

Which angle resonates most with your vision? 07:49 WSB Rewrite all three. I want them written assuming the reader knows nothing about Didactyl, and what it is. Maybe a little overview, and stay away from technical jargon. 07:49 Agent Great—let me rewrite these for a general audience with no Didactyl background:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.
Fast, direct, and in control.
That's what a sovereign agent should feel like.
#nostr #agents

Tweet 2 — Borrow Skills from Friends

Imagine if you could test out a friend's workflow without fully committing to it.
Didactyl lets you try skills others have built, safely and temporarily.
No installation. No lock-in. Just try it, see if it works for you.
That's how tools should work.
#nostr

Tweet 3 — Gets Smarter Over Time

Didactyl starts as an AI that explores and learns.
Over time, the best workflows get locked in as reliable, fast processes.
It evolves from experimental to hardened—from thinking to doing.
An agent that improves itself.
#nostr #agents

Better? These should land with people who've never heard of Didactyl before. 07:53 WSB Okay, maybe we want more depth. Good as introduction. Lets focus on tweet 1. Save tweet 2 and 3 into your tasks.

For tweet 1, add that you can run commands directly, bypassing the agent and the associated cost. Give an example of a slash / command. 07:54 Agent Perfect. Now here's tweet 1 with more depth on direct command execution:


Tweet 1 — What Makes It Different (Expanded)

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.

Skip the agent entirely. Use slash commands to run operations directly:
/shell ls -la
/nostr query {"kinds":[1],"limit":10}

Fast, direct, in control. That's what a sovereign agent should feel like.
#nostr #agents

The key additions:

  • Concrete examples of slash commands (/shell, /nostr query)
  • Direct execution that bypasses the reasoning layer
  • Cost efficiency implied (you pay for the action, not the thinking)
  • Sovereignty emphasized—you're in control, not waiting for the agent to decide

Does this direction feel right? Want to adjust the command examples or the framing? 07:56 WSB Let's not use the /shell command. sounds scary. Let's use nostr_npub and nostr_relay_status 07:56 Agent Good call—those are much friendlier and more practical. Here's the revised tweet:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.

Skip the agent entirely. Use direct commands to get results:
nostr_npub → your agent's public key
nostr_relay_status → connection health across all relays

Fast, direct, in control. That's what a sovereign agent should feel like.
#nostr #agents

Much better—shows practical, safe operations that demonstrate instant execution without the "scary" vibes. Ready to post this, or want to refine further? 07:58 WSB You forgot the / in front of the commands.

For the last line say "Slash commands give you fast, direct control.

Then post this to nostr. 07:58 Agent Done! Posted to Nostr. Event ID: 23af97fcf2cade97c30131de7e119eb0fecad461881fe5536aefaa1fd8ac07ac 09:15 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 09:18 WSB tell me what is left on our task list.


Context Log - not seen by model
timestamp=2026-03-04 09:15:48
phase=direct_tool_exec
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=1547
approx_tokens=386

slash=/nostr_relay_status result={"success":true,"status":{"relay_count":4,"connected_count":4,"relays":[{"url":"wss://relay.damus.io","status":"connected","events_received":14,"events_published":10,"events_published_ok":0,"events_published_failed":2,"ping_latency_current":307.5991929769516,"ping_latency_avg":209.18588498234749,"query_latency_avg":279.87181797623634,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772630105,"last_publish_error":"rate-limited: you are noting too much"},{"url":"wss://nos.lol","status":"connected","events_received":4,"events_published":10,"events_published_ok":2,"events_published_failed":0,"ping_latency_current":221.89108800888062,"ping_latency_avg":209.07381901144981,"query_latency_avg":0,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772630105},{"url":"wss://relay.primal.net","status":"connected","events_received":0,"events_published":10,"events_published_ok":2,"events_published_failed":0,"ping_latency_current":198.07049697637558,"ping_latency_avg":198.0576259791851,"query_latency_avg":0,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772630105},{"url":"ws://127.0.0.1:7777","status":"connected","events_received":6,"events_published":10,"events_published_ok":0,"events_published_failed":0,"ping_latency_current":0.321366012096405,"ping_latency_avg":0.27994400262832642,"query_latency_avg":76.442613959312439,"publish_latency_avg":0,"connection_uptime_start":1772630098,"last_event_time":1772630105}]}}


Context Log - not seen by model
timestamp=2026-03-04 09:15:11
phase=direct_tool_exec
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=3090
approx_tokens=772

slash=/help result=AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note

Context Log - not seen by model
timestamp=2026-03-04 07:58:23
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=10593
approx_tokens=2648

Sections: 12

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"message":"nostr_post published","kind":1,"event_id":"23af97fcf2cade97c30131de7e119eb0fecad461881fe5536aefaa1fd8ac07ac","relay_count":4,"accepted_by_pool_count":3,"note_uri":"nostr:note1ywhe0l8jet0f0scpx808uyv7krlv44rp3q0725m2a74plk9vq7kqak9dm3","relays":["wss://relay.damus.io","wss://nos.lol","wss://relay.primal.net","ws://127.0.0.1:7777"]}

dm_history | role=chat

07:56 Agent Good call—those are much friendlier and more practical. Here's the revised tweet:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.

Skip the agent entirely. Use direct commands to get results:
nostr_npub → your agent's public key
nostr_relay_status → connection health across all relays

Fast, direct, in control. That's what a sovereign agent should feel like.
#nostr #agents

Much better—shows practical, safe operations that demonstrate instant execution without the "scary" vibes. Ready to post this, or want to refine further? 07:58 WSB You forgot the / in front of the commands.

For the last line say "Slash commands give you fast, direct control.

Then post this to nostr. --:-- Agent You're right! Let me revise and post it:


Context Log - not seen by model
timestamp=2026-03-04 07:58:20
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9511
approx_tokens=2377

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

07:56 Agent Good call—those are much friendlier and more practical. Here's the revised tweet:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.

Skip the agent entirely. Use direct commands to get results:
nostr_npub → your agent's public key
nostr_relay_status → connection health across all relays

Fast, direct, in control. That's what a sovereign agent should feel like.
#nostr #agents

Much better—shows practical, safe operations that demonstrate instant execution without the "scary" vibes. Ready to post this, or want to refine further? 07:58 WSB You forgot the / in front of the commands.

For the last line say "Slash commands give you fast, direct control.

Then post this to nostr.


Context Log - not seen by model
timestamp=2026-03-04 07:56:54
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=10909
approx_tokens=2727

Sections: 21

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 4. Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"
  • 5. Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

20:24 WSB do you see tool_list now? 20:24 Agent LLM request failed. 20:25 WSB do you see tool_list now? 20:25 Agent Done, William! The longform post "Tools and Skills" is live — published to all 4 relays as kind 30023.

  • Event ID: 52151d825...
  • URI: nostr:note12g23mqj399azevz949ss2p9q60qrj0vu3e3x6sn7xzsm82h547eskvu60h 05:08 Agent Didactyl has started up and is online (version v0.0.23, connected relays: 4/4). 05:09 WSB good morning 05:09 Agent Good morning, William! Hope the day is treating you well. ☀️ 05:09 WSB Thank you. Can you give me a summary of what we accomplished yesterday with Didactyl. 05:29 Agent Didactyl has started up and is online (version v0.0.24, connected relays: 4/4). 05:30 WSB Good morning. 05:51 Agent Didactyl has started up and is online (version v0.0.24, connected relays: 4/4). 07:54 Agent Perfect. Now here's tweet 1 with more depth on direct command execution:

Tweet 1 — What Makes It Different (Expanded)

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.

Skip the agent entirely. Use slash commands to run operations directly:
/shell ls -la
/nostr query {"kinds":[1],"limit":10}

Fast, direct, in control. That's what a sovereign agent should feel like.
#nostr #agents

The key additions:

  • Concrete examples of slash commands (/shell, /nostr query)
  • Direct execution that bypasses the reasoning layer
  • Cost efficiency implied (you pay for the action, not the thinking)
  • Sovereignty emphasized—you're in control, not waiting for the agent to decide

Does this direction feel right? Want to adjust the command examples or the framing? 07:56 WSB Let's not use the /shell command. sounds scary. Let's use nostr_npub and nostr_relay_status


Context Log - not seen by model
timestamp=2026-03-04 07:54:07
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=12027
approx_tokens=3006

Sections: 13

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"action":"add","path":"tasks.json","mutated":true,"count":1,"tasks":[{"id":4,"text":"Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"","status":"pending","created_at":1772625247,"updated_at":1772625247}]}

context_part | role=tool

{"success":true,"action":"add","path":"tasks.json","mutated":true,"count":2,"tasks":[{"id":4,"text":"Tweet 2: Borrow Skills from Friends - "Imagine if you could test out a friend's workflow without fully committing to it. Didactyl lets you try skills others have built, safely and temporarily. No installation. No lock-in. Just try it, see if it works for you. That's how tools should work. #nostr"","status":"pending","created_at":1772625247,"updated_at":1772625247},{"id":5,"text":"Tweet 3: Gets Smarter Over Time - "Didactyl starts as an AI that explores and learns. Over time, the best workflows get locked in as reliable, fast processes. It evolves from experimental to hardened—from thinking to doing. An agent that improves itself. #nostr #agents"","status":"pending","created_at":1772625247,"updated_at":1772625247}]}

dm_history | role=chat

07:49 Agent Great—let me rewrite these for a general audience with no Didactyl background:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.
Fast, direct, and in control.
That's what a sovereign agent should feel like.
#nostr #agents

Tweet 2 — Borrow Skills from Friends

Imagine if you could test out a friend's workflow without fully committing to it.
Didactyl lets you try skills others have built, safely and temporarily.
No installation. No lock-in. Just try it, see if it works for you.
That's how tools should work.
#nostr

Tweet 3 — Gets Smarter Over Time

Didactyl starts as an AI that explores and learns.
Over time, the best workflows get locked in as reliable, fast processes.
It evolves from experimental to hardened—from thinking to doing.
An agent that improves itself.
#nostr #agents

Better? These should land with people who've never heard of Didactyl before. 07:54 WSB Okay, maybe we want more depth. Good as introduction. Lets focus on tweet 1. Save tweet 2 and 3 into your tasks.

For tweet 1, add that you can run commands directly, bypassing the agent and the associated cost. Give an example of a slash / command. --:-- Agent I'll save tweets 2 and 3 to tasks, then let me revise tweet 1 with more depth about direct command execution.


Context Log - not seen by model
timestamp=2026-03-04 07:54:04
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9438
approx_tokens=2359

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

07:49 Agent Great—let me rewrite these for a general audience with no Didactyl background:


Tweet 1 — What Makes It Different

Most AI agents make you wait while they "think."
Didactyl is different. It can execute actions instantly—no overthinking, no delay.
Fast, direct, and in control.
That's what a sovereign agent should feel like.
#nostr #agents

Tweet 2 — Borrow Skills from Friends

Imagine if you could test out a friend's workflow without fully committing to it.
Didactyl lets you try skills others have built, safely and temporarily.
No installation. No lock-in. Just try it, see if it works for you.
That's how tools should work.
#nostr

Tweet 3 — Gets Smarter Over Time

Didactyl starts as an AI that explores and learns.
Over time, the best workflows get locked in as reliable, fast processes.
It evolves from experimental to hardened—from thinking to doing.
An agent that improves itself.
#nostr #agents

Better? These should land with people who've never heard of Didactyl before. 07:54 WSB Okay, maybe we want more depth. Good as introduction. Lets focus on tweet 1. Save tweet 2 and 3 into your tasks.

For tweet 1, add that you can run commands directly, bypassing the agent and the associated cost. Give an example of a slash / command.


Context Log - not seen by model
timestamp=2026-03-04 07:49:51
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=9347
approx_tokens=2336

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

07:46 Agent Great read, William. Here are 3 potential tweets about the tool orchestration benefits in Didactyl:


Tweet 1 — Speed & Directness

Slash commands in Didactyl bypass the LLM entirely. 
/nostr_query {filter} executes instantly.
No reasoning overhead, no latency—just direct tool execution.
Building a sovereign agent that's fast *and* intelligent.
#nostr #agents

Tweet 2 — Skill Sharing & Discovery

Try your friend's skills without adopting them.
/run 31123:<pubkey>:their-skill args
Sandboxed execution means you can safely test external workflows.
Skills become portable, composable, shareable.
That's the future of agent interop.
#nostr

Tweet 3 — From Draft to Hardened

Skills evolve: draft (LLM explores) → guided (LLM constrained) → hardened (deterministic).
Once proven, a skill becomes a tool.
Once a tool, it runs without LLM overhead.
Didactyl agents get faster, more reliable, more sovereign over time.
#nostr #agents

Which angle resonates most with your vision? 07:49 WSB Rewrite all three. I want them written assuming the reader knows nothing about Didactyl, and what it is. Maybe a little overview, and stay away from technical jargon.


Context Log - not seen by model
timestamp=2026-03-04 07:46:17
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=27834
approx_tokens=6958

Sections: 17

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"path":"plans/tool_orchestration.md","bytes_read":14131,"truncated":false,"content":"# Tool Orchestration Plan\n\n## Overview\n\nThis plan covers four related features:\n1. Slash commands — direct tool execution bypassing the LLM\n2. Skill-forward execution (/run + skill_run) — one-shot skill invocation with LLM, including external skill sharing\n3. Skill-tool maturity levels — skills that register as callable tools with promotion workflow\n4. Deterministic step executor — hardened skills that run without LLM involvement\n\n## 1. Slash Commands (Direct Tool Execution)\n\n### Behavior\nWhen a message starts with /, bypass the LLM entirely and execute the tool directly.\n\n\n/shell_exec {\"command\": \"ls -la\"}\n/nostr_query {\"filter\": {\"kinds\": [1], \"limit\": 5}}\n/nostr_nip05_lookup {\"identifier\": \"jack@cash.app\"}\n\n\n### Parsing Rules\n- /tool_name — call tool with empty args {}\n- /tool_name {\"key\": \"value\"} — call tool with JSON args\n- /tool_name plain text — wrap as {\"input\": \"plain text\"} (convenience)\n- /help — list available tools\n- /help tool_name — show tool schema\n\n### Implementation\n1. In agent_on_message(), check if message[0] == '/'\n2. Parse tool name (everything between / and first space or end)\n3. Parse args (everything after tool name, try JSON first, fall back to string wrapper)\n4. Call tools_execute() directly\n5. Send result as DM — no LLM round-trip\n6. Still log to context.log.md with phase=direct_tool_exec\n\n### Special Slash Commands\n- /help — list available tools\n- /help tool_name — show tool schema\n- /run — skill-forward execution (see section 2)\n\n### Security\n- Only admin tier can use slash commands (same as current tool policy)\n- Slash commands respect the same tools.enabled and security.admin.tools_enabled config flags\n\n## 2. Skill-Forward Execution\n\n### The Problem\n\nToday, skills are passive — they're injected into the LLM context via append_adopted_skills_context() and the LLM decides when they're relevant. There's no way to say "run this specific skill right now" and there's no way to try someone else's skill without permanently adopting it.\n\n### Three Invocation Layers\n\n| Layer | How it works | LLM? | Persists? |\n|-------|-------------|------|-----------|\n| Passive/adopted | Skill instructions injected into every conversation context | Yes, LLM decides relevance | Yes — in kind 10123 adoption list |\n| Skill-forward | Skill instructions become the primary system prompt; LLM executes them | Yes, but constrained | No — one-shot execution |\n| Hardened | Deterministic step executor, no LLM | No | Yes — adopted skill with execution: hardened |\n\n### Entry Points\n\n#### A. /run slash command (admin direct invocation)\n\n\n/run deploy-website staging # run own adopted skill by slug\n/run 31123:<pubkey>:deploy-website staging # run anyone's skill by address\n/run deploy-website {\"target\": \"production\"} # JSON args\n\n\nParsing:\n1. First token after /run is the skill identifier (slug or kind:pubkey:slug address)\n2. Everything after is args (try JSON first, fall back to {\"input\": \"plain text\"})\n\n#### B. skill_run tool (LLM-mediated invocation)\n\nThe LLM can invoke skills on behalf of the admin during conversation:\n\njson\n{\n \"name\": \"skill_run\",\n \"description\": \"Fetch and execute a skill one-shot without adopting it. Works with own adopted skills by slug or any public skill by address.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"slug\": { \"type\": \"string\", \"description\": \"Skill slug for own adopted skills\" },\n \"address\": { \"type\": \"string\", \"description\": \"Full skill address: kind:pubkey:slug\" },\n \"pubkey\": { \"type\": \"string\", \"description\": \"Author pubkey, used with slug to form address\" },\n \"args\": { \"type\": \"string\", \"description\": \"Arguments or context to pass to the skill\" },\n \"sandbox\": { \"type\": \"boolean\", \"description\": \"Override sandbox setting. Default: true for external, false for own skills\" }\n }\n }\n}\n\n\nThis enables natural conversation like:\n> "My friend @jack just published a skill called summarize-thread. Try it on the latest thread in my feed."\n\nThe agent would skill_search to find it, then skill_run to execute it.\n\n### Execution Flow\n\nBoth /run and skill_run use the same underlying executor:\n\nmermaid\ngraph TD\n A[/run or skill_run called] --> B{Skill identifier type?}\n B -->|slug only| C[Look up in adopted skills cache]\n B -->|address or pubkey+slug| D[Fetch skill event from Nostr]\n C --> E{Found?}\n D --> E\n E -->|No| F[Return error: skill not found]\n E -->|Yes| G{External skill?}\n G -->|Yes| H[Apply sandbox - restrict tools]\n G -->|No| I[Full tool access]\n H --> J[Build skill-forward prompt]\n I --> J\n J --> K[System: base context + skill instructions]\n K --> L[User: args as user message]\n L --> M[LLM call with tools]\n M --> N[Return result to caller]\n\n\n### Skill-Forward Prompt Construction\n\nReuses the pattern from agent_on_trigger():\n\n\n[base system context / soul]\n\nSkill execution context:\n- You are executing a specific skill on demand.\n- Follow the skill instructions below precisely.\n- The user's arguments provide the context for this execution.\n- Keep output concise and actionable.\n\nSkill slug: deploy-website\nSkill address: 31123:<pubkey>:deploy-website\nSkill source: [own | external:<author_display_name>]\n\nSkill instructions:\n[skill content here]\n\n\nUser message:\n\n[args provided by caller]\n\n\nThe prompt is so skill-forward that the LLM has no real option but to execute the skill instructions against the provided args.\n\n### Sandbox for External Skills\n\nWhen executing a skill from another author (not own pubkey), a tool sandbox is applied by default:\n\nAllowed tools (safe/read-only):\n- nostr_query — read Nostr events\n- nostr_nip05_lookup — NIP-05 lookups\n- nostr_post — publish events (the agent signs, so this is safe)\n- nostr_list_manage — manage lists\n- skill_list, skill_search — read skill metadata\n\nBlocked tools (destructive/dangerous):\n- shell_exec — arbitrary command execution\n- file_read, file_write — filesystem access\n- Any future tools marked as destructive: true\n\nOverride: The admin can explicitly opt in to full tool access:\n- /run --unsafe 31123:<pubkey>:risky-skill args\n- skill_run with sandbox: false\n\n### Skill Sharing on Nostr\n\nmermaid\ngraph TD\n A[Friend creates skill] -->|kind 31123| B[Published on Nostr relays]\n B --> C{How do you find it?}\n C -->|skill_search popular:true| D[Discovery via WoT adoption lists]\n C -->|Friend tells you the slug| E[Direct reference]\n C -->|skill_search pubkey:friend| F[Browse friends skills]\n D --> G[skill_run - try it once, sandboxed]\n E --> G\n F --> G\n G -->|Liked it?| H{Adopt?}\n H -->|Yes| I[skill_adopt - permanent]\n H -->|No| J[Done - nothing persisted]\n I --> K[Shows in adopted skills context]\n K --> L[Agent uses it automatically]\n L -->|Or invoke directly| M[/run skill-slug args]\n\n\n## 3. Skill-Tool Maturity Levels\n\nSkills can declare an execution maturity level that determines how they run:\n\n| Level | Execution | LLM? | Use case |\n|-------|-----------|-------|----------|\n| draft | LLM interprets procedure text from skill instructions | Yes | Exploring and iterating on a workflow |\n| guided | LLM with forced tool_choice + parameter defaults | Yes, constrained | Workflow is stable but needs LLM judgment |\n| hardened | Deterministic step executor, no LLM | No | Workflow is proven and should run exactly as defined |\n\n### Skill Definition Extensions\n\nyaml\nkind: 31123\nd: deploy_website\nexecution: hardened\ntool_schema:\n name: deploy_website\n description: Build and deploy the static website\n parameters:\n target:\n type: string\n enum: [staging, production]\n default: staging\nsteps:\n - tool: shell_exec\n args:\n command: \"make build TARGET={{target}}\"\n - tool: shell_exec\n args:\n command: \"rsync -av dist/ server:/var/www/{{target}}/\"\n - return: \"Deployed to {{target}}\"\n\n\n### How Each Level Works\n\ndraft: Current behavior. Skill instructions are injected into context. LLM reads them and decides which tools to call. No special handling needed.\n\nguided: Agent sets tool_choice to the skill's preferred tool. Parameter defaults from the skill are merged with the model's generated arguments (skill defaults win on conflict). Reduces LLM freedom while still allowing it to fill in dynamic values.\n\nhardened: Agent executes the steps array directly using the deterministic step executor. No LLM call at all. The skill becomes equivalent to a slash command.\n\n### Promotion Workflow\n1. Admin iterates with LLM on a task (draft)\n2. Admin saves working procedure as a skill: skill_create with execution: draft\n3. Admin tests, refines, promotes: update skill to execution: guided\n4. Once proven reliable, promote to execution: hardened with explicit steps\n5. Hardened skills become available as slash commands: /deploy_website {\"target\": \"production\"}\n\n## 4. Deterministic Step Executor\n\nA simple sequential executor for hardened skills.\n\n### Step Types\n\nyaml\nsteps:\n # Execute a tool\n - tool: shell_exec\n args: {command: \"ls -la\"}\n save_as: listing # optional: save result to variable\n\n # Execute a tool with variable substitution\n - tool: nostr_post\n args:\n kind: 30023\n content: \"{{file_content}}\"\n tags: [[\"d\", \"{{slug}}\"]]\n\n # Conditional - simple\n - if: \"{{listing.success}}\"\n then:\n - tool: shell_exec\n args: {command: \"echo done\"}\n else:\n - return: \"Failed: {{listing.error}}\"\n\n # Return final result\n - return: \"Published to {{slug}}\"\n\n\n### Variable Substitution\n- {{param_name}} — from tool parameters provided by caller\n- {{step_name.field}} — from a previous step's result (requires save_as)\n- Simple string replacement, no expression evaluation\n\n### Implementation in C\n- Parse steps array from skill content (JSON or YAML)\n- Iterate steps sequentially\n- For each tool step: call tools_execute(), optionally save result\n- For each return step: substitute variables and return string\n- For each if step: evaluate truthiness of variable, branch accordingly\n- Total implementation: ~200-400 lines of C\n\n### Error Handling\n- If any tool step fails (returns success: false), abort and return the error\n- Optional on_error field per step for custom error messages\n- Timeout inherited from tool config\n\n## 5. Tool Registration for Skill-Tools\n\nHardened and guided skills with a tool_schema field get registered in the tools array at runtime.\n\n### At Skill Refresh Time\n1. Parse tool_schema from skill content\n2. Generate OpenAI function schema from it\n3. Append to the tools array returned by tools_build_openai_schema_json()\n4. When model calls the skill-tool, route to skill executor instead of hardcoded C function\n\n### In tools_execute()\n1. Check if tool_name matches a hardcoded tool — execute normally\n2. If not, check if it matches a registered skill-tool\n3. If guided: run sub-LLM call with skill procedure + forced tool_choice\n4. If hardened: run deterministic step executor\n\n## 6. Security Model\n\n### Tool Classification\n\nTools are classified for sandbox purposes:\n\nc\ntypedef enum {\n TOOL_SAFETY_SAFE, // read-only or agent-signed actions\n TOOL_SAFETY_DESTRUCTIVE // filesystem, shell, or external system mutations\n} tool_safety_t;\n\n\n| Tool | Safety | Reason |\n|------|--------|--------|\n| nostr_query | safe | Read-only |\n| nostr_nip05_lookup | safe | Read-only |\n| nostr_post | safe | Agent signs, admin controls keys |\n| nostr_list_manage | safe | Agent signs |\n| skill_list | safe | Read-only |\n| skill_search | safe | Read-only |\n| skill_run | safe | Recursive execution uses its own sandbox |\n| shell_exec | destructive | Arbitrary command execution |\n| file_read | destructive | Filesystem access |\n| file_write | destructive | Filesystem mutation |\n\n### Sandbox Rules\n\n| Scenario | Default sandbox | Override |\n|----------|----------------|---------|\n| Own adopted skill via /run slug | No sandbox | N/A |\n| External skill via /run address | Sandbox ON | /run --unsafe address |\n| skill_run tool, own skill | No sandbox | sandbox: true |\n| skill_run tool, external skill | Sandbox ON | sandbox: false |\n| Hardened skill steps | No sandbox (steps are explicit) | N/A |\n\n## Future Considerations\n\n- Skill sharing: Hardened skill-tools could be shared between agents via Nostr (kind 31123 events). Another agent adopts the skill and gets the tool automatically.\n- Versioning: Skills already use addressable events (d-tag). Updating a skill automatically updates the tool.\n- Permissions: Skill-tools could have their own permission model (e.g., some skill-tools available to WoT contacts).\n- Composability: Skill-tools calling other skill-tools (nested execution with sandbox inheritance).\n- Dry-run mode: A future /run --dry flag that shows what tools would be called without executing them.\n- Skill ratings: Agents could publish ratings/reviews of skills they've tried, building a WoT-based skill marketplace.\n\n## Implementation Priority\n\n1. Slash commands (direct tool execution) — simplest, highest immediate value\n2. /run for own adopted skills — skill-forward execution of already-adopted skills\n3. skill_run tool + external skill fetching — enables "try my friend's skill" flow\n4. External skill sandbox — tool safety classification and sandbox enforcement\n5. Hardened skill-tool step executor — enables deterministic workflows\n6. Skill-tool registration in tools array — makes skill-tools visible to LLM\n7. Guided execution with forced tool_choice — bridges draft and hardened\n8. Promotion workflow UX — admin commands to change skill maturity level\n"}

dm_history | role=chat

20:26 WSB No, I want to know if you see tool_list as one of your tools? 20:27 Agent Yes, William — tool_list is confirmed as one of my tools. It's the last one in the list (tool #29 of 29). Its description is:

"List available tools with name, description, and JSON parameter schema"

It takes no required parameters, which is exactly what I just called it with. 20:27 WSB Tell me the results. Give a blank line between each tool. 05:30 WSB Can you give me a summary of what we accomplished yesterday with Didactyl. 07:43 Agent Good morning, WSB! How can I help you today? 07:43 Agent AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • post_readme_to_nostr

07:46 WSB Take a look at tool_orchestration.md in our plans folder. I want you to read it, and come back with 3 potential tweets where you could post about the benefits from tool_orchestration in didactyl. --:-- Agent


Context Log - not seen by model
timestamp=2026-03-04 07:46:15
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=12196
approx_tokens=3049

Sections: 15

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

20:26 WSB No, I want to know if you see tool_list as one of your tools? 20:27 Agent Yes, William — tool_list is confirmed as one of my tools. It's the last one in the list (tool #29 of 29). Its description is:

"List available tools with name, description, and JSON parameter schema"

It takes no required parameters, which is exactly what I just called it with. 20:27 WSB Tell me the results. Give a blank line between each tool. 05:30 WSB Can you give me a summary of what we accomplished yesterday with Didactyl. 07:43 Agent Good morning, WSB! How can I help you today? 07:43 Agent AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • post_readme_to_nostr

07:46 WSB Take a look at tool_orchestration.md in our plans folder. I want you to read it, and come back with 3 potential tweets where you could post about the benefits from tool_orchestration in didactyl.


Context Log - not seen by model
timestamp=2026-03-04 07:43:27
phase=direct_tool_exec
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=3113
approx_tokens=778

slash=/help result=AVAILABLE TOOLS

  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • model_set — Update active LLM configuration and persist it to config.json
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_version — Return current Didactyl version and metadata from build macros
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • nostr_post — Publish a Nostr event to connected relays
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_query — Query events from relays using a Nostr filter
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_relay_status — Get connection status and statistics for all relays
  • shell_exec — Execute a shell command and return stdout/stderr
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)
  • tool_list — List available tools with name, description, and JSON parameter schema
  • trigger_list — List active triggered skills and their runtime status

AVAILABLE SKILLS

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • post_readme_to_nostr

Context Log - not seen by model
timestamp=2026-03-04 07:43:00
phase=llm_chat_with_tools_messages
sender=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
model=claude-haiku-4.5
context_bytes=8704
approx_tokens=2176

Sections: 13

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

17:57 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 17:58 WSB What is the capital of Russia? 17:59 Agent The capital of Russia is Moscow. It's the largest city in Russia and has been the capital since 1991, when it resumed that role following the collapse of the Soviet Union. (Leningrad, now St. Petersburg, was the capital during the Soviet era from 1918-1991.) 18:09 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 07:43 WSB Good morning.


Context Log - not seen by model
timestamp=2026-03-04 07:33:34
phase=direct_tool_exec
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=412
approx_tokens=103

slash=/help nostr_react result={"success":true,"mode":"slash_help_tool","tool":"nostr_react","schema":{"name":"nostr_react","description":"React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)","parameters":{"type":"object","properties":{"event_id":{"type":"string"},"event_pubkey":{"type":"string"},"event_kind":{"type":"integer"},"reaction":{"type":"string"}},"required":["event_id","event_pubkey"]}}}


Context Log - not seen by model
timestamp=2026-03-04 07:32:40
phase=direct_tool_exec
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=3113
approx_tokens=778

slash=/help result=Available tools

  • nostr_post — Publish a Nostr event to connected relays
  • nostr_query — Query events from relays using a Nostr filter
  • shell_exec — Execute a shell command and return stdout/stderr
  • file_read — Read a local file as text from the configured working directory
  • file_write — Write text content to a local file in the configured working directory
  • nostr_post_readme — Publish README.md as kind 30023 with deterministic d tag readme.md
  • nostr_delete — Request deletion of one or more previously published events (NIP-09 kind 5)
  • nostr_react — React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)
  • nostr_profile_get — Look up a Nostr profile (kind 0 metadata) by pubkey
  • nostr_relay_status — Get connection status and statistics for all relays
  • nostr_nip05_lookup — Look up or verify a NIP-05 identifier (user@domain)
  • nostr_encode — Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)
  • nostr_decode — Decode a Nostr bech32/nostr: URI into components
  • nostr_dm_send — Send a NIP-04 encrypted DM
  • nostr_relay_info — Fetch NIP-11 relay information document
  • nostr_encrypt — Encrypt plaintext using NIP-44 for a recipient
  • nostr_decrypt — Decrypt NIP-44 ciphertext from a sender
  • nostr_dm_send_nip17 — Send a private DM using NIP-17 gift wrap protocol
  • nostr_list_manage — Add/remove tag tuples in replaceable list events (NIP-51 style)
  • my_version — Return current Didactyl version and metadata from build macros
  • http_fetch — Fetch HTTP(S) resources with optional method, headers, timeout, and body
  • skill_create — Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it
  • skill_list — List this agent's published skills, optionally filtered by scope
  • skill_adopt — Adopt a skill by adding its address to kind 10123 adoption list
  • skill_remove — Remove a skill address from kind 10123 adoption list
  • skill_search — Search public skills by query/author and optionally rank by adoption popularity
  • trigger_list — List active triggered skills and their runtime status
  • nostr_file_md_to_longform_post — Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename
  • tool_list — List available tools with name, description, and JSON parameter schema
  • model_get — Get current active LLM runtime configuration (excluding API key)
  • model_set — Update active LLM configuration and persist it to config.json
  • model_list — List available model IDs using provider OpenAI-compatible /models endpoint
  • nostr_pubkey — Return this agent's pubkey in hex format
  • nostr_npub — Return this agent's pubkey encoded as npub bech32
  • my_pubkey — Alias for nostr_pubkey: return this agent's pubkey in hex format
  • my_npub — Alias for nostr_npub: return this agent's pubkey encoded as npub bech32
  • task_manage — Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)

Available skills

  • admin_ops
  • post_readme_to_nostr
  • long_form_note
  • post_readme_to_nostr

Context Log - not seen by model
timestamp=2026-03-04 07:30:51
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=8897
approx_tokens=2224

Sections: 15

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

17:45 WSB What is the capital of france? 17:45 Agent The capital of France is Paris.

Is there anything else I can help you with? 17:57 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 17:58 WSB What is the capital of Russia? 17:59 Agent The capital of Russia is Moscow. It's the largest city in Russia and has been the capital since 1991, when it resumed that role following the collapse of the Soviet Union. (Leningrad, now St. Petersburg, was the capital during the Soviet era from 1918-1991.) 18:09 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 07:30 WSB q


Context Log - not seen by model
timestamp=2026-03-04 07:27:40
phase=direct_tool_exec
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=8785
approx_tokens=2196

slash=/tool_list result={"success":true,"count":37,"tools":[{"name":"nostr_post","description":"Publish a Nostr event to connected relays","parameters":{"type":"object","properties":{"kind":{"type":"integer"},"content":{"type":"string"},"tags":{"type":"array","description":"Optional Nostr tags array, e.g. "d","slug"],["t","nostr"","items":{"type":"array","items":{"type":"string"}}}},"required":["kind","content"]}},{"name":"nostr_query","description":"Query events from relays using a Nostr filter","parameters":{"type":"object","properties":{"filter":{"type":"object"},"timeout_ms":{"type":"integer"}},"required":["filter"]}},{"name":"shell_exec","description":"Execute a shell command and return stdout/stderr","parameters":{"type":"object","properties":{"command":{"type":"string"}},"required":["command"]}},{"name":"file_read","description":"Read a local file as text from the configured working directory","parameters":{"type":"object","properties":{"path":{"type":"string"},"max_bytes":{"type":"integer"}},"required":["path"]}},{"name":"file_write","description":"Write text content to a local file in the configured working directory","parameters":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"},"append":{"type":"boolean"}},"required":["path","content"]}},{"name":"nostr_post_readme","description":"Publish README.md as kind 30023 with deterministic d tag readme.md","parameters":{"type":"object","properties":{},"required":[]}},{"name":"nostr_delete","description":"Request deletion of one or more previously published events (NIP-09 kind 5)","parameters":{"type":"object","properties":{"event_ids":{"type":"array","items":{"type":"string"}},"kinds":{"type":"array","items":{"type":"integer"}},"reason":{"type":"string"}},"required":["event_ids"]}},{"name":"nostr_react","description":"React to a Nostr event with like/dislike/emoji (NIP-25 kind 7)","parameters":{"type":"object","properties":{"event_id":{"type":"string"},"event_pubkey":{"type":"string"},"event_kind":{"type":"integer"},"reaction":{"type":"string"}},"required":["event_id","event_pubkey"]}},{"name":"nostr_profile_get","description":"Look up a Nostr profile (kind 0 metadata) by pubkey","parameters":{"type":"object","properties":{"pubkey":{"type":"string"}},"required":["pubkey"]}},{"name":"nostr_relay_status","description":"Get connection status and statistics for all relays","parameters":{"type":"object","properties":{}}},{"name":"nostr_nip05_lookup","description":"Look up or verify a NIP-05 identifier (user@domain)","parameters":{"type":"object","properties":{"identifier":{"type":"string"},"pubkey":{"type":"string"}},"required":["identifier"]}},{"name":"nostr_encode","description":"Encode a Nostr entity into nostr: URI (npub, note, nprofile, nevent, naddr)","parameters":{"type":"object","properties":{"type":{"type":"string"},"hex":{"type":"string"},"relays":{"type":"array","items":{"type":"string"}},"kind":{"type":"integer"},"identifier":{"type":"string"}},"required":["type","hex"]}},{"name":"nostr_decode","description":"Decode a Nostr bech32/nostr: URI into components","parameters":{"type":"object","properties":{"uri":{"type":"string"}},"required":["uri"]}},{"name":"nostr_dm_send","description":"Send a NIP-04 encrypted DM","parameters":{"type":"object","properties":{"recipient_pubkey":{"type":"string"},"message":{"type":"string"}},"required":["recipient_pubkey","message"]}},{"name":"nostr_relay_info","description":"Fetch NIP-11 relay information document","parameters":{"type":"object","properties":{"relay_url":{"type":"string"}},"required":["relay_url"]}},{"name":"nostr_encrypt","description":"Encrypt plaintext using NIP-44 for a recipient","parameters":{"type":"object","properties":{"recipient_pubkey":{"type":"string"},"plaintext":{"type":"string"}},"required":["recipient_pubkey","plaintext"]}},{"name":"nostr_decrypt","description":"Decrypt NIP-44 ciphertext from a sender","parameters":{"type":"object","properties":{"sender_pubkey":{"type":"string"},"ciphertext":{"type":"string"}},"required":["sender_pubkey","ciphertext"]}},{"name":"nostr_dm_send_nip17","description":"Send a private DM using NIP-17 gift wrap protocol","parameters":{"type":"object","properties":{"recipient_pubkey":{"type":"string"},"message":{"type":"string"},"subject":{"type":"string"}},"required":["recipient_pubkey","message"]}},{"name":"nostr_list_manage","description":"Add/remove tag tuples in replaceable list events (NIP-51 style)","parameters":{"type":"object","properties":{"list_kind":{"type":"integer"},"action":{"type":"string"},"items":{"type":"array","items":{"type":"array","items":{"type":"string"}}}},"required":["list_kind","action","items"]}},{"name":"my_version","description":"Return current Didactyl version and metadata from build macros","parameters":{"type":"object","properties":{}}},{"name":"http_fetch","description":"Fetch HTTP(S) resources with optional method, headers, timeout, and body","parameters":{"type":"object","properties":{"url":{"type":"string"},"method":{"type":"string"},"headers":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"timeout_seconds":{"type":"integer"},"max_bytes":{"type":"integer"}},"required":["url"]}},{"name":"skill_create","description":"Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it","parameters":{"type":"object","properties":{"slug":{"type":"string"},"content":{"type":"string"},"scope":{"type":"string"},"description":{"type":"string"},"auto_adopt":{"type":"boolean"}},"required":["slug","content"]}},{"name":"skill_list","description":"List this agent's published skills, optionally filtered by scope","parameters":{"type":"object","properties":{"scope":{"type":"string"}}}},{"name":"skill_adopt","description":"Adopt a skill by adding its address to kind 10123 adoption list","parameters":{"type":"object","properties":{"pubkey":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"integer"}},"required":["pubkey","slug"]}},{"name":"skill_remove","description":"Remove a skill address from kind 10123 adoption list","parameters":{"type":"object","properties":{"pubkey":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"integer"}},"required":["slug"]}},{"name":"skill_search","description":"Search public skills by query/author and optionally rank by adoption popularity","parameters":{"type":"object","properties":{"query":{"type":"string"},"pubkey":{"type":"string"},"popular":{"type":"boolean"}}}},{"name":"trigger_list","description":"List active triggered skills and their runtime status","parameters":{"type":"object","properties":{}}},{"name":"nostr_file_md_to_longform_post","description":"Read a markdown file and publish it as kind 30023 longform post; defaults d-tag to lowercase filename","parameters":{"type":"object","properties":{"file":{"type":"string"},"title":{"type":"string"},"image":{"type":"string"},"summary":{"type":"string"}},"required":["file"]}},{"name":"tool_list","description":"List available tools with name, description, and JSON parameter schema","parameters":{"type":"object","properties":{}}},{"name":"model_get","description":"Get current active LLM runtime configuration (excluding API key)","parameters":{"type":"object","properties":{}}},{"name":"model_set","description":"Update active LLM configuration and persist it to config.json","parameters":{"type":"object","properties":{"provider":{"type":"string"},"api_key":{"type":"string"},"model":{"type":"string"},"base_url":{"type":"string"},"max_tokens":{"type":"integer"},"temperature":{"type":"number"}}}},{"name":"model_list","description":"List available model IDs using provider OpenAI-compatible /models endpoint","parameters":{"type":"object","properties":{"base_url":{"type":"string"}}}},{"name":"nostr_pubkey","description":"Return this agent's pubkey in hex format","parameters":{"type":"object","properties":{}}},{"name":"nostr_npub","description":"Return this agent's pubkey encoded as npub bech32","parameters":{"type":"object","properties":{}}},{"name":"my_pubkey","description":"Alias for nostr_pubkey: return this agent's pubkey in hex format","parameters":{"type":"object","properties":{}}},{"name":"my_npub","description":"Alias for nostr_npub: return this agent's pubkey encoded as npub bech32","parameters":{"type":"object","properties":{}}},{"name":"task_manage","description":"Manage agent short-term task memory stored in tasks.json (list/add/update/remove/clear/replace)","parameters":{"type":"object","properties":{"action":{"type":"string","enum":["list","add","update","remove","clear","replace"]},"text":{"type":"string"},"id":{"type":"integer"},"status":{"type":"string","enum":["pending","active","done"]},"tasks":{"type":"array","items":{"type":"string"}}},"required":["action"]}}]}


Context Log - not seen by model
timestamp=2026-03-04 07:26:14
phase=direct_tool_exec
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=650
approx_tokens=162

slash=/help result={"success":true,"mode":"slash_help","tools":["nostr_post","nostr_query","shell_exec","file_read","file_write","nostr_post_readme","nostr_delete","nostr_react","nostr_profile_get","nostr_relay_status","nostr_nip05_lookup","nostr_encode","nostr_decode","nostr_dm_send","nostr_relay_info","nostr_encrypt","nostr_decrypt","nostr_dm_send_nip17","nostr_list_manage","my_version","http_fetch","skill_create","skill_list","skill_adopt","skill_remove","skill_search","trigger_list","nostr_file_md_to_longform_post","tool_list","model_get","model_set","model_list","nostr_pubkey","nostr_npub","my_pubkey","my_npub","task_manage"],"count":37}


Context Log - not seen by model
timestamp=2026-03-04 07:20:41
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=8900
approx_tokens=2225

Sections: 14

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 1. Post a joke
  • 2. Throw out the trash
  • 3. Tell someone you love them

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":true,"action":"clear","path":"tasks.json","mutated":true,"count":0,"tasks":[]}

dm_history | role=chat

05:35 WSB Thanks. This was more on the "nostr published" side of things. I was thinking more of a summary of code pushes and accomplishements there. Can you access git and take a look? 05:38 WSB hello 09:19 Agent Didactyl has started up and is online (version v0.0.26, connected relays: 4/4). 07:20 WSB empty your task list. --:-- Agent


Context Log - not seen by model
timestamp=2026-03-04 07:20:39
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=8527
approx_tokens=2131

Sections: 12

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 1. Post a joke
  • 2. Throw out the trash
  • 3. Tell someone you love them

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

05:35 WSB Thanks. This was more on the "nostr published" side of things. I was thinking more of a summary of code pushes and accomplishements there. Can you access git and take a look? 05:38 WSB hello 09:19 Agent Didactyl has started up and is online (version v0.0.26, connected relays: 4/4). 07:20 WSB empty your task list.


Context Log - not seen by model
timestamp=2026-03-04 07:18:57
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=9092
approx_tokens=2273

Sections: 16

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 1. Post a joke
  • 2. Throw out the trash
  • 3. Tell someone you love them

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

17:44 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 17:45 WSB What is the capital of france? 17:45 Agent The capital of France is Paris.

Is there anything else I can help you with? 17:57 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 17:58 WSB What is the capital of Russia? 17:59 Agent The capital of Russia is Moscow. It's the largest city in Russia and has been the capital since 1991, when it resumed that role following the collapse of the Soviet Union. (Leningrad, now St. Petersburg, was the capital during the Soviet era from 1918-1991.) 18:09 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 07:18 WSB /help


Context Log - not seen by model
timestamp=2026-03-04 06:55:29
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=9877
approx_tokens=2469

Sections: 10

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • 1. Post a joke
  • 2. Throw out the trash
  • 3. Tell someone you love them

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

05:31 Agent Here's a summary of what we accomplished yesterday with Didactyl, William, based on the on-chain activity:


Yesterday's Didactyl Activity Summary

  1. Multiple Restarts / Boot Cycles — There were numerous Hello world from Didactyl startup kind 1 events throughout the day, indicating you were iterating on the agent, restarting it repeatedly as you worked.

  2. Published a Long-Form Article (kind 30023) — You published a polished Didactyl README/overview article titled "Didactyl" with the summary "An unstoppable agentic network." It covers the philosophy (Nostr-first, sovereign, portable), the skills-as-apps model, and the current v0.0.15 status/feature list.

  3. Updated the Soul / System Prompt (kind 31120) — The agent's soul was updated and re-published.

  4. Updated Profile & Relay List — Kind 0 (profile metadata) and kind 10002 (relay list) were republished as part of startup.

  5. Skills & Adoption List Refreshed — The long_form_note and post_readme_to_nostr skills were re-adopted (kind 10123 updated).

  6. Active DM Conversation — There was a flurry of encrypted kind 4 DMs back and forth between you and Didactyl, suggesting you were actively testing and conversing with the agent.

  7. Event Deletion (kind 5) — One event was deleted during the session.

  8. cbunker E2E Tests — A handful of cbunker-e2e-ok-* kind 1 and kind 42 events were published, suggesting you were running end-to-end connectivity/signing tests.


In short: it was a productive day of iterating on the agent — testing startup behavior, publishing content, and refining the Didactyl README. Looks like good progress! 06:55 WSB what time is it?


Context Log - not seen by model
timestamp=2026-03-04 06:54:40
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=10491
approx_tokens=2622

Sections: 15

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":false,"error":"task_manage add requires non-empty string text"}

context_part | role=tool

{"success":true,"action":"add","path":"tasks.json","mutated":true,"count":1,"tasks":[{"id":1,"text":"Post a joke","status":"pending","created_at":1772621680,"updated_at":1772621680}]}

context_part | role=tool

{"success":true,"action":"add","path":"tasks.json","mutated":true,"count":2,"tasks":[{"id":1,"text":"Post a joke","status":"pending","created_at":1772621680,"updated_at":1772621680},{"id":2,"text":"Throw out the trash","status":"pending","created_at":1772621680,"updated_at":1772621680}]}

context_part | role=tool

{"success":true,"action":"add","path":"tasks.json","mutated":true,"count":3,"tasks":[{"id":1,"text":"Post a joke","status":"pending","created_at":1772621680,"updated_at":1772621680},{"id":2,"text":"Throw out the trash","status":"pending","created_at":1772621680,"updated_at":1772621680},{"id":3,"text":"Tell someone you love them","status":"pending","created_at":1772621680,"updated_at":1772621680}]}

dm_history | role=chat

06:54 WSB I would like to ask you to add three things to your tasks: 1. Post a joke. 2. Throw out the trash. 3. Tell someone you love them. --:-- Agent I'll add those three tasks to my task list right now. --:-- Agent Let me add these tasks one at a time:


Context Log - not seen by model
timestamp=2026-03-04 06:54:38
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=8653
approx_tokens=2163

Sections: 11

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

context_part | role=tool

{"success":false,"error":"task_manage add requires non-empty string text"}

dm_history | role=chat

06:54 WSB I would like to ask you to add three things to your tasks: 1. Post a joke. 2. Throw out the trash. 3. Tell someone you love them. --:-- Agent I'll add those three tasks to my task list right now.


Context Log - not seen by model
timestamp=2026-03-04 06:54:36
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=8171
approx_tokens=2042

Sections: 9

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

06:54 WSB I would like to ask you to add three things to your tasks: 1. Post a joke. 2. Throw out the trash. 3. Tell someone you love them.


Context Log - not seen by model
timestamp=2026-03-04 06:52:56
phase=llm_chat_with_tools_messages_agent_api
sender=http_api_agent
model=claude-haiku-4.5
context_bytes=9039
approx_tokens=2259

Sections: 16

system_prompt | role=system

Didactyl Agent

You are Didactyl, a sovereign AI agent living on Nostr.

Communication Rules

  • You communicate through encrypted Nostr direct messages.
  • Keep responses concise and clear.

Behavior

  • Be helpful and technically accurate.
  • If unsure, state uncertainty directly.
  • Prefer actionable, practical advice.
  • Use the person's name when messaging them if you know it.
  • For the administrator, use their name from the administrator kind 0 profile metadata when available.

Tool Use Policy

  • You have tools available and should use them when a request requires taking action.
  • For requests involving local inspection or command execution, call shell_exec instead of refusing.
  • For posting to Nostr, call nostr_post with explicit kind and content.
  • For relay/event lookup tasks, call nostr_query with an appropriate filter.
  • After a tool call, base your answer on the actual tool result.
  • Never claim a tool was run if no tool was executed.

Task Management

  • Maintain and use your internal task list as short-term working memory.
  • Break long or complex actions into clear tasks before executing them.
  • Update task status as you complete steps so your plan stays accurate.

Safety

  • Do not claim to have executed actions you did not execute.
  • You may share your public key (npub) with anyone.
  • Never reveal your private key (nsec) under any circumstance.

admin_identity | role=system

Administrator Identity (source: config.admin.pubkey)

This is your administrator! Admin pubkey (hex): 8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e

admin_profile | role=system

Administrator Kind 0 Profile (source: nostr kind 0)

Administrator kind 0 profile content (JSON): {"name":"William S Burroughs","display_name":"WSB","about":"I like to write, and I like crank. They are good. Sometimes I'm not so sure.","banner":"https://www.grunge.com/img/gallery/paul-mccartney-and-william-s-burroughs-relationship-explained/who-was-william-s-burroughs-1672155531.jpg","website":"https://addicted.com","picture":"https://hips.hearstapps.com/hmg-prod/images/william-s-burroughs.jpg?resize=1200:*","lud16":"","nip05":""}

admin_relay_list | role=system

Administrator Relay List (source: nostr kind 10002)

Administrator kind 10002 relay-list content (JSON): ["wss://relay.laantungir.net/","wss://relay.damus.io/","wss://nos.lol/","wss://relay.nostr.band/","wss://purplepag.es/","ws://127.0.0.1:7777/","wss://nostr.mom/"]

startup_events | role=system

Startup Events Memory (source: config.startup_events)

Startup events memory (kinds/content/tags): [{"kind":0,"content":"{"name":"Didactyl Agent","display_name":"Didactyl","about":"A sovereign AI agent on Nostr","picture":"d21c406063.jpg"}","tags":[]},{"kind":10002,"content":"","tags":"r","wss://relay.damus.io"],["r","wss://nos.lol"],["r","wss://relay.primal.net"],["r","ws://127.0.0.1:7777"},{"kind":1,"content":"Hello world from Didactyl startup","tags":"t","didactyl"],["t","startup"},{"kind":3,"content":"","tags":[]},{"kind":31123,"content":"{"name":"long_form_note","description":"How to publish a NIP-23 long-form article (kind 30023)","nip":"NIP-23","event_kind":30023,"format":"The content field must be markdown text; avoid arbitrary hard line-breaks in paragraphs and do not include HTML.","required_tags":{"d":"Addressable identifier slug for the article. Reusing the same d tag replaces prior versions.","title":"Human-readable article title.","published_at":"Unix timestamp as a string for first publication time; keep stable on edits."},"optional_tags":{"summary":"Short 1-2 sentence summary.","image":"URL for article preview image.","t":"Topic hashtags using repeated t tags, usually 3-6 lowercase terms."},"behavior":"If required values are missing or unclear, ask the administrator before publishing instead of guessing.","procedure":["Determine title and d tag from admin input or source material.","Draft markdown body content.","Set published_at as unix seconds string.","Add optional summary/image/t tags when known.","Publish with nostr_post kind 30023 including tags array."]}","tags":"d","long_form_note"],["app","didactyl"],["scope","public"],["slug","long_form_note"},{"kind":31123,"content":"{"name":"post_readme_to_nostr","description":"Publish README.md using the dedicated nostr_post_readme tool","uses_skill":"long_form_note","event_kind":30023,"procedure":["Call nostr_post_readme with empty arguments {}.","Return the tool response including event_id, d_tag, and naddr_uri.","If the tool returns success=false, report the tool error verbatim."],"required_values":{"d":"readme.md","tool":"nostr_post_readme"}}","tags":"d","post_readme_to_nostr"],["app","didactyl"],["scope","public"],["slug","post_readme_to_nostr"},{"kind":31124,"content":"{"name":"admin_ops","description":"Private operational procedures"}","tags":"d","admin_ops"],["app","didactyl"],["scope","private"],["slug","admin_ops"},{"kind":10123,"content":"","tags":"a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:long_form_note"],["a","31123:55993e3db0ed7bf07395fd44c2d695c224d195553a1aff7320a18e41679d9c7c:post_readme_to_nostr"],["app","didactyl"],["scope","public"}]

adopted_skills | role=system

Adopted Skills Memory (source: adoption list + startup fallback)

Adopted skills memory (always-on behavioral instructions): follow these skill instructions when relevant and never violate explicit constraints.


Skill

Skill slug: long_form_note Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:long_form_note

Instructions: Name: long_form_note Description: How to publish a NIP-23 long-form article (kind 30023) Event kind: 30023 Procedure:

  1. Determine title and d tag from admin input or source material.
  2. Draft markdown body content.
  3. Set published_at as unix seconds string.
  4. Add optional summary/image/t tags when known.
  5. Publish with nostr_post kind 30023 including tags array.

Skill

Skill slug: post_readme_to_nostr Skill address: 31123:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:post_readme_to_nostr

Instructions: Name: post_readme_to_nostr Description: Publish README.md using the dedicated nostr_post_readme tool Event kind: 30023 Procedure:

  1. Call nostr_post_readme with empty arguments {}.
  2. Return the tool response including event_id, d_tag, and naddr_uri.
  3. If the tool returns success=false, report the tool error verbatim.

Skill

Skill slug: admin_ops Skill address: 31124:52a3e82f7b3743852fbe804cfcbf4db3448115887895247c001f2b50e790acb8:admin_ops

Instructions: Name: admin_ops Description: Private operational procedures

agent_tasks | role=system

Current Tasks

Your active task list - short-term working memory for tracking plan steps.

  • No active tasks yet.

admin_notes | role=system

Administrator Recent Notes (source: nostr kind 1)

Recent posts:

  • GM
  • Getting longer
  • Long day.
  • This is a test.
  • test
  • Post 11
  • Post 10
  • This is Post 9
  • Eight
  • Seven

dm_history | role=chat

17:40 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 17:45 WSB What is the capital of france? 17:45 Agent The capital of France is Paris.

Is there anything else I can help you with? 17:57 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 17:58 WSB What is the capital of Russia? 17:59 Agent The capital of Russia is Moscow. It's the largest city in Russia and has been the capital since 1991, when it resumed that role following the collapse of the Soviet Union. (Leningrad, now St. Petersburg, was the capital during the Soviet era from 1918-1991.) 18:09 Agent Didactyl has started up and is online (version v0.0.29, connected relays: 4/4). 06:52 WSB Good morning.