docs/companies/companies-spec.md
Extension of the Agent Skills Specification
Version: agentcompanies/v1-draft
An Agent Company package is a filesystem- and GitHub-native format for describing a company, team, agent, project, task, and associated skills using markdown files with YAML frontmatter.
This specification is an extension of the Agent Skills specification, not a replacement for it.
It defines how company-, team-, and agent-level package structure composes around the existing SKILL.md model.
This specification is vendor-neutral. It is intended to be usable by any agent-company runtime, not only Paperclip.
The format is designed to:
SKILL.md remains owned by the Agent Skills specification.A package root is identified by one primary markdown file:
COMPANY.md for a company packageTEAM.md for a team packageAGENTS.md for an agent packagePROJECT.md for a project packageTASK.md for a task packageSKILL.md for a skill package defined by the Agent Skills specificationA GitHub repo may contain one package at root or many packages in subdirectories.
Common conventions:
COMPANY.md
TEAM.md
AGENTS.md
PROJECT.md
TASK.md
SKILL.md
agents/<slug>/AGENTS.md
teams/<slug>/TEAM.md
projects/<slug>/PROJECT.md
projects/<slug>/tasks/<slug>/TASK.md
tasks/<slug>/TASK.md
skills/<slug>/SKILL.md
.paperclip.yaml
HEARTBEAT.md
SOUL.md
TOOLS.md
README.md
assets/
scripts/
references/
Rules:
assets/, scripts/, and references/ are allowedPackage docs may support these fields:
schema: agentcompanies/v1
kind: company | team | agent | project | task
slug: my-slug
name: Human Readable Name
description: Short description
version: 0.1.0
license: MIT
authors:
- name: Jane Doe
homepage: https://example.com
tags:
- startup
- engineering
metadata: {}
sources: []
Notes:
schema is optional and should usually appear only at the package rootkind is optional when file path and file name already make the kind obviousslug should be URL-safe and stablesources is for provenance and external referencesmetadata is for tool-specific extensionsCOMPANY.md is the root entrypoint for a whole company package.
name: Lean Dev Shop
description: Small engineering-focused AI company
slug: lean-dev-shop
schema: agentcompanies/v1
version: 1.0.0
license: MIT
authors:
- name: Example Org
goals:
- Build and ship software products
includes:
- https://github.com/example/shared-company-parts/blob/0123456789abcdef0123456789abcdef01234567/teams/engineering/TEAM.md
requirements:
secrets:
- OPENAI_API_KEY
includes defines the package graphincludes is optional and should be used mainly for external refs or nonstandard locationsCOMPANY.md may include agents directly, teams, projects, tasks, or skillsincludes as the tree/checkbox import UITEAM.md defines an org subtree.
name: Engineering
description: Product and platform engineering team
schema: agentcompanies/v1
slug: engineering
manager: ../cto/AGENTS.md
includes:
- ../platform-lead/AGENTS.md
- ../frontend-lead/AGENTS.md
- ../../skills/review/SKILL.md
tags:
- team
- engineering
manager identifies the root agent of the subtreeincludes may contain child agents, child teams, or shared skillsAGENTS.md defines an agent.
name: CEO
title: Chief Executive Officer
reportsTo: null
skills:
- plan-ceo-review
- review
docs points to sibling markdown docs when presentskills references reusable SKILL.md packages by skill shortname or slugreview should resolve to skills/review/SKILL.md by conventionAGENTS.mdThe preferred association standard between agents and skills is by skill shortname.
Suggested resolution order for an agent skill entry:
skills/<shortname>/SKILL.mdRules:
AGENTS.md whenever possibleAGENTS.md readable and consistent with skills.sh-style sharingPROJECT.md defines a lightweight project package.
name: Q2 Launch
description: Ship the Q2 launch plan and supporting assets
owner: cto
owner should reference an agent slug when there is a clear project ownertasks/ subfolder should be discovered implicitlyincludes may contain TASK.md, SKILL.md, or supporting docs when explicit wiring is neededTASK.md defines a lightweight starter task.
name: Monday Review
assignee: ceo
project: q2-launch
recurring: true
assignee should reference an agent slug inside the packageproject should reference a project slug when the task belongs to a PROJECT.mdrecurring: true marks the task as ongoing recurring work instead of a one-time starter taskrecurring: truepriority, labels, or metadata, but they should not require them in the base package.paperclip.yamlTASK.md portable while still allowing richer runtime systems to round-trip their own automation detailsschedule.recurrence during transition, but exporters should prefer recurring: trueExample Paperclip extension:
routines:
monday-review:
triggers:
- kind: schedule
cronExpression: "0 9 * * 1"
timezone: America/Chicago
schedule.recurrence data may translate it into their own runtime trigger model, but new exports should prefer the simpler recurring: true base fieldA skill package must remain a valid Agent Skills package.
Rules:
SKILL.md should follow the Agent Skills specmetadata.paperclip or metadata.sourcesscripts/, references/, and assets/ exactly as the Agent Skills ecosystem expectsskills.sh compatibility as a first-class goal rather than inventing a parallel skill formatIn other words, this spec extends Agent Skills upward into company/team/agent composition. It does not redefine skill package semantics.
---
name: review
description: Paranoid code review skill
allowed-tools:
- Read
- Grep
metadata:
paperclip:
tags:
- engineering
- review
sources:
- kind: github-file
repo: vercel-labs/skills
path: review/SKILL.md
commit: 0123456789abcdef0123456789abcdef01234567
sha256: 3b7e...9a
attribution: Vercel Labs
usage: referenced
---
A package may point to upstream content instead of vendoring it.
sources:
- kind: github-file
repo: owner/repo
path: path/to/file.md
commit: 0123456789abcdef0123456789abcdef01234567
blob: abcdef0123456789abcdef0123456789abcdef01
sha256: 3b7e...9a
url: https://github.com/owner/repo/blob/0123456789abcdef0123456789abcdef01234567/path/to/file.md
rawUrl: https://raw.githubusercontent.com/owner/repo/0123456789abcdef0123456789abcdef01234567/path/to/file.md
attribution: Owner Name
license: MIT
usage: referenced
local-filelocal-dirgithub-filegithub-dirurlvendored: bytes are included in the packagereferenced: package points to upstream immutable contentmirrored: bytes are cached locally but upstream attribution remains canonicalcommit is required for github-file and github-dir in strict modesha256 is strongly recommended and should be verified on fetchreferenced for third-party content unless redistribution is clearly allowedGiven a package root, an importer resolves in this order:
For pinned GitHub refs:
repo + commit + pathsha256 if presentblob if presentAn importer must surface:
A package importer should build a graph from:
COMPANY.mdTEAM.mdAGENTS.mdPROJECT.mdTASK.mdSKILL.mdSuggested import UI behavior:
Vendor-specific data should live outside the base package shape.
For Paperclip, the preferred fidelity extension is:
.paperclip.yaml
Example uses:
Rules:
Suggested Paperclip shape:
schema: paperclip/v1
agents:
claudecoder:
adapter:
type: claude_local
config:
model: claude-opus-4-6
inputs:
env:
ANTHROPIC_API_KEY:
kind: secret
requirement: optional
default: ""
GH_TOKEN:
kind: secret
requirement: optional
CLAUDE_BIN:
kind: plain
requirement: optional
default: claude
routines:
monday-review:
triggers:
- kind: schedule
cronExpression: "0 9 * * 1"
timezone: America/Chicago
Additional rules for Paperclip exporters:
promptTemplate when AGENTS.md already contains the agent instructionssecretId, version, or type: secret_refrequired or optional semantics and optional defaultsPATH overridesA compliant exporter should:
.paperclip.yaml as a sidecar by defaultreferenced over silent vendoring for third-party contentSKILL.md as-is when exporting compatible skillsA compliant tool must:
license and attribution metadata when importing and exportingAuthoring does not require a lock file.
Tools may generate an optional lock file such as:
company-package.lock.json
Purpose:
Rules:
Paperclip can map this spec to its runtime model like this:
COMPANY.md -> company metadataTEAM.md -> importable org subtreeAGENTS.md -> agent identity and instructionsPROJECT.md -> starter project definitionTASK.md -> starter issue/task definition, or recurring task template when recurring: trueSKILL.md -> imported skill packagesources[] -> provenance and pinned upstream refs.paperclip.yaml -> adapter config, runtime config, env input declarations, permissions, budgets, routine triggers, and other Paperclip-specific fidelityInline Paperclip-only metadata that must live inside a shared markdown file should use:
metadata.paperclipThat keeps the base format broader than Paperclip.
This specification itself remains vendor-neutral and intended for any agent-company runtime, not only Paperclip.
Paperclip should cut over to this markdown-first package model as the primary portability format.
paperclip.manifest.json does not need to be preserved as a compatibility requirement for the future package system.
For Paperclip, this should be treated as a hard cutover in product direction rather than a long-lived dual-format strategy.
lean-dev-shop/
├── COMPANY.md
├── agents/
│ ├── ceo/AGENTS.md
│ └── cto/AGENTS.md
├── projects/
│ └── q2-launch/
│ ├── PROJECT.md
│ └── tasks/
│ └── monday-review/
│ └── TASK.md
├── teams/
│ └── engineering/TEAM.md
├── tasks/
│ └── weekly-review/TASK.md
└── skills/
└── review/SKILL.md
Optional:
```text
.paperclip.yaml
**Recommendation**
This is the direction I would take:
- make this the human-facing spec
- define `SKILL.md` compatibility as non-negotiable
- treat this spec as an extension of Agent Skills, not a parallel format
- make `companies.sh` a discovery layer for repos implementing this spec, not a publishing authority