docs/apps/custom-apps.md

Customize an app

Customizing an app is not making a new app. A workspace changes an app's behavior; a new app is a change to Vocion itself.

Override a plugin's files

A plugin is a bundle of workspace files (agents, skills, playbooks, missions, automations, teams, object types, pages, trust rules) loaded as an inherited layer under your workspace. A workspace overrides any of them by slug:

  • An agent, object type or mission: a same-slug YAML file marked extends: core patches the plugin's. Scalars replace; arrays replace unless you write $append / $remove. A same-slug file without the marker is an error — declare intent or rename.
  • A skill (SKILL.md folder), automation, team or learning step: a same-slug file replaces the plugin's whole file.
  • disable: in workspace.yaml switches off a plugin's agents, skills and playbooks.
  • Per-plugin switches go under pluginSettings:
    plugins: [software-factory]
    pluginSettings:
      software-factory: { narrateRecordings: false }
    
  • A rule in your trust.yaml for the same action replaces the plugin's.

Each enabled plugin's version is folded into the workspace version (…+data-rooms@1.0.0+proposals@1.0.0), so every run records exactly what ran.

Add pages to an app

A workspace page (pages/<slug>.yaml, served at /dashboard/p/<slug>) whose nav.section names one of an app's sections appears inside that app — for example nav: { section: GTM }. It never becomes an app of its own.

Add a new app

Apps are defined only in vocion-core, at packages/core/templates/apps/<id>/app.yaml:

id: field-service
name: Field Service
icon: wrench
order: 4
description: Jobs, crews and the schedule that keeps them on time.
plugins: [field-jobs]          # plugins under packages/core/templates/plugins/
entry: /dashboard/p/jobs
nav: [Jobs]

A workspace has the app when any listed plugin is on. Plugins and apps also load only from core's templates/, so a new app means a fork or a pull request to vocion-core. If what you need is true of one company or one vertical, it belongs in a workspace, not in a new app.