Yes. That's a core use case. You can either use a separate tree or even nest contexts. It's very powerful for sub-agents like the one Claude Code has built in with the Explore and Task subagents
On UltraContext, you'll do it like this:
// Shared context all agents read/write to
await uc.append(sharedCtx, { agent: 'planner', content: '...' })
await uc.append(sharedCtx, { agent: 'researcher', content: '...' })
// Or fork into separate branches per agent
const branch = await uc.create({ from: sharedCtx, at: 5 })
Schema-free, so you can tag messages by agent, track provenance in metadata, and branch/merge however you want. Full history on everything.