Skip to main content
Agents

Claude Code

Run Claude Code inside an agentOS VM with durable sessions, configurable skills, MCP servers, credentials, and filesystem access.

Quick start

Read Sessions first for session options, streaming events, prompts, and lifecycle management.

Model & credentials

Set the relevant variable(s) on the session’s env, sourced from your server’s environment:

  • ANTHROPIC_API_KEY — Anthropic API key (direct API).
  • ANTHROPIC_AUTH_TOKEN — bearer token for proxy / OAuth auth.
  • ANTHROPIC_BASE_URL — route through a gateway or proxy endpoint.
  • ANTHROPIC_MODEL — override the default model.
  • CLAUDE_CODE_USE_BEDROCK=1 — use Amazon Bedrock (auth via the AWS credential chain: AWS_REGION, AWS_PROFILE, …).
  • CLAUDE_CODE_USE_VERTEX=1 — use Google Vertex AI (auth via Google Cloud credentials).

See Models & Credentials, and Claude Code’s environment variables for the full list.

Skills

Claude Code discovers agent skills from SKILL.md files under its skills directory. Write the skill into the VM before creating a session and Claude Code loads it automatically.

	const skill = `---
name: commit-style
description: How to write commit messages in this project.
---

Write commit messages in the imperative mood and keep the subject under 50 characters.
`;

	// Write the skill before creating the session
	await agent.filesystem.mkdir("/home/agentos/.claude/skills/commit-style");
	await agent.filesystem.writeFile(
		"/home/agentos/.claude/skills/commit-style/SKILL.md",
		skill,
	);

	// Claude Code discovers the skill automatically
	await agent.sessions.open({
		agent: "claude",
		env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
	});

MCP servers

Expose extra tools to the agent by passing mcpServers to openSession. Both local child-process servers and remote URLs are supported.

const mcpConfig = {
	mcpServers: {
		filesystem: {
			command: "npx",
			args: [
				"-y",
				"@modelcontextprotocol/server-filesystem",
				"/home/agentos",
			],
		},
		remote: {
			type: "sse",
			url: "https://mcp.example.com/sse",
			headers: { Authorization: "Bearer my-token" },
		},
	},
};
await agent.filesystem.writeFile(
	"/home/agentos/.claude.json",
	JSON.stringify(mcpConfig),
);

await agent.sessions.open({
	agent: "claude",
	env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
});

Pre-install npx-launched servers. A local server started with npx -y … writes install progress to stdout on its first run, which corrupts the MCP stdio handshake (you’ll see Connection closed). Pre-install it in the VM so npx is silent — await agent.process.exec("npm install -g @modelcontextprotocol/server-filesystem") before the session — or pin the package and point command at the installed binary.

Customizing the agent

Claude Code is a built-in agent, but it’s just a software package under the hood. To ship your own ACP adapter, swap the underlying agent SDK, or register a tweaked build as a new agent, see Custom Agents.