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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions