# Hacking on Engoblined Shepherd

**URL:** <https://community.spritely.institute/t/hacking-on-engoblined-shepherd/828>\
**Category:** Spritely Goblins\
**Created:** [May 22, 2026, 6:32pm UTC](https://community.spritely.institute/t/hacking-on-engoblined-shepherd/828 "2026-05-22T18:32:59Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![eikcaz](https://avatars.discourse-cdn.com/v4/letter/e/48db29/32.png) [@eikcaz](https://community.spritely.institute/u/eikcaz)\
**Post date:** [May 22, 2026, 6:32pm UTC](https://community.spritely.institute/t/hacking-on-engoblined-shepherd/828/1 "2026-05-22T18:32:59Z")

</div>

Hi Spritely!

I really wanted to talk about goblins+shepherd as part of my lightning  
talk at Dweb Camp in Germany later this year, so I started hacking  
something together. I finally got to the point of connecting my Emacs  
to a REPL with a running engoblined shepherd (a shaman?), and was able  
to start/stop services from different vats. Since running a REPL is  
so important to the hacking process, I thought others might be  
interested in a cheatsheet for getting there, I made a short writeup  
here:

> **[‎](https://zacchae.us/shaman.html)**

I’ll update it as I make more progress towards my goal. As for what  
my goal is, without getting too into the weeds, I’ll say I have  
networking nodes and resource nodes, and that resource nodes have TLS  
keys (and networking nodes importantly don’t) but traffic is routed  
via networking nodes. Furthermore, each node should be a full backup  
of a given domain, and hence should be able to generate it’s own  
top-level domain TLS key via certbot, so they must have the capability  
to divert port 80/443 requests for the top-level domain towards that  
node.

---

<div class="post-metadata">

**Author:** ![dthompson](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.spritely.institute/dthompson/32/95_2.png) [@dthompson](https://community.spritely.institute/u/dthompson)\
**Post date:** [May 25, 2026, 10:49pm UTC](https://community.spritely.institute/t/hacking-on-engoblined-shepherd/828/2 "2026-05-25T22:49:48Z")

</div>

Whoa this is awesome! Thanks for sharing!

---

<div class="post-metadata">

**Author:** ![jfred](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.spritely.institute/jfred/32/18_2.png) [@jfred](https://community.spritely.institute/u/jfred)\
**Post date:** [May 27, 2026, 1:50am UTC](https://community.spritely.institute/t/hacking-on-engoblined-shepherd/828/3 "2026-05-27T01:50:15Z")

</div>

Oh hell yeah I love this! I haven’t had a chance to play around with Goblins Shepherd myself yet so this was a good intro to what’s available in it.

And now I’m wondering who the Goblins-interested Guix user was that you met in the wild 🙂

On a somewhat related note…@dthompson I had mentioned back during FOSDEM that I had played around with Goblins in Shepherd a tiny bit a while back, but didn’t have a link for you at the time. I found it!

- [".\*" GIT\_PROTOCOL=$0 To enable anonymous read access to all revisions of.](https://codeberg.org/jfred/guix-goblins/src/branch/master/guix-goblins/services.scm)

- Example: [f5c6883 — paste.sr.ht](https://paste.sr.ht/~jfred/f5c6883233834bb6a78cdea2e796c16683854018)

@eikcaz This was a very rough experiment from before some of the goblins shepherd integration work (i.e. this was “what if you spawn goblins objects from an unmodified shepherd?”) so don’t take this as a current example at all. But it does show a bit of ocapn usage so maybe it’ll be useful!

(Of course I had an action on my goblins services that just spat out a sturdyref to the newly spawned object… which isn’t exactly what you’d want, I think you’d really probably want some way to define the desired connections between service objects declaratively. But yeah, quick prototype, etc etc)
