Contents
Note: I used Claude Code (AI) to help me draft and structure this post. The tangents, the failed meditation, the shaman costume — those were all me.
I’m an old-school Second Life avatar. First logged in back in 2006, spent years building and scripting gadgets, then disappeared for about ten years. A few weeks ago I came back.
Since returning I’ve been obsessing over something: getting AI to actually work inside Second Life in interesting ways. I’d managed to route text-to-speech through SL’s voice channel so a bot can speak spatially, exactly like any avatar. An AI musician who sings. A Spanish tutor who holds real conversations. I got deep into it.
Maybe too deep. I posted about it on the SL subreddit and a mod reached out with a reality check:
Honestly, this feels like you’ve been down the rabbit hole too long and just popped up to promote your thing, blissfully unaware of the massive backlash that’s been going on through the community and in-world.
They were right. I pulled the post, read the Scifi con thread, and took it on board. Real frustration from longtime residents about AI being pushed into spaces they love without consent.
So I put down the tools. Get in-world, attend some events, see what people actually value here.
One of those events was a guided meditation at Nonprofit Commons. I’d been meaning to bring more meditation into my life for a while and never quite made it stick. Maybe my avatar sitting quietly in a virtual space would finally do what real life couldn’t. Second Life, after all these years, coercing me to meditate.
The One Minute I Lasted
The meditation poses kicked in and honestly — that part was genuinely beautiful. Watching your avatar settle into a seated position does something unexpected. There’s some mirror-neuron thing at work: your mind starts to quiet a little just seeing your digital self go still. The host started guiding the session. I was actually doing it.
My mind, however, did not settle.
Within about thirty seconds I was thinking about Lewis, our musician bot — the same one covered in the AI bots in Second Life post — and how we’d managed to pipe live audio through SL’s voice system so he could actually sing in-world. And then the thought arrived, fully formed and completely disruptive:
If Lewis can sing, why can’t someone sit here and guide a proper meditation?
I lasted one minute. One. I thanked the host, stood my avatar up, and went off on a tangent. The meditation I’d been meaning to start for months ended in sixty seconds and spawned a coding project instead. This is, unfortunately, very on-brand for me.
Building RisingBreath
The idea: pipe pre-recorded guided meditation audio through a dedicated Second Life bot. Same architecture as Lewis — MP3s converted to WAV, streamed through the voice pipeline, playing to anyone in earshot.
For content I found Free Mindfulness — a project offering hundreds of guided meditation recordings free under Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Body scans, breathing sessions, 3-minute practices, 40-minute deep dives. For an OM chanting track I used Pixabay. I used the Claude Code browser extension to pull the files to my hard drive, then uploaded them all to the server in one terminal session. Fourteen MP3s, ready to go.

From there, Claude Code on the server took over. Here’s what got built in one session:
The audio pipeline mirrors what we use for Lewis. Each MP3 gets converted on-the-fly to 48kHz stereo s16 WAV and dropped into /tmp/voice-in15/, where SecondBot’s VoiceService picks it up and streams it over SL’s RTP/SIP voice channel. Anyone near the bot hears the meditation through their viewer’s spatial audio.
The soul file gives the bot a persona — a calm, male-voiced meditation guide named RisingBreath Resident. He responds naturally to chat (“let’s start a three-minute meditation”) and knows how to select from the library based on what you ask for.
The signpost is a physical in-world object — a prim with an LSL script — that displays a blue SL dialog menu when touched. Visitors pick a category (Short / Medium / Long / Chants), then a specific session, and the meditation starts. No chat required.

The 13 tracks ended up sorted like this:
Short: 3m Breath (FM), 3m Sounds, 3m Breath (MARC)
Medium: 4m Body Scan, 5m Breath (MARC), 10m Body Scan
Long: 20m Body Scan, 30m Silence, 40m Body Scan
Chants: OM 1
Pick a category and a submenu appears with the individual sessions:

