@agent-loom/loom 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +144 -0
- package/dist/apply.d.ts +56 -0
- package/dist/apply.d.ts.map +1 -0
- package/dist/apply.js +97 -0
- package/dist/apply.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +503 -0
- package/dist/cli.js.map +1 -0
- package/dist/clone.d.ts +38 -0
- package/dist/clone.d.ts.map +1 -0
- package/dist/clone.js +68 -0
- package/dist/clone.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/manifest.d.ts +41 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +454 -0
- package/dist/manifest.js.map +1 -0
- package/dist/renderers/claude.d.ts +15 -0
- package/dist/renderers/claude.d.ts.map +1 -0
- package/dist/renderers/claude.js +180 -0
- package/dist/renderers/claude.js.map +1 -0
- package/dist/renderers/copilot.d.ts +16 -0
- package/dist/renderers/copilot.d.ts.map +1 -0
- package/dist/renderers/copilot.js +191 -0
- package/dist/renderers/copilot.js.map +1 -0
- package/dist/repo-clone.d.ts +72 -0
- package/dist/repo-clone.d.ts.map +1 -0
- package/dist/repo-clone.js +197 -0
- package/dist/repo-clone.js.map +1 -0
- package/dist/resolve-template.d.ts +32 -0
- package/dist/resolve-template.d.ts.map +1 -0
- package/dist/resolve-template.js +75 -0
- package/dist/resolve-template.js.map +1 -0
- package/dist/search-registry.d.ts +31 -0
- package/dist/search-registry.d.ts.map +1 -0
- package/dist/search-registry.js +96 -0
- package/dist/search-registry.js.map +1 -0
- package/dist/search.d.ts +20 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +51 -0
- package/dist/search.js.map +1 -0
- package/dist/skill-fetcher.d.ts +40 -0
- package/dist/skill-fetcher.d.ts.map +1 -0
- package/dist/skill-fetcher.js +99 -0
- package/dist/skill-fetcher.js.map +1 -0
- package/dist/types.d.ts +297 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +42 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +191 -0
- package/dist/validate.js.map +1 -0
- package/dist/workspaces.d.ts +17 -0
- package/dist/workspaces.d.ts.map +1 -0
- package/dist/workspaces.js +72 -0
- package/dist/workspaces.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Loom
|
|
2
|
+
|
|
3
|
+
**Template engine for coding agent workspaces.** Share and apply workspace configurations — instructions, skills, prompts, MCP servers, agents, and repos — across GitHub Copilot, Claude Code, and Cursor.
|
|
4
|
+
|
|
5
|
+
Loom lets teams maintain reusable workspace templates in a GitHub repository and apply them with a single chat command. No database, no server — just Git and GitHub Pages.
|
|
6
|
+
|
|
7
|
+
## Demo
|
|
8
|
+
|
|
9
|
+
https://github.com/user-attachments/assets/8c937a54-cd23-45e6-9eb8-f7e2c86ec3f6
|
|
10
|
+
|
|
11
|
+
## Why Loom?
|
|
12
|
+
|
|
13
|
+
Coding agents (Copilot, Claude Code, Cursor) rely on workspace-level configuration: instruction files, skill definitions, MCP servers, prompt files, and repository references. Teams often need to share and reuse these configurations across projects:
|
|
14
|
+
|
|
15
|
+
- **Onboarding** — new team members get a ready-to-go agent workspace in seconds
|
|
16
|
+
- **Consistency** — shared instructions and skills stay in sync across projects
|
|
17
|
+
- **Multi-agent support** — one template renders to Copilot, Claude Code, or Cursor format
|
|
18
|
+
- **Personal setups** — host your own templates on a personal GitHub repo
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
### 1. Install
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install -g @agent-loom/loom
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 2. Set up a registry
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
loom registry add my-templates https://github.com/<your-org>/<your-templates>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 3. Search and apply templates
|
|
35
|
+
|
|
36
|
+
In your coding agent's chat (Copilot, Claude Code, etc.):
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Search for available Loom templates
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Apply the functions-dev template to this workspace
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The agent handles the whole workflow — searching, selecting, and applying the template to your workspace.
|
|
47
|
+
|
|
48
|
+
## Available Skills
|
|
49
|
+
|
|
50
|
+
Loom ships with 5 skills that teach your coding agent how to use the system:
|
|
51
|
+
|
|
52
|
+
| Skill | Purpose |
|
|
53
|
+
|-------|---------|
|
|
54
|
+
| **loom-setup** | Install CLI, configure registries, verify setup |
|
|
55
|
+
| **loom-search** | Search and discover templates across registries |
|
|
56
|
+
| **loom-apply** | Apply templates to scaffold workspaces |
|
|
57
|
+
| **loom-scaffold** | Create new templates from existing projects |
|
|
58
|
+
| **loom-workspaces** | Manage workspace history and navigate past projects |
|
|
59
|
+
|
|
60
|
+
All skills are bundled with the [Craft catalog](https://www.npmjs.com/package/@agent-loom/craft). Install them with `npx @agent-loom/craft add <skill-name>`.
|
|
61
|
+
|
|
62
|
+
## How It Works
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Template Registry (GitHub repo)
|
|
66
|
+
├── index.yaml ← auto-generated template index
|
|
67
|
+
├── shared/ ← reusable instructions, MCP, repos, prompts
|
|
68
|
+
└── templates/
|
|
69
|
+
└── my-template/
|
|
70
|
+
└── manifest.yaml ← declarative workspace definition
|
|
71
|
+
↓
|
|
72
|
+
loom apply
|
|
73
|
+
↓
|
|
74
|
+
┌──── Target: Copilot ──────────────────┐
|
|
75
|
+
│ .github/copilot-instructions.md │
|
|
76
|
+
│ .github/instructions/*.instructions.md │
|
|
77
|
+
│ .github/agents/*.agent.md │
|
|
78
|
+
│ .github/skills/*/SKILL.md │
|
|
79
|
+
│ .github/prompts/*.prompt.md │
|
|
80
|
+
│ .vscode/mcp.json │
|
|
81
|
+
└────────────────────────────────────────┘
|
|
82
|
+
┌──── Target: Claude Code ──────────────┐
|
|
83
|
+
│ CLAUDE.md │
|
|
84
|
+
│ .claude/agents/*.md │
|
|
85
|
+
│ .claude/skills/*/SKILL.md │
|
|
86
|
+
│ .claude/settings.json │
|
|
87
|
+
│ .mcp.json │
|
|
88
|
+
└────────────────────────────────────────┘
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Templates are declarative `manifest.yaml` files. Shared resources (instructions, MCP servers, repos, prerequisites) live in `shared/` and are referenced via `$ref`. Loom resolves all references, fetches registry skills, and renders target-specific files.
|
|
92
|
+
|
|
93
|
+
## Template Registries
|
|
94
|
+
|
|
95
|
+
A template registry is a GitHub repository with a specific layout:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
my-registry/
|
|
99
|
+
├── index.yaml
|
|
100
|
+
├── shared/
|
|
101
|
+
│ ├── instructions/
|
|
102
|
+
│ ├── mcp/
|
|
103
|
+
│ ├── repos/
|
|
104
|
+
│ ├── prerequisites/
|
|
105
|
+
│ └── prompts/
|
|
106
|
+
└── templates/
|
|
107
|
+
├── template-a/
|
|
108
|
+
│ └── manifest.yaml
|
|
109
|
+
└── template-b/
|
|
110
|
+
└── manifest.yaml
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Create a GitHub repository with a template registry layout. See the [documentation](docs/getting-started.md) for a working example with CI/CD and a GitHub Pages catalog.
|
|
114
|
+
|
|
115
|
+
## Catalog UI
|
|
116
|
+
|
|
117
|
+
Registries can publish a browsable catalog site to GitHub Pages using `@agent-loom/loom-ui`. The catalog is a static Next.js export that displays all templates with their full manifest details, built and deployed automatically via CI/CD.
|
|
118
|
+
|
|
119
|
+
## Documentation
|
|
120
|
+
|
|
121
|
+
- [Getting Started](docs/getting-started.md) — Chat-based usage guide
|
|
122
|
+
- [CLI Reference](docs/cli-reference.md) — Full command reference
|
|
123
|
+
- [Architecture](docs/architecture.md) — System design and internals
|
|
124
|
+
- [Skills Specification](docs/skills-spec.md) — How skills are defined and resolved
|
|
125
|
+
|
|
126
|
+
## Packages
|
|
127
|
+
|
|
128
|
+
| Package | Description |
|
|
129
|
+
|---------|-------------|
|
|
130
|
+
| [`@agent-loom/loom`](https://www.npmjs.com/package/@agent-loom/loom) | CLI + core library |
|
|
131
|
+
| [`@agent-loom/loom-ui`](https://www.npmjs.com/package/@agent-loom/loom-ui) | Static catalog site generator (Next.js) |
|
|
132
|
+
|
|
133
|
+
## Development
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npm install
|
|
137
|
+
npm run build
|
|
138
|
+
npm test
|
|
139
|
+
node dist/cli.js --help
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## License
|
|
143
|
+
|
|
144
|
+
ISC
|
package/dist/apply.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply — resolves a template from a registry and renders it to a target workspace.
|
|
3
|
+
*/
|
|
4
|
+
import { type SkillFetcher } from './skill-fetcher.js';
|
|
5
|
+
import { type CloneRepoResult } from './repo-clone.js';
|
|
6
|
+
import type { TargetType } from './types.js';
|
|
7
|
+
export interface ApplyOptions {
|
|
8
|
+
templateDir: string;
|
|
9
|
+
registryRoot: string;
|
|
10
|
+
outputDir: string;
|
|
11
|
+
target: TargetType;
|
|
12
|
+
/** Optional fetcher to resolve registry skills to local content */
|
|
13
|
+
skillFetcher?: SkillFetcher;
|
|
14
|
+
/** Clone mode for manifest repos: 'auto' | 'all' | 'none' | undefined (no clone) */
|
|
15
|
+
cloneRepos?: 'auto' | 'all' | 'none';
|
|
16
|
+
/** Clone strategy override: 'partial' applies blobless clone to all repos without explicit cloneStrategy */
|
|
17
|
+
cloneMode?: 'full' | 'partial';
|
|
18
|
+
/** Inject exec function for testing (repo cloning) */
|
|
19
|
+
execFn?: (cmd: string) => void;
|
|
20
|
+
/** Inject prompt function for testing (large repo decisions) */
|
|
21
|
+
promptFn?: (message: string, choices: string[]) => Promise<string>;
|
|
22
|
+
/** Inject link function for creating directory junctions/symlinks */
|
|
23
|
+
linkFn?: (target: string, linkPath: string) => Promise<void>;
|
|
24
|
+
/** Select specific agents (comma-separated IDs). If undefined, all agents used. */
|
|
25
|
+
agents?: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface ApplyResult {
|
|
28
|
+
target: TargetType;
|
|
29
|
+
template: string;
|
|
30
|
+
filesGenerated: boolean;
|
|
31
|
+
/** Registry skills that were NOT fetched (returned only when no skillFetcher is provided) */
|
|
32
|
+
registrySkills: Array<{
|
|
33
|
+
registry: string;
|
|
34
|
+
ref: string;
|
|
35
|
+
}>;
|
|
36
|
+
/** Skills that were fetched and placed locally */
|
|
37
|
+
localizedSkills: Array<{
|
|
38
|
+
name: string;
|
|
39
|
+
registry: string;
|
|
40
|
+
ref: string;
|
|
41
|
+
}>;
|
|
42
|
+
/** Repo clone results (only present when cloneRepos is set) */
|
|
43
|
+
repoCloneResult?: CloneRepoResult;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Apply a template to a workspace directory.
|
|
47
|
+
*
|
|
48
|
+
* Steps:
|
|
49
|
+
* 1. Parse manifest.yaml from templateDir
|
|
50
|
+
* 2. Resolve all $ref / file references
|
|
51
|
+
* 3. Fetch registry skills if a skillFetcher is provided
|
|
52
|
+
* 4. Render output files using the appropriate renderer
|
|
53
|
+
* 5. Return list of registry skills that need external install (if not fetched)
|
|
54
|
+
*/
|
|
55
|
+
export declare function applyTemplate(options: ApplyOptions): Promise<ApplyResult>;
|
|
56
|
+
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,KAAK,EAAE,UAAU,EAAmC,MAAM,YAAY,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,mEAAmE;IACnE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,4GAA4G;IAC5G,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,sDAAsD;IACtD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,qEAAqE;IACrE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,6FAA6F;IAC7F,cAAc,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,kDAAkD;IAClD,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,+DAA+D;IAC/D,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA2F/E"}
|
package/dist/apply.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply — resolves a template from a registry and renders it to a target workspace.
|
|
3
|
+
*/
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { parseManifest, resolveManifest, parseAgentManifest, discoverNestedAgents, mergeTeamAndAgentManifests } from './manifest.js';
|
|
6
|
+
import { renderCopilot } from './renderers/copilot.js';
|
|
7
|
+
import { renderClaude } from './renderers/claude.js';
|
|
8
|
+
import { resolveRegistrySkills } from './skill-fetcher.js';
|
|
9
|
+
import { cloneManifestRepos } from './repo-clone.js';
|
|
10
|
+
/**
|
|
11
|
+
* Apply a template to a workspace directory.
|
|
12
|
+
*
|
|
13
|
+
* Steps:
|
|
14
|
+
* 1. Parse manifest.yaml from templateDir
|
|
15
|
+
* 2. Resolve all $ref / file references
|
|
16
|
+
* 3. Fetch registry skills if a skillFetcher is provided
|
|
17
|
+
* 4. Render output files using the appropriate renderer
|
|
18
|
+
* 5. Return list of registry skills that need external install (if not fetched)
|
|
19
|
+
*/
|
|
20
|
+
export async function applyTemplate(options) {
|
|
21
|
+
const { templateDir, registryRoot, outputDir, target, skillFetcher, cloneRepos, cloneMode, execFn, promptFn, linkFn, agents: selectedAgents } = options;
|
|
22
|
+
const manifestPath = join(templateDir, 'manifest.yaml');
|
|
23
|
+
const teamManifest = await parseManifest(manifestPath);
|
|
24
|
+
// Detect nested agents
|
|
25
|
+
const nestedAgentIds = await discoverNestedAgents(templateDir);
|
|
26
|
+
let manifest = teamManifest;
|
|
27
|
+
if (nestedAgentIds.length > 0) {
|
|
28
|
+
// Nested template — determine which agents to include
|
|
29
|
+
const agentIds = selectedAgents && selectedAgents.length > 0
|
|
30
|
+
? selectedAgents.filter((id) => nestedAgentIds.includes(id))
|
|
31
|
+
: nestedAgentIds; // All agents if none specified
|
|
32
|
+
// Parse agent manifests
|
|
33
|
+
const agentManifests = [];
|
|
34
|
+
for (const agentId of agentIds) {
|
|
35
|
+
const agentManifestPath = join(templateDir, 'agents', agentId, 'manifest.yaml');
|
|
36
|
+
const am = await parseAgentManifest(agentManifestPath);
|
|
37
|
+
agentManifests.push(am);
|
|
38
|
+
}
|
|
39
|
+
// Merge team + agent manifests
|
|
40
|
+
manifest = mergeTeamAndAgentManifests(teamManifest, agentManifests, agentIds);
|
|
41
|
+
}
|
|
42
|
+
const resolved = await resolveManifest(manifest, templateDir, registryRoot);
|
|
43
|
+
// Resolve registry skills to local if fetcher is provided
|
|
44
|
+
const resolvedSkills = await resolveRegistrySkills(resolved.skills, skillFetcher);
|
|
45
|
+
const manifestWithLocalSkills = {
|
|
46
|
+
...resolved,
|
|
47
|
+
skills: resolvedSkills,
|
|
48
|
+
};
|
|
49
|
+
// Render
|
|
50
|
+
switch (target) {
|
|
51
|
+
case 'copilot':
|
|
52
|
+
await renderCopilot(manifestWithLocalSkills, outputDir);
|
|
53
|
+
break;
|
|
54
|
+
case 'claude':
|
|
55
|
+
await renderClaude(manifestWithLocalSkills, outputDir);
|
|
56
|
+
break;
|
|
57
|
+
case 'cursor':
|
|
58
|
+
// Cursor renderer not yet implemented — fall back to copilot
|
|
59
|
+
await renderCopilot(manifestWithLocalSkills, outputDir);
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
throw new Error(`Unknown target: ${target}`);
|
|
63
|
+
}
|
|
64
|
+
// Clone manifest repos if requested
|
|
65
|
+
let repoCloneResult;
|
|
66
|
+
if (cloneRepos && resolved.repos.length > 0) {
|
|
67
|
+
// Apply --clone-mode partial: override repos without explicit cloneStrategy
|
|
68
|
+
const repos = cloneMode === 'partial'
|
|
69
|
+
? resolved.repos.map((r) => (!r.cloneStrategy && !r.sparse) ? { ...r, cloneStrategy: 'partial' } : r)
|
|
70
|
+
: resolved.repos;
|
|
71
|
+
repoCloneResult = await cloneManifestRepos({
|
|
72
|
+
repos,
|
|
73
|
+
workspaceDir: outputDir === '.' ? process.cwd() : outputDir,
|
|
74
|
+
mode: cloneRepos,
|
|
75
|
+
execFn,
|
|
76
|
+
promptFn,
|
|
77
|
+
linkFn,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Collect registry skills that were NOT fetched (still type='registry')
|
|
81
|
+
const registrySkills = resolvedSkills
|
|
82
|
+
.filter((s) => s.type === 'registry' && s.registry && s.ref)
|
|
83
|
+
.map((s) => ({ registry: s.registry, ref: s.ref }));
|
|
84
|
+
// Collect skills that were fetched and localized
|
|
85
|
+
const localizedSkills = resolvedSkills
|
|
86
|
+
.filter((s) => s.type === 'local' && s.originalRegistry && s.originalRef)
|
|
87
|
+
.map((s) => ({ name: s.name, registry: s.originalRegistry, ref: s.originalRef }));
|
|
88
|
+
return {
|
|
89
|
+
target,
|
|
90
|
+
template: resolved.template.id,
|
|
91
|
+
filesGenerated: true,
|
|
92
|
+
registrySkills,
|
|
93
|
+
localizedSkills,
|
|
94
|
+
repoCloneResult,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
|