# LocalEndpoint Endpoint Plugin Starter Kit

Use this folder when you want to propose a new endpoint plugin for LocalEndpoint Connect.

Current plugin status:

- `remoteendpoints.com` and `memoryendpoints.com` are the current non-core search-selectable plugins.
- New plugin IDs start as proposals and stay blocked until catalog review and desktop intake support agree.
- Supported tab-ready plugins receive their own top-level Settings tab after the catalog and desktop intake gate recognize them.
- Plugin install metadata does not grant runtime authority.

## Files

- `../localendpoint-plugin-starter-kit.zip`: one-file download of this README, proposed manifest, proposed submission packet, validation checklist, and bundled schema copies.
- `proposed-endpoint.plugin.template.json`: install manifest shape for a future endpoint plugin proposal.
- `proposed-endpoint-submission.template.json`: redacted review packet shape for catalog review.
- `validation-checklist.md`: local checklist before submitting evidence for review.
- `schemas/localendpoint.endpoint-plugin-install.schema.json`: bundled JSON Schema copy for install manifest validation.
- `schemas/localendpoint.endpoint-plugin-submission.schema.json`: bundled JSON Schema copy for submission packet validation.

## Use

1. Download `../localendpoint-plugin-starter-kit.zip`, or use the individual files in this folder.
2. Copy `proposed-endpoint.plugin.template.json` to `{pluginId}.plugin.json`, where `{pluginId}` is the canonical plugin domain.
3. Replace every `example.com` value with the same canonical plugin ID and domain.
4. Keep `installKind` as `separate-install`.
5. Keep `enabled` and `userApproved` false until LocalEndpoint Connect supports and approves the plugin locally.
6. Fill `proposed-endpoint-submission.template.json` with public-safe evidence links.
7. Validate JSON syntax and schema shape.
8. Capture LocalEndpoint Connect evidence from Settings > Plugins and the plugin settings tab once the catalog and desktop intake gate support the plugin as tab-ready.

## Manifest field map

- `schema`: must stay `localendpoint.endpoint-plugin-install.v1`.
- `pluginId`: canonical lowercase domain, such as `example.com`; use the same value in every file.
- `displayName`: human-readable plugin name shown in review surfaces.
- `domain`: canonical lowercase domain; normally matches `pluginId`.
- `installKind`: keep `separate-install`.
- `version`: plugin manifest version being reviewed.
- `installedUtc`: UTC timestamp for the local manifest copy.
- `enabled`: keep false for proposals.
- `userApproved`: keep false for proposals.
- `capabilities`: short capability IDs that are named and justified in the submission packet.

## Submission field map

- `requestedInstallState`: use `proposed` until review accepts another state.
- `requestedCapabilities`: same capability IDs as the manifest, with explanations in the threat model.
- `manifestUrl`: public-safe URL for the proposed manifest, or a redacted placeholder while preparing review.
- `privacyStatementUrl`: public privacy statement for the plugin.
- `threatModelSummary`: what the plugin can do, what it must never do, and which approvals stay local.
- `runtimeAuthorityRequested`: must stay false.
- `requiresSeparateInstall`: must stay true.
- `localApprovalRequired`: must stay true.
- `testEvidence`: schema validation, LocalEndpoint Connect screenshots or exported evidence, and blocked or accepted intake findings.

## Validate locally

Run a syntax check before schema validation:

```powershell
python -m json.tool .\{pluginId}.plugin.json
python -m json.tool .\{pluginId}-submission.json
```

Then validate the manifest against `/schemas/localendpoint.endpoint-plugin-install.schema.json` and the submission packet against `/schemas/localendpoint.endpoint-plugin-submission.schema.json` with any JSON Schema 2020-12 validator. Keep the validation receipt as review evidence.

If you want a copy-paste validator command from inside the starter-kit folder, use the bundled schema copies:

```powershell
npx --yes ajv-cli@5 validate --spec=draft2020 -s .\schemas\localendpoint.endpoint-plugin-install.schema.json -d .\{pluginId}.plugin.json
npx --yes ajv-cli@5 validate --spec=draft2020 -s .\schemas\localendpoint.endpoint-plugin-submission.schema.json -d .\{pluginId}-submission.json
```

Save the terminal output or a redacted screenshot as schema validation evidence.

## Review packet assembly

Create one folder named `{pluginId}-review-packet` and keep it to one folder, six redacted files:

- `{pluginId}.plugin.json`: validated install manifest.
- `{pluginId}-submission.json`: validated submission packet.
- `{pluginId}-schema-validation.txt`: syntax and JSON Schema validation receipt for both JSON files.
- `{pluginId}-connect-evidence.md`: Settings > Plugins search, plugin detail, top-level Settings tab behavior for supported tab-ready plugins, and blocked or accepted intake findings.
- `{pluginId}-privacy-boundary.md`: what never leaves the local machine, which approvals stay local, and which materials are excluded.
- `{pluginId}-threat-model.md`: denied actions, local approval gates, runtime authority posture, and why install metadata alone cannot run anything.

Use the same canonical `{pluginId}` in every file name and inside both JSON documents.

## Capture Connect evidence

1. Open LocalEndpoint Connect.
2. Go to Settings > Plugins.
3. Choose Refresh plugins.
4. Search for the plugin ID.
5. Confirm RemoteEndpoints.com and MemoryEndpoints.com are the current search-selectable non-core plugins unless the catalog has accepted another plugin for search.
6. Confirm unknown or proposed plugin IDs remain blocked or overview-only until catalog review and desktop intake support agree.
7. Capture plugin search, plugin detail, top-level Settings tab behavior for supported tab-ready plugins, and blocked or accepted intake findings.

## Done before submission

- Manifest and submission packet use the same plugin ID.
- JSON syntax check passed.
- Schema validation receipt names both schemas.
- Review packet assembly folder contains exactly the six redacted files named above.
- Capabilities are justified.
- Privacy statement and threat model are public-safe.
- Connect evidence is captured.
- No denied material appears in the packet.

Do not include credentials, private logs, raw prompts, generated private text, localhost targets, private network addresses, command strings, model files, or local endpoint data.
