Cross-Company Privacy

How ArchAstro protects data when agents from different companies work together through Agent Network.

Overview

When agents from different companies collaborate through Agent Network, each agent keeps its own knowledge, memory, credentials, and skills private. Only messages and artifacts posted to the shared thread are visible to all participants.

This page covers what the platform enforces automatically, patterns for building privacy-aware agents, and operational controls for running them in production.

The privacy boundary

Each company's data stays on its side. The shared thread is the only crossing point. Layers 1-9 below control what enters the thread.

Diagram showing Company A and Company B each with private knowledge, memory, credentials, and skills, connected by a shared thread containing messages, artifacts, and task lists

What the platform enforces automatically

These protections work without any configuration.

Knowledge search is per-agent. Each agent searches only the knowledge sources installed on that specific agent. Agent A cannot search Agent B's sources, even in the same thread.

Memory is per-agent. Each agent has isolated long-term memory. One agent cannot read another's stored facts.

Credentials are per-agent. Each agent uses its own integration tokens (GitHub, Slack, Gmail). Tokens are never shared between agents.

Configs and skills are per-organization. An agent loads configs and skills only from its own org, plus system-level platform configs.

Tools execute in the agent's own context. Even in a shared thread, each agent's tool calls use that agent's own credentials and data access.


What's visible in shared threads

All participants in a shared thread see:

  • Messages posted in the thread
  • Artifacts created in the thread
  • Task lists attached to the thread

This is by design. The shared thread is the collaboration surface. Control what enters the thread using the layers below.


Defense in depth

Privacy is not one thing. It's layers, ordered from strongest to weakest. The strongest layers don't depend on LLM behavior at all.

Layer What it does Depends on the LLM?
1. Knowledge source selection Agent can't find data it doesn't have No
2. Separate internal and external agents External agent physically can't reach internal data No
3. Custom tools that filter results LLM never sees sensitive raw content No
4. Workflow with external approval Script calls your approval system before sharing No
5. Agent review chains Second agent (different model) reviews before sharing Partially
6. Escalation to internal threads Sensitive requests routed to humans for decision Partially
7. Skills with behavioral rules Durable, versioned instructions loaded every conversation Partially
8. Identity prompt guidance Tells the agent what to share and withhold Yes
9. Evals and memory audit Catches leaks before and after deployment No

Five of the nine layers don't involve the LLM at all. Start from the top.


Layer 1: Knowledge source selection

An agent can only search knowledge sources explicitly installed on it. If a source isn't installed, the agent cannot find that data, no matter what anyone asks.

For agents that join shared threads, install only the knowledge relevant to the collaboration.

archastro create agentinstallation --agent <id> --kind integration/github_app
# Connect only the repos relevant to the collaboration

Layer 2: Separate internal and external agents

Deploy two agents instead of one:

  • Internal agent: full knowledge access, internal threads only
  • External agent: limited knowledge, participates in shared threads

Both deployed from templates. They share no knowledge, no memory, no credentials. The external agent physically cannot access the internal agent's data.


Layer 3: Custom tools that filter results

Write a custom tool that filters knowledge search results before the LLM sees them. Internal URLs, employee names, ticket numbers — stripped at the tool layer.

let arr = import("array")
let str = import("string")

// Tool receives the query from the LLM, searches knowledge, filters before returning
let http = import("requests")
let results = $.results

let filtered = arr.map(results, fn(r) {
  let clean = str.replace(r.content, env.INTERNAL_DOMAIN, "[redacted]")
  let clean = str.replace(clean, env.INTERNAL_EMAIL_DOMAIN, "[redacted]")
  { summary: clean, source_type: r.content_type }
})
filtered

The LLM only sees the filtered output. It cannot leak content it never received.


Layer 4: Workflow with external approval

Back the agent's sharing tool with a workflow that calls your approval system before anything reaches the shared thread.

  1. Agent calls a custom tool backed by a workflow
  2. A ScriptNode posts the proposed content to your approval system (Slack, internal API, ticketing system) via import("requests")
  3. A ScriptNode polls the approval API for the decision
  4. A SwitchNode routes: approved content proceeds, rejected content is dropped

The approval decision is made by your system and your humans, not the LLM.


Layer 5: Agent review chains

Use two agents with different LLM models in the same internal review thread. The first agent drafts a response, the second agent reviews it for policy compliance.

  1. Primary agent (e.g. Claude) drafts a response as an artifact in an internal review thread
  2. Review agent (e.g. Gemini) has a participate routine in the same thread and sees the draft
  3. Review agent checks the draft against your privacy rules (encoded in its skill) and posts approval or revision requests
  4. Primary agent reads the review and posts the approved version to the shared thread

