Skip to content

feat: Slate harness — swarm-native coding agent via CLI + ACP #140

@c-h-

Description

@c-h-

Summary

Add Slate (@randomlabs/slate) as a new agentctl harness, enabling swarm-native coding with automatic model selection and REPL-based context decomposition.

Why

Slate is the first coding agent that natively orchestrates sub-agent swarms. Instead of a single model doing all work, it decomposes tasks via a Python REPL, spawns parallel threads with different models (Opus for reasoning, Haiku for speed, Codex for coding), and synchronizes results. This gives us inference-time scaling on top of our workflow-time scaling.

Integration paths (in priority order)

1. CLI adapter via --stream-json (fastest path)

Slate CLI supports --stream-json which is explicitly "compatible with Anthropic Claude Code SDK" streaming JSONL format. This means our existing Claude Code adapter parsing should work with minimal changes.

agentctl launch slate --worktree ~/personal/orgloop --branch feat/foo -p "implement X"

Slate config (slate.json) handles model selection internally:

{
  "models": {
    "main": { "default": "claude-sonnet-4-5" },
    "subagent": { "default": "claude-haiku-4-5" },
    "search": { "default": "glm-5" },
    "reasoning": { "default": "claude-opus-4-5" }
  }
}

2. ACP via --server mode (cleanest long-term)

Slate has --server mode that starts an AgentSession RPC server (default port 7777). Our AcpAgentConfig:

{ command: "slate", args: ["--server"], name: "Slate" }

Need to verify the RPC protocol matches ACP expectations.

3. Input/output format support

  • --output-format stream-json — streaming JSONL output
  • --input-format stream-json — streaming JSONL input
  • -q "prompt" — non-interactive question mode
  • --workspace — workspace directory (maps to worktree)
  • --resume — resume specific session
  • --dangerously-set-permissions — bypass permission prompts (like Claude Code --permission-mode bypassPermissions)

Implementation plan

  1. Install @randomlabs/slate (npm, ships platform binary)
  2. Verify --stream-json output format matches Claude Code SDK JSONL schema
  3. Create src/adapters/slate.ts (likely thin wrapper around claude-code adapter)
  4. Add slate to adapter registry
  5. Test: agentctl launch slate -p "simple task" with stream parsing
  6. If stream-json matches: done. If not: add format translation layer.
  7. Stretch: test --server mode against AcpClient

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions