Skip to content
Back to skills

Open Horizons Portal Integration

ASecurity

Implements and validates one product-specific integration in the existing Open Horizons Backstage portal and agent services. Use when wiring routes, plugins, catalog entities, app configuration, AI Chat SSE behavior, runtime APIs, or Backstage Kubernetes manifests without provisioning Azure or deploying live workloads.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 4, 2026
ai-agentsgobashkubernetesazuregitapifrontendbackendsecurity

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 4, 2026

npx -y skills add paulasilvatech/awesome-harness-primitives --skill open-horizons-portal-integration --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Open Horizons Portal Integration?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Open Horizons Portal Integration
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/paulasilvatech-open-horizons-portal-integration-awesome-harness-primitives/badge)](https://www.skillsdirectory.com/skills/paulasilvatech-open-horizons-portal-integration-awesome-harness-primitives)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: open-horizons-portal-integration
description: >-
  Implements and validates one product-specific integration in the existing Open Horizons
  Backstage portal and agent services. Use when wiring routes, plugins, catalog entities, app
  configuration, AI Chat SSE behavior, runtime APIs, or Backstage Kubernetes manifests without
  provisioning Azure or deploying live workloads.
---

<!-- Generated from harness/github-copilot/plugins/open-horizons-platform/skills/open-horizons-portal-integration/SKILL.md by harness/claude-code/scripts/convert_from_copilot.py. Edit the source, not this file. -->

# Open Horizons portal integration

Wire one product capability through the existing Backstage and runtime surfaces without crossing
identity, authorization, streaming, model-routing, or deployment boundaries.

## When to invoke

- Add or connect a portal route, navigation entry, frontend plugin, or backend module.
- Wire AI Chat to an existing Open Horizons agent runtime while preserving its SSE contract.
- Add product-specific catalog, configuration, or Kubernetes integration.
- Repair a broken connection between the Backstage frontend, proxy, runtime service, and manifest.

## Owning paths

Start from the actual surface that owns the behavior:

| Surface | Repository path |
| --- | --- |
| App composition and navigation | `backstage/packages/app/` |
| Backend composition and permission policy | `backstage/packages/backend/` |
| AI Chat plugin and SSE client | `backstage/plugins/ai-chat/` |
| Catalog entities | `backstage/catalog/` |
| Shared and environment config | `backstage/app-config*.yaml` |
| Kubernetes manifests | `backstage/k8s/` |
| Agent runtimes | `backstage/server/agent-api/`, `agent-api-impact/`, `agent-api-maf/`, `agent-api-sk/` |

Do not create substitute portal roots such as top-level `packages/`, `plugins/`, `golden-paths/`, or
`docs/`.

## Focused skill selection

Load only the Backstage skills needed by the selected surface:

| Change | Skill |
| --- | --- |
| Config layers or schema | `open-horizons-backstage-app-configuration` |
| Sign-in or delegated identity | `open-horizons-backstage-authentication` |
| Authorization or resource filtering | `open-horizons-backstage-permissions` |
| Catalog entities or discovery | `open-horizons-backstage-catalog` or `open-horizons-backstage-ai-catalog` |
| Frontend/backend plugin composition | `backstage-plugin-builder` or `open-horizons-backstage-framework` |
| Kubernetes visibility or manifests | `open-horizons-backstage-kubernetes` |
| External provider integration | `open-horizons-backstage-external-integrations` |
| Actions exposed as MCP tools | `open-horizons-backstage-mcp-actions` |

## Procedure

1. Define one user-visible flow and trace it through the existing route, plugin, proxy, backend
   module, runtime endpoint, config, catalog entity, or manifest that owns each hop.
2. Select the focused Backstage skills above and read the applicable path-scoped instructions.
3. Preserve authentication and authorization separately: keep browser requests credentialed,
   enforce permissions in the backend, and never treat a hidden UI control as access control.
4. Preserve the AI Chat contract when involved: `/api/proxy/agent-api` remains the Backstage proxy
   boundary, `/api/agents/chat` remains SSE, frames remain structured, fragmented frames and safe
   errors remain tested, and the frontend does not call a model provider directly.
5. Preserve model routing: repository harness model IDs stay on the GitHub Copilot surface, while
   application agents use the Microsoft Agent Framework and Microsoft Foundry deployment profiles
   owned by the application service. Fail closed on unknown routes or deployments.
6. Put shared defaults in `app-config.yaml`, environment overrides in the matching overlay, and
   secrets only in approved external configuration. Do not expose secrets through frontend config,
   catalog metadata, logs, or manifests.
7. Make the smallest end-to-end edit and add tests at the changed contract boundary.
8. Run the narrow package test, typecheck, config check, or runtime test that exercises the flow.
9. If `backstage/k8s/` or component selection changes, run:

   ```bash
   scripts/render-manifests.sh --dry-run
   ```

   Render local manifests without `--dry-run` only when generated output is an expected artifact
   of the task. The script is irrelevant for frontend-only, config-only, catalog-only, or runtime-
   only changes.
10. Report the flow, touched surfaces, focused skills, boundary checks, validation, and handoffs.

## Output template

```markdown
## Portal integration result

**Status:** completed | blocked
**Flow:** <user action -> portal -> backend/runtime -> result>

### Surfaces
| Path | Responsibility | Change |
| --- | --- | --- |

### Boundaries
| Auth | Permission | SSE | Model routing | Secrets |
| --- | --- | --- | --- | --- |

### Validation
- `<focused command>`: PASS | FAIL | NOT RUN - <evidence>
- `scripts/render-manifests.sh --dry-run`: <PASS | NOT RELEVANT | BLOCKED>

### Handoffs
- <Azure provisioning, organization settings, security review, deployment, or none>
```

## Limits

- Do not provision Azure, change organization settings, deploy live workloads, or manage secrets.
- Do not weaken backend permissions, bypass Backstage credentials, or replace SSE with an
  incompatible response contract.
- Do not pass GitHub Copilot model identifiers to application agents or Foundry deployment names
  to repository harness agents.
- Do not invent paths or broaden a product integration into a platform redesign.

## Quality gate

- [ ] One user flow is traced through real Open Horizons paths.
- [ ] Only relevant Backstage skills and surfaces were selected.
- [ ] Authentication, backend authorization, SSE, model routing, and secrets boundaries are preserved.
- [ ] Focused tests cover the changed integration contract.
- [ ] Manifest rendering ran only when Kubernetes or component selection made it relevant.
- [ ] Azure, organization, live deployment, and secret-management work has a separate owner.

Files in this skill

  • SKILL.md6 KB
  • evals/eval_set.json1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.