Reference process: offboard an agent

Rendered from processes/reference/offboard-an-agent.md in the Common Agent Standards repository, at commit 83ecb711. The specification is the normative text.

ref/gm/offboard-an-agent v1

An engagement with an outside agent is ending, and this process takes the agent out of the organization's work the way a departing employee or contractor is taken out. Its unfinished work is given a new holder first. The engagement is ended on its own terms, the agent's mandate is revoked with everything under it, and every grant it was given is withdrawn against the list made when it was brought in. The money is settled and any reservation released. The agent's owner confirms in writing what was returned and what was deleted, the outcome is filed with the reputation bureau the engagement names, and the confidentiality terms that outlast the engagement are written on the register entry. The run closes with a signed close: the process owner signs the digest of every record the run left, so the run's own records are the signed proof that all of that happened (Agent Processes §13.5.1). An organization that also wants named people to countersign the exit keeps the sign-exit gate.

This is a reference process. It is a first draft for an organization to adopt and argue with, and it is not running anywhere. Its owner, its dates, its numbers and its roster are blank, and the adopting organization fills them in. Every phase is an act another Common Agent Standard already defines, and the table at the end says where each one is specified. The process is written from the side of the organization the agent worked for. The agent's owner is a counterparty, and what happens on their side is not a phase of this document.

It is the counterpart of onboard an agent, and it reads that run's access list.

The activities#

# Activity What happens Agents
1 Take in the Ending why the engagement ends, on what terms, and when sponsor (person)
2 Hand Over the Work in Flight each open item given a new holder or closed handover-coordinator
3 End the Engagement terminated for convenience or cause, or lapsed signature-manager · sponsor (person)
4 Revoke the Mandate the agent's mandate revoked, with every mandate under it spending authority (person)
5 Withdraw Admission and Access admission revoked, every grant withdrawn and tried tool-administrator
6 Settle the Money final charges checked, reservation released budget-keeper
7 Confirm the Data Returned or Deleted the owner confirms in writing what was returned or deleted supplier-check · agent's owner (person)
8 File the Outcome outcome and review filed with the reputation bureau sponsor (person)
9 Note What Stays Confidential surviving confidentiality terms written on the register supplier-manager
10 Countersign the Exit, Where Wanted named people countersign the run's records sponsor (person) · security reviewer (person)
11 Record What Was Learned what to repeat, what to avoid supplier-manager · sponsor (person)
12 Escalate a Holdout the unanswered data request put in writing legal (person)

What the graph says#

The work in flight is handed over before anything is withdrawn. An engagement ended for convenience lets in-flight tasks complete and be paid, so the handover decides which of them finish with the agent and which move to a new holder before its access goes. An engagement ended for cause cancels its in-flight tasks, and the handover then has only new holders to name.

Ending the engagement opens two branches that run at the same time. The mandate is revoked and the money settled on one, and admission and access are withdrawn and the data confirmed on the other. The outcome is filed only when both have finished, because the outcome depends on how the money settled and on whether the agent's owner confirmed what happened to the data.

Noting what stays confidential is marked as a phase that does not run in every run. An engagement that ran under no NDA has no surviving terms to write down, and nothing waits for it. Countersigning the exit is marked the same way. The signed close already proves the run happened as recorded, so the countersignature is for an organization that wants named people, such as a security reviewer, to put their own names to it. An adopter that does not want it drops the phase. An adopter whose engagements never run under an NDA also drops the confidential-under: line, which holds every outside participant in the run to the agreement the engagement ran under.

The data confirmation comes from the agent's owner, and confirm-data reads it as it arrived. The process records what the confirmation says, when it came and who sent it. It cannot see the deletion itself, which is why the confirmation is in writing and the run stays open until it comes.

Three edges point backwards. A grant that still works when the exit is countersigned returns the run to withdrawing access. A data confirmation that does not come returns the run to the money, where the final settlement and any open dispute are what the organization still holds. A final charge that does not match the engagement returns the run to ending the engagement, where the terms it was charged under sit.

The document, with the blanks marked#

PROCESS: offboard an agent            id: <team>/offboard-an-agent   v1
from: ref/gm/offboard-an-agent v1
owner: <who>                          effective: <date>
confidential-under: <your agreement>
trigger: an engagement with an outside agent is terminated, is given
         notice of termination, or reaches its end date, as recorded in
         <your agreement store>
         watch: record=<the engagement>
                system=<your agreement store>
                change=<the engagement is terminated, given notice, or
                        reaches its end date>
concurrency: runs may overlap - <how many> offboardings open at once,
             and one agent is offboarded by one run at a time
