{{define "agents-page"}} Privatae bastion — automated programs on this machine

Automated programs on this machine

Everything this machine can see that runs on its own or talks to a model, and which of them you have said are yours.

{{template "agents" .}}
{{end}} {{define "agents"}} {{if .Flash}}
{{.Flash}}
{{end}} {{/* A build with no enumerator has to say so. "Nothing is running here" and "nothing looked" read identically otherwise, and the second is the machine you should worry about (agents_other.go, the README, "Observe"). */}} {{if .Blind}}

This machine cannot watch itself.

This build of the bastion has no way to list processes or connections on this platform, so the list below is empty because nothing looked — not because nothing is running. Do not read it as a clean machine.

{{end}} {{/* A read that FAILED is not a machine with nothing on it. Every verdict below is unknown while this is true, and the page must not draw a tick. */}} {{/* The walk failed for THIS render: Blind for one pass, not for the platform. */}} {{if .WalkError}}

This machine could not read its processes just now.

{{.WalkError}}

The list below is empty because nothing looked — not because nothing is running. Reload to try again.

{{end}} {{if .ReadError}}

This machine cannot read its own record of what you marked as yours.

{{.ReadError}}

Until that is fixed nothing below can be called vouched for or not vouched for, and nothing here should be treated as unwanted.

{{end}} {{/* ...and not under the walk banner either: "this machine looked" is the one sentence a failed walk must never draw. */}} {{if not .Blind}}{{if not .ReadError}}{{if not .WalkError}}
{{if .Unsanctioned}}

{{.Unsanctioned}} of {{.Observed}} are not marked as yours.

Marking something as yours is you vouching for it. What is left over is the set worth looking at.

{{else if .Observed}}

All {{.Observed}} are accounted for.

Everything this machine can see has either been launched by your host or marked as yours here.

{{else}}

Nothing automated is running on this machine.

No agent, automation or process talking to a model was found. This machine looked; it did not find anything.

{{end}}
{{end}}{{end}}{{end}}
This page does not stop anything. There is no button here that closes a program. Stopping something running on this machine is directed by your host, and saying that a program is yours is a different act from taking it away.
{{range .Rows}}
{{if .Signature}}{{.Signature}}{{else}}(unnamed){{end}} {{/* The kind is a CLASSIFICATION and takes no colour. Being an agent is not a fault — most of what is on this list on a working machine is the user's own editor — and the chip beside it already carries the only verdict this page makes. */}} {{.Kind}} {{if .Unknown}}unknown {{else if .Sanctioned}}yours {{else}}not marked as yours{{end}}

{{.Why}}

{{if .App}}

This is software you are running rather than an agent, and this machine refuses to close it however your host asks. It is listed and counted because it talks to a model, not because it is suspected of anything.

{{end}}
Process
{{.PID}}{{if .User}}, running as {{.User}}{{end}}
{{if .Origin}}
Started
{{.Origin}}
{{end}} {{/* The FILE and the COMMAND are two different facts and the page shows both. A mark is recorded against the file — the kernel's answer, which the program cannot choose — while the command line is the name it gave itself. Showing only the second is what made a mark forgeable. */}} {{if .Exe}}
File
{{.Exe}}
{{end}} {{if .Cmdline}}
Command
{{.Cmdline}}
{{end}} {{if .Endpoints}}
Talking to
{{range $i, $e := .Endpoints}}{{if $i}}, {{end}}{{$e}}{{end}}
{{end}}
{{/* The evidence list, not a verdict — the same thing the host is shown (origin.go:53). A person deciding whether to vouch for something needs to see what made this machine notice it. */}} {{if .Evidence}} {{end}} {{if not .Unknown}}
{{if .Marked}}
{{else if .Sanctioned}}

Your host vouched for this one. There is nothing to unmark here — the tag it carries was issued by your host and is withdrawn there.

{{else if .ID}}
{{else}} {{/* No kernel path, so there is no identity to mark and no button that could do anything but fail. The reason above already says why; a disabled control here would only imply the machine is withholding something it could do. */}}

Nothing here can be marked as yours until this machine can read which file it is running.

{{end}}
{{end}}
{{end}} {{if .Dormant}}

Marked as yours, but not running right now

These stay on this machine until you remove them, which is the only way a mark ever goes away. They are listed so a mark you no longer want cannot sit here unseen.

{{range .Dormant}}
{{.What}} yours
Marked
{{.At}}{{if .By}}, from {{.By}}{{end}}{{if .ByUser}}, by {{.ByUser}}{{end}}
{{if .Cmdline}}
Looked like
{{.Cmdline}}
{{end}}
{{end}} {{end}} {{if .Expired}}

Marks that no longer count

These were recorded against the name a program gave for itself, which anything on this machine can copy by starting a process with that name. A mark is now recorded against the FILE this machine's kernel says a process is running, which a program cannot choose for itself. The old marks below vouch for nothing. They are still shown because they are your record of a decision you made, and this program does not throw those away quietly. To mark the same program again, find it in the list above while it is running and press “This one is mine”.

{{range .Expired}}
{{.What}} no longer counts
Marked
{{.At}}{{if .By}}, from {{.By}}{{end}}{{if .ByUser}}, by {{.ByUser}}{{end}}
{{if .Cmdline}}
Looked like
{{.Cmdline}}
{{end}}
{{end}} {{end}}

Checked {{.CheckedAt}}. What this machine can see here is deliberately soft: a program that does not want to be noticed can rename itself, and a mark is a convenience, not a lock.

{{end}}