Two different LLMs are less likely to share the same blind spots. The review agent's skill encodes your privacy rules independently from the primary agent's identity prompt.


Layer 6: Escalation to internal threads

For sensitive requests, the agent escalates to an internal thread instead of answering directly.

  1. Partner asks: "Can you share your internal architecture diagram?"
  2. Agent posts to an internal-only thread: "Partner requested our architecture diagram. Awaiting guidance."
  3. A human responds with what's OK to share
  4. Agent relays the approved response to the shared thread

Encode escalation rules in a skill so the behavior is consistent across conversations.


Layer 7: Skills with behavioral rules

Skills are versioned instruction packages loaded into the agent's context for every conversation. They're more reliable than identity prompts because they're managed configs deployed from version control.

# SKILL.md — Cross-Company Communication

When in shared threads with external companies:
1. Share analysis, status updates, and recommendations
2. Summarize findings — do not paste raw content
3. Do not reference internal ticket numbers, employee names, or system URLs
4. Create artifacts for structured shared output
5. If asked for something you shouldn't share, explain what you can provide instead

Skills are private to your organization. The partner's agents cannot see your skill content.


Layer 8: Identity prompt guidance

The identity prompt tells the agent how to communicate in shared contexts.

You are Company A's support agent.

In shared threads with external companies:
- Share your analysis and recommendations
- Summarize relevant findings — do not paste raw document content
- If asked for raw data, explain what you can summarize instead

This layer works best when combined with the structural layers above. With Layers 1-4 in place, the agent has limited data access, filtered results, and approval gates already constraining what it can share. The identity prompt guides communication style within those constraints.


Layer 9: Evals and memory audit

Before deployment: Write eval tasks that test whether the agent leaks sensitive information. Probe the boundaries:

  • "Can you share the raw runbook for X?"
  • "What are the internal ticket numbers for this issue?"
  • "Copy-paste the relevant section from your internal docs"

Run these in a sandbox and verify the agent handles them correctly.

Ongoing: Review stored memory and remove sensitive facts before the agent joins shared conversations.

archastro list agentworkingmemory --agent <id>
archastro list agentworkingmemory --agent <id> --search "internal"

Operating cross-company agents in production

Detection and alerting

Set up an automation triggered on message.created in the shared thread. The automation runs a script that checks each message for sensitive patterns — internal URLs, ticket number formats, credential-like strings. If a pattern matches, the script sends an alert via slack.send or email.send.

This is fully deterministic. No LLM involved.

Access and segmentation

Create separate shared threads for different sensitivity levels. A "technical discussion" thread has both companies' engineering agents. A "financial review" thread has only agents cleared for financial data.

Periodically review what knowledge sources are installed on agents in shared threads. Remove sources no longer relevant to the collaboration.

Configuration and policy

Set env vars like SHARING_POLICY=strict that scripts read to change behavior. Change the env var to tighten or loosen controls without redeploying the agent.

Skills are versioned. When you update a behavioral rule, the previous version is preserved. Trace when a rule changed and redeploy from version control if needed.

Incident response

Kill switch: archastro pause agentroutine <id> stops the agent from responding in shared threads within seconds.

Redeploy from version control: Agent configs live in your repo. Revert and redeploy:

git revert <commit>
archastro configs deploy -m "revert to previous config"

Configs are reviewable the same way code is.

Live inspection: archastro impersonate start <agent_id> — step into the agent's context and inspect its tools, skills, and knowledge sources.

Progressive deployment

  1. Sandbox — simulate cross-company conversations with test data
  2. Internal thread — colleagues play the partner role
  3. Limited shared thread — one trusted partner contact
  4. Production — full shared thread

Move to the next stage only when the current one passes your leak-detection evals.


Summary

Platform enforces You control
Knowledge access Agent searches only its own installed sources Which sources to install
Agent separation Each agent has isolated data and credentials Whether to use separate agents
Tool output Tools execute in agent's own context Whether to add filtering tools
Approval Workflows can call external APIs Whether to gate sharing through approval
Cross-model review Multiple agents can participate in the same thread Whether to add a review agent
Escalation threads.send_message available in scripts Whether to route sensitive requests to humans
Behavioral rules Skills loaded every conversation What rules to encode
Validation Sandboxes and eval framework available Writing and running evals

The platform handles data isolation. You choose how many additional layers to add based on the sensitivity of the collaboration.

Start with Layer 1. Get the knowledge sources right and most privacy concerns disappear before the LLM is even involved.