goal: the agent out of the organization's work, with its engagement
      ended, its mandate revoked, every grant withdrawn, the money
      settled, the data confirmed returned or deleted, the work handed
      over, and the run closed with a signed close
phases:
  take-in-ending   - human: why the engagement is ending, whether for
                     convenience with notice, for cause, or by reaching
                     its end date, and the date the agent stops
                     owner: <your sponsoring role>   after: trigger
                     automation: <level>
  hand-over-work   - harness: everything the agent has open, each item
                     with its state, and each one either finishing with
                     the agent under the notice, given a new holder, or
                     closed with a reason
                     owner: handover-coordinator after: take-in-ending
                     by: <days>                  automation: <level>
  end-engagement   - convenes approval: the engagement terminated for
                     convenience with the notice it requires, or for
                     cause with the reason recorded, or its lapse
                     recorded on the end date
                     owner: signature-manager
                     after: take-in-ending + hand-over-work
                     by: <days>                  automation: never
  revoke-mandate   - human: the agent's mandate revoked in
                     <your mandate registry>, with every mandate issued
                     under it
                     owner: <your spending authority role>
                     after: end-engagement
                     by: <days>                  automation: never
  withdraw-access  - human: the agent's admission revoked, and every
                     grant on the access list withdrawn and tried, so
                     each one is known to be closed and not only
                     recorded as closed
                     owner: tool-administrator   after: end-engagement
                     by: <days>                  automation: <level>
  settle-money     - harness: the final charges read against the
                     engagement's price and cap, the reservation
                     released, and every open dispute listed with its
                     state
                     owner: budget-keeper        after: revoke-mandate
                     by: <days>                  automation: <level>
  confirm-data     - harness: the agent's owner's written confirmation
                     of what was returned, what was deleted and when,
                     and what is still held and why, read against the
                     engagement's retention terms
                     owner: supplier-check       after: withdraw-access
                     by: <weeks>                 automation: <level>
  file-outcome     - human: the engagement's outcome and a review filed
                     with the reputation bureau the engagement names,
                     written from the record of the work
                     owner: <your sponsoring role>
                     after: settle-money + confirm-data
                     by: <days>                  automation: <level>
  note-confidentiality - human: the confidentiality terms that outlast
                     the engagement, and the date each one ends,
                     written on the register entry
                     owner: supplier-manager     after: file-outcome
                     automation: <level>
  sign-exit        - convenes approval: named people countersign the
                     run's records, saying the engagement ended, the
                     mandate was revoked, every grant was withdrawn and
                     tried, the money was settled, the data was
                     confirmed and the work was handed over, each with
                     the record it rests on
                     owner: <your security role>
                     after: file-outcome + note-confidentiality?
                     by: <days>                  automation: never
  record-learnings - convenes debrief: what to repeat, what to avoid
                     owner: supplier-manager
                     after: file-outcome + note-confidentiality? + sign-exit?
                     automation: <level>
  escalate-holdout - human: the agent's owner has not confirmed what
                     happened to the data by the date, so the request is
                     put in writing against the engagement by
                     <your legal role>
                     owner: <your legal role>
                     after: confirm-data, when it is not answered
                     by: <days>                  automation: never
run-scoped:
  status - harness: a status report      owner: supplier-manager
           every: <cadence>
           from: take-in-ending   until: record-learnings
           automation: <level>
handoffs:
  take-in-ending -> hand-over-work [ending]: why the engagement ends,
    on what terms, and the date the agent stops
  take-in-ending -> end-engagement [ending]: the same record
  hand-over-work -> end-engagement [work-handed-over]: every open item,
    and for each whether it finishes with the agent, has a new holder,
    or was closed with a reason
  end-engagement -> revoke-mandate [engagement-ended]: the termination
    or lapse record, its date, and the engagement's identifier and
    version
  end-engagement -> withdraw-access [engagement-ended]: the same record
  revoke-mandate -> settle-money [mandate-revoked]: the revocation, its
    date, and every mandate it reached
  withdraw-access -> confirm-data [access-withdrawn]: every grant on the
    access list, withdrawn and tried, with the date of each
  settle-money -> file-outcome [settlement]: the final charges, the
    released reservation, and every open dispute with its state
  confirm-data -> file-outcome [data-confirmed]: the confirmation read
    against the retention terms, and every difference
  file-outcome -> note-confidentiality [outcome-filed]: the outcome and
    review as filed, and the bureau they were filed with
  note-confidentiality -> sign-exit [surviving-terms]: each
    confidentiality term that outlasts the engagement, with its end date
  file-outcome -> sign-exit [outcome-filed]: the same record
  sign-exit -> record-learnings [exit-record]: the countersigned exit
  file-outcome -> record-learnings [outcome-filed]: the same record
