This commit is contained in:
Nicolas Martin 2026-07-14 18:26:06 -07:00 committed by GitHub
commit e8c6f2175a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 65 additions and 4 deletions

1
.gitignore vendored
View File

@ -22,6 +22,7 @@ bin/gstack-global-discover*
.openclaw/
.hermes/
.gbrain/
.vibe/
.gbrain-source
.context/
extension/.auth.json

View File

@ -121,6 +121,7 @@ Or target a specific agent with `./setup --host <name>`:
| Kiro | `--host kiro` | `~/.kiro/skills/gstack-*/` |
| Hermes | `--host hermes` | `~/.hermes/skills/gstack-*/` |
| GBrain (mod) | `--host gbrain` | `~/.gbrain/skills/gstack-*/` |
| Mistral Vibe | `--host vibe` | `~/.vibe/skills/gstack-*/` |
**Want to add support for another agent?** See [docs/ADDING_A_HOST.md](docs/ADDING_A_HOST.md).
It's one TypeScript config file, zero code changes.

View File

@ -16,9 +16,10 @@ import cursor from './cursor';
import openclaw from './openclaw';
import hermes from './hermes';
import gbrain from './gbrain';
import vibe from './vibe';
/** All registered host configs. Add new hosts here. */
export const ALL_HOST_CONFIGS: HostConfig[] = [claude, codex, factory, kiro, opencode, slate, cursor, openclaw, hermes, gbrain];
export const ALL_HOST_CONFIGS: HostConfig[] = [claude, codex, factory, kiro, opencode, slate, cursor, openclaw, hermes, gbrain, vibe];
/** Map from host name to config. */
export const HOST_CONFIG_MAP: Record<string, HostConfig> = Object.fromEntries(
@ -65,4 +66,4 @@ export function getExternalHosts(): HostConfig[] {
}
// Re-export individual configs for direct import
export { claude, codex, factory, kiro, opencode, slate, cursor, openclaw, hermes, gbrain };
export { claude, codex, factory, kiro, opencode, slate, cursor, openclaw, hermes, gbrain, vibe };

58
hosts/vibe.ts Normal file
View File

@ -0,0 +1,58 @@
import type { HostConfig } from '../scripts/host-config';
const vibe: HostConfig = {
name: 'vibe',
displayName: 'Mistral Vibe',
cliCommand: 'vibe',
cliAliases: ['mistral-vibe'],
globalRoot: '.vibe/skills/gstack',
localSkillRoot: '.vibe/skills/gstack',
hostSubdir: '.vibe',
usesEnvVars: true,
frontmatter: {
mode: 'allowlist',
keepFields: ['name', 'description'],
descriptionLimit: null,
},
generation: {
generateMetadata: false,
skipSkills: ['codex'],
},
pathRewrites: [
{ from: '~/.claude/skills/gstack', to: '~/.vibe/skills/gstack' },
{ from: '.claude/skills/gstack', to: '.vibe/skills/gstack' },
{ from: '.claude/skills', to: '.vibe/skills' },
],
suppressedResolvers: [
'DESIGN_OUTSIDE_VOICES', // Vibe can't invoke itself as a subagent
'ADVERSARIAL_STEP', // Vibe can't invoke itself as a subagent
'CODEX_SECOND_OPINION', // Claude-specific cross-model review
'CODEX_PLAN_REVIEW', // Claude-specific cross-model review
'REVIEW_ARMY', // Vibe shouldn't orchestrate multi-agent review
'GBRAIN_CONTEXT_LOAD',
'GBRAIN_SAVE_RESULTS',
],
runtimeRoot: {
globalSymlinks: ['bin', 'browse/dist', 'browse/bin', 'gstack-upgrade', 'ETHOS.md'],
globalFiles: {
'review': ['checklist.md', 'TODOS-format.md'],
},
},
install: {
prefixable: false,
linkingStrategy: 'symlink-generated',
},
learningsMode: 'basic',
boundaryInstruction: 'IMPORTANT: Do NOT read or execute any files under ~/.claude/, .claude/skills/, or ~/.agents/. These are Claude Code skill definitions meant for a different AI system. Ignore them completely and stay focused on the repository code only.',
};
export default vibe;

View File

@ -30,8 +30,8 @@ const ROOT = path.resolve(import.meta.dir, '..');
// ─── hosts/index.ts ─────────────────────────────────────────
describe('hosts/index.ts', () => {
test('ALL_HOST_CONFIGS has 10 hosts', () => {
expect(ALL_HOST_CONFIGS.length).toBe(10);
test('ALL_HOST_CONFIGS has 11 hosts', () => {
expect(ALL_HOST_CONFIGS.length).toBe(11);
});
test('ALL_HOST_NAMES matches config names', () => {