Want AI bots for your Second Life sim?
I build voiced, scripted AI avatars for sims, events, and educational spaces — characters with real personalities, spatial awareness, and in-world behavior. If you're curious what this could look like in your space, get in touch.
Explore the SL AI service →
The Workflow That Actually Blew My Mind
Shout-out to the SL Scripters community — if you haven’t tried combining LSL scripting with AI tools yet, you really should. There’s a whole new world in here.
Here’s the part I want to highlight because it genuinely delighted me, even after everything we’ve already built with these bots.
I already had bot infrastructure in place that allows a SecondBot avatar to transfer inventory items to another avatar in-world. When the signpost LSL script needed updates, I told Claude Code to use that existing code to have RisingBreath pass the new script directly to my avatar FireCentaur — and to stamp a version number on it each time so I could easily tell which one was which in my inventory.
So the workflow I set up looked like this:
- I describe the change I want in chat
- Claude Code edits the LSL script and bumps the version number (v3, v4, v5…)
- I tell Claude Code to deliver it — it uses the existing bot transfer code to have RisingBreath send the script to FireCentaur as an in-world inventory offer
- A notification pops up in my SL viewer: RisingBreath is offering you “MeditationSignpost v5”. I accept it.
- I drag it from my inventory into the signpost prim’s Content tab. Done.
No copy-pasting scripts between windows. No manual uploads. No hunting through an unnamed inventory pile wondering which version is current. RisingBreath hands it to me directly, clearly labelled, and I drop it in.
The code that makes that transfer possible was already mine — I’d built it for other bot workflows. I just told Claude Code to wire it into the script delivery process. That’s the bit worth calling out: it wasn’t Claude Code doing something magical on its own, it was Claude Code using tools I’d already created, in a way I hadn’t thought to apply them. That combination — my infrastructure, my instruction, AI execution — is what made it feel effortless.
If you want to understand more about the voice and TTS side of how these bots work, the Agent Vibes post goes deeper on that.
Getting the Look Right
Of course, none of this was technically necessary before I also went to the Second Life Marketplace and spent time finding a shaman/guru avatar costume.
I mean, if you’re going to have a meditation bot, he should look the part. I found the MADEINUK Tribal Mesh Avatar — 100% mesh, Animesh friendly, Mod/Copy. The tribal, shaman-like aesthetic was exactly what I had in mind: someone who looked like they’d been meditating for centuries, not someone who’d just wandered in from a mall sim. I logged in as RisingBreath, got him dressed, and then went looking for the right movement system.
For the animation override I picked up the MDHU Monk TKD AO HUD v3. The reason was simple: it comes with a “Hover Meditate” notecard — a pre-built set of animations specifically designed for a floating meditation pose. Load that notecard and the bot drifts slightly above the ground in a crossed-leg hover, which looks genuinely striking. The HUD also has a “sit ground anywhere” feature (no poseballs required) and overrides every default animation — walks, stands, turns, jumps — so the avatar moves with a calm, deliberate quality even when not actively meditating. Over 100 animations total, all configurable via notecards.
The sit/stand behavior adds a lot. RisingBreath settles into a ground pose when a session starts and stands when it ends or when someone says stop. He speaks a greeting before the audio begins: “Fire Centaur has selected 3m Sounds. Let’s begin.” Then the meditation plays through in-world spatial audio.
A few things needed fixing along the way:
The stop button didn’t work at first. Deleting the WAV file mid-stream did nothing because SecondBot had already buffered the audio in memory. The fix was a SecondBot command called VoiceSwitchMode local, which tears down the SIP/RTP connection and reconnects in about two seconds. Actual interruption.
One track was nearly inaudible. A body scan recording was peaking at -17.5 dB with a mean of -41 dB — extraordinarily quiet. Fixed with ffmpeg volume amplification (1.5x), and since the pipeline regenerates a fresh WAV on every play, it took effect immediately.
The signpost needed six iterations (v1 through v6) before it worked reliably end-to-end. Early versions used llSay to broadcast the selection — but SecondBot doesn’t capture object local chat, only avatar speech. The final version uses llHTTPRequest to POST directly to a backend API endpoint, which then routes to the bot’s TTS server. Reliable, auth-protected, version-tracked.
Here’s the whole thing working in Second Life:
So About That Moderator Warning (Revisited)
The moderator was right about several things.
I was down the rabbit hole. The “green voice brackets” — that moment in the SL viewer when a bot’s audio finally syncs and the little green animation appears over their head, showing they’re actually speaking — that moment genuinely does something to you. After weeks of infrastructure work, seeing it was a dopamine hit. I wanted to share it immediately. I didn’t stop to think about how it would land.
But I do firmly believe that this capability, used thoughtfully, could genuinely benefit the Second Life community. Guided meditation is one example — a bot that plays high-quality audio through SL’s spatial voice system, so you hear it positionally as you would any other avatar speaking nearby, and otherwise leaves you completely alone. That’s a real use case, not a gimmick.
There’s an honest limitation worth mentioning: RisingBreath can hear your chat but not your voice. If you turn your microphone on, he won’t respond to it — he can only read text. The way I work around this is Whisper transcription: I speak, Whisper converts it to text, and that text goes into the chat. It feels like a conversation. I’ve experimented with OpenAI’s realtime voice API to close that loop properly — proper two-way voice — but after a full day of experimentation and a lot of burned tokens, I couldn’t get it working reliably in the Second Life audio pipeline. That’s still an open problem. For now, the Whisper-to-chat flow is good enough that the friction mostly disappears.
The community backlash about AI in Second Life is real. But after sitting with it for a day, I think it’s worth unpacking rather than just absorbing. There are strong camps — people eager to explore what AI can do, and people with a deep aversion to anything AI-adjacent. A lot of the aversion isn’t really about Second Life at all. It’s about jobs, housing, energy use, the broader drumbeat of negative AI news that people carry with them when they log in. AI bots in a virtual world become a proxy for all of that. The reaction is a generalised allergic response more than a considered view of what any specific bot is actually doing.
There’s also a “fear of new tech” dimension that feels familiar. Second Life went through something similar in its own early days — resistance, scepticism, people convinced it was a fad or a threat. The technology that eventually found its place did so by showing genuine useful application, not by winning arguments. That’s probably the right frame here too. Show the use cases. Let people see the thing working. The kneejerk reaction — “AI makes mistakes,” “AI can’t be trusted,” “AI doesn’t belong here” — softens when it meets something specific and benign. A meditation guide that sits in a corner and plays audio when asked is a pretty hard thing to be angry about.
I’d rather find my niche and build useful things than let the loudest voices in any community dictate what’s worth exploring. That doesn’t mean ignoring the sentiment — I clearly got the framing wrong with that first post, and I own that. But it does mean not getting totally turned off.
Where I’d push back directly: the moderator’s comment felt a little like speaking for everyone. There are plenty of people in Second Life who are curious, open, and actively building with AI. They’re just quieter than the backlash.
RisingBreath doesn’t wander, doesn’t start conversations, doesn’t pretend to be a person. You touch a signpost, pick a meditation, and he plays it. He’s more like a jukebox with a good voice than an agent with an agenda. People need to be shown useful applications — that’s how a generalised allergic reaction becomes something more considered.
I still failed at my one-minute meditation. But if you’re in Second Life on the OceMa sim and you want to try a guided session, RisingBreath is there. He won’t bother you otherwise.
Maybe I’ll try the actual meditation next time.
Comments
Loading comments…
Leave a comment