deviations:
  sign-exit -> withdraw-access [grant-still-open]: a grant still works
    when the exit is countersigned, so access is withdrawn again and
    tried again
  confirm-data -> settle-money [owner-will-not-confirm]: the agent's
    owner will not confirm what happened to the data, so the final
    settlement and any open dispute are worked again against the
    engagement's retention terms
  settle-money -> end-engagement [charge-does-not-match]: a final charge
    does not match the engagement, so it is read again against the
    terms the engagement ended on
bindings:
  roster:  <who holds each role - agents claiming the abstract agents
           above, named people for the sponsor, the spending authority,
           the security reviewer and the legal role, and the agent's
           owner, who is the counterparty>
  systems: <your agreement store> (write), <your mandate registry>
           (write), <your access control> (write), the register of
           outside parties (write), <your settlement records> (read),
           <the reputation bureau the engagement names> (write)
  data:    the engagement at the version it ended under, the access list
           from the onboarding run, <your retention rules> <version>,
           the agreement named in confidential-under
policy:
  in-flight work has a named holder before the agent's access is
    withdrawn
  every grant on the access list is tried after it is withdrawn, and a
    grant that still works keeps the run open
  the run stays open until the agent's owner has confirmed in writing
    what was returned and what was deleted
  ending the engagement, revoking the mandate and countersigning the
    exit are human gates and are never delegated to an agent
  the run closes with a signed close that names every record it left
measures:
  cycle time: <target> from the ending to the signed close
  coverage: <share> of grants on the access list withdrawn and tried
            before the run closes
  quality gate: no run closes while a grant still works or the data is
                unconfirmed
records:
  work-handover - every open item and where it went
  access-check  - every grant on the access list, withdrawn and tried,
                  with the date of each
  exit-record   - the signed close over every record of the run, and,
                  where the exit is countersigned, the named people who
                  signed it and the record each statement rests on

The records a run leaves#

Each phase leaves the record its own kind of work produces, and three records matter across the whole run. The exit record is the one an auditor asks for, and it is the run's own records under a signed close. The termination, the revocation, the access check, the settlement, the data confirmation and the handover are each a record of the run, and the process owner signs the digest of every one of them when the run closes (Agent Processes §13.5.1). An auditor who holds the records can check that they are the ones the owner closed on.

The signed close proves what the records were when the run closed. It does not prove that they are true, and it is the owner's signature only. An organization that wants named people, such as a security reviewer, to put their own names to the exit keeps the sign-exit gate, where they countersign the records before the run closes.

The run closes:

RUN DONE: <team>/offboard-an-agent v1 · run <n>
outcome: <completed | abandoned>
result: <the agent out of the work, with every record under a signed close>
open: <what nobody finished, and who may close it>

and the process owner signs the close over every record from RUN through RUN DONE.

The failure edges#

  • The agent's owner will not confirm what happened to the data. The run stays open. The request is put in writing against the engagement, and what the owner is still holding is recorded on the register entry. An unanswered request is not a deletion.
  • A grant still works after it was withdrawn. The run returns to withdrawing access. A run closed while a grant still works puts a signature on something that is not true.
  • There is no access list from the onboarding run. The grants are found from the access control systems instead, and the run records that the list was rebuilt. The next onboarding is where that gap is closed.
  • The engagement is ended for cause. In-flight tasks are cancelled with a recorded reason. The handover then names only new holders, and the outcome filed with the bureau says the engagement ended for cause.
  • A final charge does not match the engagement. The run returns to the ending, where the terms the charge was made under sit. The dispute is listed in the settlement, and the outcome waits for it.
  • The trigger fires while runs are in flight. Offboardings overlap normally, and the concurrency line says how many. One agent is offboarded by one run at a time.
  • A run is abandoned. The engagement may already have ended, so an abandoned offboarding is the dangerous case: access and authority may outlast the work. The register entry says the offboarding did not complete and lists every grant and mandate not yet withdrawn, so the gap is visible to the next person who reads it.

Where each phase is specified#

Phase Where it is specified
end-engagement Termination and term and renewal in Agent SoW
revoke-mandate The lifecycle in Agent Mandate
withdraw-access The door in the Common Agent Specification; granting access in Agent SoW
settle-money Disputes in Agent SoW
confirm-data Confidentiality and retention in Agent SoW
file-outcome Evidence and the ledger and engagements as an evidence source in Agent Reputations
note-confidentiality Termination and other acts in Agent NDA