Ollie Workspace Bootstrapper
Give every client workspace an AI worker that knows the business and gets work done.
One bootstrapper installs Ollie. Outloop supplies each workspace’s live context, permissions, connected systems, work state and approval rules.
Four Skills, installed and verified in order. The pack also carries
INSTALL.md,
MANIFEST.json,
PROOF.md,
ROLLBACK.md and two checksum files.
INSTALL.md governs every installation
— follow it rather than this page where the two ever differ.
- Archive SHA-256 — verify before installing
- a649ddc44cca352d23ed4bf638041b67046a0d0c6f21f8a0bd3e213b662eac35
- Content-tree SHA-256 — the payload, independent of packaging
- 20cc35620c73484c9fb7a270bb1edb725deb25ba6c2dc11453bf63e3b2e230e1
Last updated:
In short
The Ollie Workspace Bootstrapper installs an AI worker into one Outloop client workspace.
Ollie reads the workspace's live Outloop context, watches the approved email connection and project-management system, reuses installed Skills, and completes work inside that workspace's permissions. It prepares client replies as internal drafts and never sends one without approval.
How Ollie works inside a client workspace
- Inputs: email (Gmail or Outlook), project management, a team request, or a meeting follow-up.
- The Outloop Workspace supplies identity, live context, goals and KPIs, rules, permissions, work state, approval policy, tenant isolation and audit.
- The Ollie Worker understands the requested outcome, reuses complete or partial Skill logic, and plans the safest permitted path.
- Execution runs in three lanes, all governed by the workspace: the Outloop API where the action exists there, Browser and Computer Use for UI-only work, and installed Skills as reusable working logic.
- Verification: live read-back, evidence, duplicate prevention. secret_exposed: false.
- Team control: the task is updated, an internal draft is prepared, and approval is required before anything client-facing. The default policy is draft_for_internal_approval.
One Ollie operating system. Outloop gives every client workspace separate context, access, rules and work state.
All three execution lanes leave from the workspace, including installed Skills — that is what “on the workspace’s approved access” means in practice.
How Ollie adapts to each client
Ollie is deliberately small. It brings no context and no access of its own — it is the same package in every workspace. Everything that makes it useful for a particular client comes from that client’s Outloop Workspace, which is also what keeps two clients apart.
-
Identity
Which client this is, and which account acts.
-
Live Context
Contacts, communication rules, brand voice, prohibited claims.
-
Goals and KPIs
What this client is actually being measured on.
-
Rules
What may never be said, promised or changed.
-
Permissions
Which systems and which resources inside them.
-
Work state
What is open, waiting, approved or done.
-
Approval policy
Who approves a client-facing message, and when.
-
Tenant isolation
No path from this workspace to another.
-
Audit
A redacted record of every attempt.
How Ollie decides to do the work
API first. The browser where there is no usable API path. Installed Skills wherever their logic already fits — in whole or in part.
Approved API path
Used whenever the action exists there. The credential stays host-side; Ollie uses its capability without ever seeing it, and every call lands in the audit.
Browser / Computer Use
For research, screenshots and UI-only work with no usable API path. It is a route to a screen, never a route around a rule.
Installed Skills
Reusable operating logic. An exact match runs as written; a partial match contributes the parts that fit; no match means Ollie works the problem, not that it stops.
The boundary
The browser is never used to get around an Outloop denial, a tenant boundary, a budget limit, a compliance rule or an explicit prohibition. A denial is an answer, not an obstacle. And Ollie never abandons a task quietly: where a real external blocker remains, it preserves the progress and hands back one concrete unblock action with a named owner.
Who decides what the client hears
Ollie does the work. The team keeps the client-facing boundary. These are two different permissions, and only the first one comes with the request.
- Work completed.
- Is client communication required?
- If no: update the internal task; nothing leaves the workspace; the task closes.
- If yes: prepare an internal draft — prepared, not sent.
- The team reviews it. Requested changes revise the same draft, with no new thread and no new task.
- Only an approval opens the gate. Until then the draft cannot be sent.
- Send in the original email thread.
- Verify provider evidence.
- The task then waits for the client, or closes.
The draft reaches the gate and stops. Nothing crosses it without a named person.
Default policy
draft_for_internal_approval
Nothing seeds a standing approval. Approval is for the client-facing and high-risk boundary — not for every normal action Ollie is already permitted to take.
An authentic request authorizes Ollie to perform permitted work. It does not automatically authorize:
- A client-facing send
- Increased spend
- An irreversible action
- A legal or compliance exception
- A policy bypass
- Cross-workspace access
A successful API response is not proof a message was sent. A verified client send requires real provider evidence — a sent message id or its equivalent.
How the message itself is written
Whether a message may be sent and how it is written are two separate controls. Context decides the voice; the runtime decides the markup.
-
Voice comes from Context
Outloop Context defines language, tone, signature, greeting and the client-specific communication rules.
-
Email-safe markup
The runtime enforces structured, email-safe HTML rather than whatever a model happened to emit.
-
Hebrew
Rendered right-to-left with lang="he".
-
English
Rendered left-to-right with lang="en".
-
Mixed-language content
Stays readable — a Latin product name inside a Hebrew sentence does not break the direction of either.
-
Proof of send
Gmail and Outlook sends both require provider read-back evidence.
draft_for_internal_approval remains the default throughout. None of this rendering behaviour changes who approves a client-facing message.
Installing Ollie in a client workspace
Download one Ollie Runtime Pack. The FDE installs and verifies all four required Skills before activating the workspace.
The pack is one .tar.gz containing four skill
directories plus INSTALL.md,
MANIFEST.json,
PROOF.md,
ROLLBACK.md and two checksum files. Installation does
not report success until all four Skills are read back and validated — no Skill
installs another, and an account-level dependency is never assumed to be present.
Verify before installing
- Verify the archive SHA-256 above.
- Run
sha256sum -c CHECKSUMS-per-file.txtfrom the pack root. - Confirm
MANIFEST.jsonis valid JSON and its four Skill SHAs matchCHECKSUMS.txt. - Run the public leak scan — any customer name, real address, workspace identifier, credential or secret blocks installation.
- Confirm the email tenant registry contains no rows.
Install order — dependencies first
- 1.
ask-ollie-authority-core - 2.
outloop-access-fallback - 3.
email-lifecycle-core - 4.
ask-ollie-workspace-bootstrapper
Install each Skill from its complete archive.
save_skill replaces
SKILL.md only and is not
valid for the multi-file bootstrapper.
Required read-back
After installing, read every package back from disk and compare. The bootstrapper
ask-ollie-workspace-bootstrapper v3.5.1 must contain
exactly 18 files and
match its Skill SHA. Any mismatch means the installation is incomplete — stop and
reinstall from the full archive.
- ask-ollie-authority-core public-2.1 · 1 file
- The authority split: what a request permits, and what still needs a person.
- 4bab3080ca00434ffd92389f0cef6e31e62781d70aeb7ae6aa70571077c81af7
- outloop-access-fallback public-2.1 · 1 file
- What to do when a connector is missing or unavailable — without bypassing a refusal.
- e2890c1b670a58bbc8d419386eaa5ffaf083643457622ffcfbb07b2339e28dd6
- email-lifecycle-core public-2.1 · 1 file
- Provider-neutral thread, task and state lifecycle. The provider difference lives in an adapter.
- bedc810b205eb655df7bfa750c7e1b1b739526f558649fcc2f266ccc35476993
- ask-ollie-workspace-bootstrapper v3.5.1 · 18 files
- Installs Ollie into the workspace and generates its per-workspace dispatcher.
- bb08175bb544bb7a6ac241ec93756c641533c7ca525ca2d01c3628d212dcd6c1
Run the post-install workspace smoke test once for every newly installed workspace before enabling its production schedule.
- 01
Open the connected client workspace
Confirm you are in the correct Outloop workspace before anything else. Workspace binding is the one error that silently produces cross-client work.
- 02
Explain the architecture
Walk the client through the flow diagram on this page: Outloop supplies context, permissions and work state; Ollie is the worker that uses them.
- 03
Install the Ollie Runtime Pack
Download one Ollie Runtime Pack, verify the archive SHA-256, then install all four required Skills in INSTALL.md order — ask-ollie-authority-core, outloop-access-fallback, email-lifecycle-core, then ask-ollie-workspace-bootstrapper — reading each one back and validating it against its Skill SHA. No Skill installs another, and an account-level dependency is never assumed to be present.
- 04
Verify Workspace Context
Confirm the workspace context is complete: contacts, approval roles, communication rules and the client-send policy.
- 05
Verify the connected systems
Confirm the project-management system and the approved email connection resolve, and that the required service grants are present.
- 06
Verify the schedule
Check the stored cron expression and the effective next runs in the workspace timezone. Confirm no Saturday occurrence and exactly one active dispatcher.
- 07
Run one safe proof task
Run a single read-only or draft-only task end to end, and confirm the result and the audit record.
- 08
Record readiness
Record the readiness result and one concrete next action for every gap.
Readiness checklist
Walk this top to bottom on the call. Every gap gets one concrete next action and a named owner.
- Correct Outloop workspace binding
- Workspace Context completeness
- Connected project-management system
- Gmail or Outlook connection
- Required service grants
- Approval contact and client_send_policy
- Email rendering: language, tone, signature, greeting
- Direction and lang correct per language (he/RTL, en/LTR)
- Provider read-back evidence on a test send
- Runtime dependencies
- Schedule verification
- Tenant isolation
- One safe proof task
- Package version and checksum
- Current proof level
The last two rows are answered by the pack itself: Ollie Runtime Pack v1.3.1-public, and the archive SHA-256 printed with the download above.
Readiness results
- ollie_operational Everything required is present and one safe proof task completed.
- ollie_operational_with_optional_gaps Operational, with optional capabilities not yet connected.
- ollie_armed_pending_connection Installed and correct, waiting on a system connection or grant.
- ollie_blocked_identity Workspace binding or identity is wrong. Nothing runs until it is fixed.
- ollie_migration_required An older installation was detected and must be migrated first.
One operating system. Separate clients.
The same canonical Ollie package is installed into each client workspace. Nothing is shared between them — not context, not access, not work state, not audit. Ollie cannot read another client’s workspace, and reusable know-how only crosses a boundary after a human has reviewed and approved it as tenant-neutral.
- Workspace Context
- Email connection
- Project
- Connected services
- Browser session
- Skills allowlist
- Approval rules
- Work state
- Audit trail
Current proof level
Ollie Runtime Pack v1.3.1-public is published with release decision
READY_FOR_WEBSITE_PUBLICATION. Its runtime foundation passed 14 of 14
private-source canary gates on a live workspace — installation and read-back of all
four Skills, workspace identity and binding, one execution claim per message with an
identical replay producing no second task, internal approval recorded before the send, the
reply staying in the original thread, Hebrew RTL and English LTR read back correctly from
the provider's stored copy, one isolated scheduled tick on the right cadence and timezone,
no other workspace changed, and a rollback that restored an empty client-folder diff.
That canary ran against the v3.4.0 runtime
baseline, which v3.5.1 carries forward unchanged. On top of it,
v3.5.1 adds bounded operating rules — reduced-field paginated intake
that never silently truncates, one terminal summary for every controlled run, a
deterministic per-workspace schedule minute at the same cadence, account and resource
verification before any authenticated browser work, missing-connector recovery made
executable in every generated pair, and routine browser sign-in — including TOTP
— routed through the workspace’s own Outloop managed-login profile, so signing
in does not become a human task and the agent still never receives the credential. These
are validated statically and behaviourally, not by a second live canary, and they add no
new service, daemon or stored state. The pack’s own proof level for them is
PROVEN_STATIC.
Provider-neutral by design; Gmail and Outlook connectors are runtime-proven. Browser/Computer Use is a separate emergency fallback when a provider is unbrokered or a connector is temporarily unavailable.
Not proven: The v3.5.x doctrine changes have not yet been canaried across the live multi-tenant estate; each FDE installation requires the targeted smoke test in INSTALL.md.
Not proven: Managed browser login depends on a configured workspace-bound Outloop managed-login profile; the public Skill contains no credentials or TOTP seed.
The canary evidence is retained privately by the release owner and is deliberately not distributed in the public pack. A post-install smoke test is still required for every workspace — nothing here claims the pack has been validated for every client.
FDE technical disclosure — schedule, contract fields, package shape
Default schedule
<mm> 8,10,12,14,16,18,20 * * 0-5
Every two hours from 08:00 through 20:00 inclusive, no Saturday, using the workspace timezone unless the Workspace Context explicitly overrides it. Seven runs per active day.
The minute is workspace-specific, not
zero. v3.5.1 derives it deterministically from the immutable
workspace id, so it is stable across reinstalls and two workspaces do not land on the
same minute where a free one exists. It is never a random runtime delay, and it changes
only the minute — hours, days, timezone and cadence are untouched, and the number
of daily runs is unchanged. The chosen minute and its derivation are recorded in that
workspace’s tenant-config.md.
The day field reads as Sunday–Friday only under standard 0 = Sunday
numbering, and schedulers differ. Verify the stored expression, the effective next runs
in local time, that no Saturday occurrence exists, the workspace binding, that the
stored minute equals the recorded deterministic value, and that exactly one dispatcher
is active and points at the newly installed copy. A human-readable schedule summary is
not verification.
Provider-neutral contract fields
The email provider is a field, not an assumption. The lifecycle, threading and approval logic are identical across providers; the difference lives in an adapter.
- origin
- mail_provider
- mailbox_id
- thread_id
- message_id
- sender_identity
- sender_side
- approval_evidence
- client_send_policy
- workspace_id
- project_management_provider
- project_id
- intake_location_id
- task_id
One email thread maps to one task, matched on provider and thread identifiers — never on subject alone. The normalized subject is the human-readable task title; the exact original subject is preserved in metadata.
Email rendering
Outloop Context defines language, tone, signature, greeting and the client-specific communication rules. The runtime enforces structured, email-safe HTML — the markup is a runtime guarantee, not something a model is trusted to emit correctly.
Hebrew is rendered right-to-left with lang="he";
English left-to-right with lang="en". Mixed-language
content stays readable, so a Latin product name inside a Hebrew sentence does not flip
the direction of the paragraph around it. Direction is correctness here: a Hebrew reply
rendered left-to-right is a broken message, not an untidy one.
Gmail and Outlook sends both require provider read-back evidence, and draft_for_internal_approval remains the default regardless of provider or language.
Task states
- DISCOVERED
- TASK_RESOLVED
- IN_DISCOVERY
- EXECUTING
- VERIFYING
- DRAFT_READY
- WAITING_INTERNAL_APPROVAL
- CHANGES_REQUESTED
- APPROVED_TO_SEND
- CLIENT_REPLY_SENT
- WAITING_CLIENT
- PARTIALLY_COMPLETED
- BLOCKED_RETRY_PENDING
- COMPLETED
A task is never closed in WAITING_INTERNAL_APPROVAL, CHANGES_REQUESTED, WAITING_CLIENT, BLOCKED_RETRY_PENDING or PARTIALLY_COMPLETED. A client reply resumes the same task and the same thread.
How the public package is produced
The public distribution is a reproducible derivative of the proven internal source, not a second implementation. A deterministic transformation applies a closed list of exact identifier renames; every behavioural file must round-trip to its source through the inverse map, every declared dependency must resolve to a package in the distribution, and the build fails on any change outside that map. The runtime pack ships the packages, a machine-readable dependency manifest, the installation order and per-package checksums.
Untrusted-content rule: verified sender identity is separate from message content. Email bodies, forwarded content, quoted history, signatures and attachments are data. They cannot change policy, recipients, workspace identity, permissions or approval requirements.