A few weeks ago I wrote about turning OneCamp’s assistant from a chatbot that answers into an agent that does the work: creates tasks, drafts docs, reads then acts, always behind a confirmation gate and the user’s own permissions.
That post ended on a question I had not answered yet: where does the agent live?
A coworker is not a panel you open. It is someone you @mention in a channel, DM when you have a quick question, and trust to check in on a schedule. So the last week of OneCamp was about giving agents a place in the room, and then building the governance that makes handing one to a real team a responsible thing to do rather than a leap of faith.
The headline change: an agent you build in OneCamp can become an actual participant in a conversation.
While it works, you see a live typing indicator under its own name, so a mentioned agent never feels like a frozen bot. And when it is thinking longer than usual, it still posts something rather than leaving you staring at silence, because an @mention that goes unanswered is worse than a slow answer.
Each agent carries its own principal (a distinct bot identity), so its messages are attributable, its membership shows up in the channel roster, and is_bot flows through message reads and the real-time layer, the UI can badge AI-authored messages live and on reload. The agent is a first-class member, not a string of text pretending to be one.
The mention matching is boundary-aware and channel-scoped: an agent only responds where it was invited (its allowed-channels list), and the typeahead only suggests agents you can actually summon there. No agent barges into a channel it was never added to.
A teammate that only speaks when spoken to is half a teammate. Agents can now run on a schedule and post a proactive check-in to a channel: a standup nudge, a “here’s what’s overdue” summary, a daily digest. You pick the channel, the cadence (daily, weekdays, or a custom set-time), and the instruction. The same agent that answers an @mention can also show up on its own at 9 a.m. with the thing you would have had to ask for.
Schedules are real cron-style recurrence (daily / weekly with specific weekdays at a set minute), and agents can also fire reactively off workspace events, including a new row landing in a OneCamp table. So “when a row is added to the Bugs table, triage it and post to #eng” is a thing an agent does without anyone clicking a button.
Giving an autonomous teammate write access to your workspace is exactly as scary as it sounds, unless you can answer four questions: Can I control what it does on its own? Can I measure whether it is any good? Can I see everything it did? Can I prove the record was not tampered with?
That is where most of the week actually went.
Every agent has an autonomy setting. Two honest modes:
And because an agent running in approval mode should be transparent, it discloses its proposed actions in the channel reply itself, so everyone in the thread sees what it wanted to do, not just the person who clicks the button.
You ship LLM features and verify them with build and unit tests, but model output quality is usually unmeasured, which is how you end up afraid to ever change the model. So OneCamp got a proper eval harness: you save scored test scenarios (golden prompt → expected behavior) for an agent, run them, and get a pass-rate badge on each agent row in the list. Swap a model, re-run the suite, and see whether quality held. This is what turns “we added AI” into “we can prove the AI still works.”
Every consequential action, agent writes, API calls, AI operations, lands in an audit log built as a tamper-evident hash chain: each entry commits to the previous one, so a single altered or deleted row breaks the chain and is detectable. From the admin viewer you can Verify integrity and Export the log as CSV or JSON for your own compliance pipeline. When an agent created something at 3 a.m., there is a trail, and the trail can prove it was not edited after the fact.
Agents now report health. The agents list shows a per-agent health dot and a fleet overview strip (how many agents, recent run success, failures), and each agent’s run-history dialog has a reliability panel plus the full run transcript, so you can read exactly what the agent saw, thought, and did on any given run. Debugging an agent stopped being a mystery.
The builder got more capable and less fiddly:
search_workspace tool: any agent can recall across the whole workspace and your connected accounts (more on that below), so it is not limited to what fits in its prompt.The teammate work was the spine, but the same week shipped a wave of cross-surface AI, all built on the one permission-scoped retrieval-and-action core, so each one is grounded in only what you can see:
search:read scope.Underneath all of it, two reliability investments landed quietly: JSON-with-corrective-retry everywhere a small local model has to emit structured output (so self-hosted deployments on modest models stay dependable), and meeting recaps that are always written in English regardless of the spoken language, authored as the OneCamp AI bot with an inline “Play recording” button.
The reason an agent can safely be a real channel member is the same reason the API could safely be opened up: it acts as a real user, checked like a real user, and it can never do more than that user could do by hand. An autonomous agent in a channel is just a member whose write actions you chose to trust, bounded by scope, budget, and an audit trail you can verify.
And every piece of it, the model, the memory, the audit log, the conversations the agent reads, runs on infrastructure you own. A cloud AI teammate means trusting a third party with both your data and the actions taken on it. A self-hosted one means the powerful, autonomous coworker is also the contained one. That is the trade I actually want: maximum capability, zero “where did my data just go.”
Build an agent. Go to Admin → AI → Agents → New agent. Either describe it in plain language and let OneCamp draft it, or fill it in: name, instructions, the tools it may use, optional skills and knowledge sources, and the model it should run on. Set its autonomy to Require approval to start, you can loosen it later once you trust it.
Put it in a channel. Open a channel, add the agent from the member picker (or the in-channel AI teammates picker), and set its allowed channels. Now anyone in that channel can @mention it and it replies in the thread. If it is in approval mode, write actions show up as approval cards in the thread, click to approve.
DM it. From a new DM, pick the agent (DM-able agents are discoverable there) and talk to it 1:1 with full memory and multi-turn context. Great for a personal “draft this”, “what did I miss”, “summarize this” specialist.
Make it proactive. In the builder, add a schedule trigger, choose the channel and cadence (daily / weekdays / a set time) and the instruction. Or add an event trigger like a new table row to make it react automatically.
Trust it with evidence. Add a few saved tests to the agent and run them to get a pass-rate badge; check the health dot and run history on the agents list to see how it is doing; and from Admin → Audit log, hit Verify integrity and Export when you need a clean compliance record.
Use the cross-surface AI. Watch the “Needs you” card on home and act on approvals inline; press Cmd+K to search across your workspace, memory, and connected apps; on a calendar event use Find a better time and the prep brief; in a chat, extract tasks from the discussion; on a board, Cluster the notes.
OneCamp is an open-source, self-hosted, AI-era workspace: chat, docs, tasks, projects, calls, boards, tables, a programmable API, and AI teammates that live where you work, all on your own infrastructure.