Install
$ agentstack add skill-vibbs-company-os-setup Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Destructive filesystem operation.
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Setup Wizard
Interactive setup skill for Company OS. Works on both new (greenfield) and existing projects. Company OS is an overlay — it adds its own files alongside your code and never touches your source.
Modes
- Interactive (
/setupor/setup nextjs) — step-by-step guided wizard with smart defaults - Express (
/setup+ config block) — paste a pre-filled config block, wizard parses and applies it in one shot - Auto-Extract (
/setup+ URL or unstructured text) — wizard fetches/reads the content, extracts company profile, infers tech stack, and presents a pre-filled config for confirmation
Deployment Models
- New project: Run the curl installer, then
/setup - Existing repo: Run the curl installer in your repo root, then
/setup - Mono repo: Run
/setupat the repo root.company.config.yamldescribes the shared stack. Agents work across all packages. - Multi repo: Each repo gets its own Company OS instance with independent artifacts and config.
Express Mode
If the user provides a config block alongside /setup, skip interactive questions and parse the block directly. Any field not provided uses preset defaults (if a preset is specified) or is left empty.
Express Mode Template
Users can copy this template, fill in their values, and paste it with /setup:
````markdown
Company
- Name:
- Product:
- Description:
- Domain:
- Stage: idea | mvp | growth | scale
Tech Stack
- Preset: nextjs | fastapi | express | django | go | rails | custom
- Cache: Redis | Memcached | none
- Queue: BullMQ | Celery | SQS | none
- Search: Elasticsearch | Meilisearch | Typesense | none
Overrides (only if different from preset defaults)
- API Auth: JWT | API Keys | OAuth2 | session | Clerk | Auth.js
- API Versioning: url-path | header | query-param | none
- API Pagination: cursor | offset | none
- Rate Limiting: token-bucket | sliding-window | none
- Test Framework: Vitest | Jest | pytest | go test | cargo test
- Linter: ESLint | Biome | Ruff | golangci-lint
- Formatter: Prettier | Biome | Black | gofmt
- Branching: trunk-based | gitflow | github-flow
- Commit Style: conventional | gitmoji | freeform
- Monorepo: true | false
- Monorepo Tool: Turborepo | Nx | pnpm workspaces | none
Architecture
- Multi-tenant: true | false
- Tenant Isolation: RLS | schema-per-tenant | database-per-tenant | none
- Deployment: serverless | containers | VMs | edge
Observability
- Logging: structured-json | plaintext
- Error Tracking: Sentry | Bugsnag | none
i18n
- Enabled: true | false
- Default Locale: en-US
- Supported Locales: [en-US, hi-IN, fr-FR]
- Strategy: key-based | gettext | ICU
Platforms
- Targets: [web, mobile-web, ios, android]
- Mobile Framework: [react-native, expo, flutter, capacitor]
- PWA: true | false
Analytics
- Provider: Mixpanel | Amplitude | Pendo | PostHog | none
- Event Prefix: my-app
Feature Flags
- Provider: LaunchDarkly | Flagsmith | Unleash | custom | config-file
- Strategy: progressive-discovery | release-only | full
- Provider: Resend | Sendgrid | Postmark | SES | none
- From: noreply@yourdomain.com
- Template Engine: react-email | mjml | handlebars | jinja | plain-html
Options
- Skill Categories: all | -growth | -legal
- Clean Up Templates: yes | no
````
Express Mode Procedure
- Parse the config block — extract all key-value pairs by section header
- Apply preset — if
Presetis specified, fill in all preset defaults first - Override — apply any explicit values from the block on top of preset defaults
- Smart defaults — fill remaining gaps with stage-appropriate defaults:
observability.logging→structured-jsonobservability.error_tracking→Sentryanalytics.provider→nonefor idea,PostHogfor mvp+feature_flags.provider→config-filefor idea/mvpfeature_flags.strategy→release-onlyfor idea/mvp,fullfor growth/scaleanalytics.event_prefix→ lowercase hyphenated product nameemail.from_address→noreply@{domain}email.template_engine→ infer from tech stack (react-email for TS, jinja for Python, etc.)platforms.targets→[web, mobile-web]for Next.js,[web]for othersplatforms.responsive→true
- Display summary — show the full resolved config as a table for user confirmation
- On confirmation — proceed directly to Step 6 (Write config), Step 7 (Settings), Step 8 (Scaffold), then handle Options (skill categories, template cleanup), then Step 11 (Verify)
If the user says "looks good" or confirms, apply everything. If they want changes, apply those changes and re-confirm.
Auto-Extract Mode
If the user provides a URL or pastes unstructured text (pitch deck content, about page copy, investor memo, product brief, Notion dump, etc.), the wizard extracts as much as it can automatically.
Detecting Auto-Extract Mode
The input is Auto-Extract if ANY of these are true:
- Contains a URL (starts with
http://orhttps://) - Contains prose paragraphs (not structured
- Key: Valuepairs) - Contains a mix of freeform text and partial config values
- Reads like marketing copy, pitch content, or a product description
Auto-Extract Procedure
- Fetch/Read the content:
- If URL provided → use
WebFetchto retrieve and extract page content - If text pasted → use the text directly
- If multiple URLs → fetch all and combine
- Extract company profile — look for:
- Company name (from logo, header, footer, "About" section, legal text)
- Product name (from headline, hero section, title tag)
- Description (from meta description, hero subtitle, "What we do" section)
- Domain (from the URL itself or contact information)
- Stage — infer from signals:
- "coming soon", "waitlist", "beta" →
ideaormvp - "trusted by X customers", pricing page, case studies →
growth - Enterprise features, SOC2 badges, large customer logos →
scale
- Infer tech stack — look for signals in the content AND in the codebase:
- Check the repo for
package.json,requirements.txt,go.mod,Cargo.toml,Gemfile,pom.xml - From website: check meta tags, response headers (
x-powered-by,server), script sources, framework fingerprints - From text: mentions of specific technologies ("built with React", "powered by Django", "Node.js backend")
- If no tech signals found → ask the user to pick a preset
- Infer product characteristics — look for:
- Multi-tenant signals: "teams", "organizations", "workspaces", "per-seat pricing"
- i18n signals: multiple language options, locale switcher, "available in X countries"
- Mobile signals: "mobile app", app store links, "responsive", QR codes
- B2B vs B2C: pricing model, target audience language
- Auth signals: "Sign in with Google", "SSO", "enterprise login"
- Build a pre-filled config — map extracted data to Company OS config fields:
- Fill everything that was confidently extracted
- Mark uncertain fields with
(inferred)annotation - Leave truly unknown fields empty
- Present for confirmation — show the extracted config as a summary table:
``` ## Auto-Extracted Configuration
Source: https://neevak.com + codebase analysis
### Company Profile | Field | Extracted Value | Confidence | |-------|----------------|------------| | Name | Univas Collective | high — from footer | | Product | Neevak | high — from title | | Description | School fee management... | high — from hero | | Domain | neevak.com | high — from URL | | Stage | mvp | medium — no pricing page yet |
### Tech Stack | Field | Extracted Value | Confidence | |-------|----------------|------------| | Preset | nextjs | high — package.json found | | ... | ... | ... |
Fields I couldn't determine: [list]
Does this look right? I'll ask about the missing fields. ```
- Fill gaps — for fields that couldn't be extracted:
- If a preset was determined, apply preset defaults
- For remaining unknowns, ask the user (interactive-style) only for those specific fields
- Apply smart defaults for everything else
- On confirmation — proceed to Step 6 (Write config) through Step 11 (Verify), same as Express mode
Example Usage
URL mode:
/setup https://neevak.com
Text dump mode:
/setup
We're Univas Collective, building Neevak — a school fee management
platform for Indian K-12 schools. Schools currently use Excel, cash
counters, and WhatsApp to manage crores in fee collection. We're
replacing that with a proper infrastructure layer.
We're using Next.js with TypeScript, PostgreSQL, and deploying on
Vercel. Each school is a tenant with RLS isolation. We need mobile
support — parents will use Android primarily. We're at MVP stage,
about to onboard our first 10 pilot schools.
Tech: Next.js 14, Prisma, PostgreSQL, Redis for caching, BullMQ for
background jobs (receipt generation, payment reminders). Auth via
Clerk. We'll need WhatsApp integration for notifications.
The wizard would extract all of that into a pre-filled config, infer the preset (Next.js + Vercel), set multi-tenant with RLS, platforms targeting web + mobile-web + android, and present the full config for one-click confirmation.
Interactive Mode Procedure
Step 1: Detect Environment
- Check if
company.config.yamlexists and has any non-empty values - Check if
.claude/settings.jsonexists and has permissions - Check if
artifacts/,tools/,standards/directories exist - Classify the situation:
- Fresh setup: No config or all fields empty → full walkthrough
- Reconfigure: Config exists with values → ask "Update existing configuration or start fresh?"
- Overlay: Existing codebase detected (e.g.,
package.json,requirements.txt,go.mod,Cargo.toml) → note existing stack, suggest preset
Step 2: Company Profile
Gather the following (skip fields that already have values unless user wants to update):
company.name— company or project namecompany.product— product namecompany.description— one-line product descriptioncompany.domain— primary domain (optional)company.stage— idea | mvp | growth | scale
Step 3: Tech Stack Selection
Offer presets first to save time, then allow customization:
| Preset | Language | Framework | Runtime | DB | ORM | Hosting | CI | |--------|----------|-----------|---------|-----|-----|---------|-----| | Next.js + Vercel | TypeScript | Next.js | Node.js 20 | PostgreSQL | Prisma | Vercel | GitHub Actions | | FastAPI + AWS | Python | FastAPI | Python 3.12 | PostgreSQL | SQLAlchemy | AWS | GitHub Actions | | Express + Railway | TypeScript | Express | Node.js 20 | PostgreSQL | Prisma | Railway | GitHub Actions | | Django + AWS | Python | Django | Python 3.12 | PostgreSQL | Django ORM | AWS | GitHub Actions | | Go + Fly.io | Go | Gin | Go 1.22 | PostgreSQL | GORM | Fly.io | GitHub Actions | | Rails + Heroku | Ruby | Rails | Ruby 3.3 | PostgreSQL | ActiveRecord | Heroku | GitHub Actions | | Custom | — | — | — | — | — | — | — |
After preset selection, walk through remaining tech_stack fields not covered by preset:
cache(Redis | Memcached | none)queue(BullMQ | Celery | SQS | none)search(Elasticsearch | Meilisearch | Typesense | none)
If the environment has existing files (e.g., package.json → Node.js), suggest the matching preset.
Step 4: API & Conventions
Provide smart defaults based on the chosen preset. Only prompt when the user needs to decide.
API section:
api.style— REST | GraphQL | gRPC | tRPCapi.spec_format— OpenAPI 3.1 | GraphQL SDL | Protobufapi.error_format— RFC7807 | customapi.versioning— url-path (/v1/) | header | query-param | noneapi.auth— JWT | API Keys | OAuth2 | session | Clerk | Auth.jsapi.pagination— cursor | offset | noneapi.rate_limiting— token-bucket | sliding-window | none
Conventions section:
conventions.branching— trunk-based | gitflow | github-flowconventions.commit_style— conventional | gitmoji | freeformconventions.test_framework— Vitest | Jest | pytest | go test | cargo testconventions.linter— ESLint | Biome | Ruff | golangci-lintconventions.formatter— Prettier | Biome | Black | gofmtconventions.monorepo— true | falseconventions.monorepo_tool— Turborepo | Nx | pnpm workspaces | none (only if monorepo is true)
Preset defaults (apply these, ask user to confirm or change):
| Field | Next.js + Vercel | FastAPI + AWS | Express + Railway | Django + AWS | Go + Fly.io | Rails + Heroku | |-------|-----------------|---------------|-------------------|-------------|-------------|----------------| | api.style | REST | REST | REST | REST | REST | REST | | api.specformat | OpenAPI 3.1 | OpenAPI 3.1 | OpenAPI 3.1 | OpenAPI 3.1 | OpenAPI 3.1 | OpenAPI 3.1 | | api.auth | JWT | JWT | JWT | session | JWT | session | | api.pagination | cursor | cursor | cursor | offset | cursor | offset | | conventions.testframework | Vitest | pytest | Vitest | pytest | go test | RSpec | | conventions.linter | ESLint | Ruff | ESLint | Ruff | golangci-lint | RuboCop | | conventions.formatter | Prettier | Black | Prettier | Black | gofmt | RuboCop | | conventions.branching | trunk-based | trunk-based | trunk-based | trunk-based | trunk-based | github-flow | | conventions.commit_style | conventional | conventional | conventional | conventional | conventional | conventional |
Step 5: Architecture, Observability & i18n
Prompt for key decisions:
architecture.multi_tenant— true | false (default: false)architecture.tenant_isolation— only if multi_tenant is truearchitecture.deployment_model— serverless | containers | VMs | edge
Observability with sensible defaults:
observability.logging— structured-json (default)observability.error_tracking— Sentry (default) | Bugsnag | none- Leave
log_provider,metrics,tracingas""(can configure later)
i18n (only prompt if user indicates international audience):
i18n.enabled— true | false (default: false)- If true:
i18n.default_locale,i18n.supported_locales,i18n.strategy(key-based | gettext | ICU),i18n.fallback
Step 5.5: Platforms, Analytics, Feature Flags & Email
Platforms — ask about target platforms:
platforms.targets— [web, mobile-web, ios, android] (default: [web] for web frameworks, [web, mobile-web] for Next.js/Nuxt)platforms.mobile_framework— [react-native, expo, flutter, capacitor] (only if ios or android in targets; array, supports multiple)platforms.responsive— true | false (default: true for any web target)platforms.pwa— true | false (default: false)
Preset platform defaults:
| Preset | targets | responsive | mobile_framework | |--------|---------|------------|-----------------| | Next.js + Vercel | [web, mobile-web] | true | [] | | FastAPI + AWS | [web] | true | [] | | Express + Railway | [web] | true | [] | | Django + AWS | [web] | true | [] | | Go + Fly.io | [web] | true | [] | | Rails + Heroku | [web] | true | [] |
Analytics — ask if the product needs analytics (recommended for all products beyond idea stage):
analytics.provider— Mixpanel | Amplitude | Pendo | PostHog | none (default: none foridea, PostHog formvp+)analytics.event_prefix— auto-suggest fromcompany.product(lowercase, hyphenated)analytics.tracker_attribute— data-track-id (default) | data-analytics | custom
Feature Flags — ask about rollout strategy:
feature_flags.provider— LaunchDarkly | Flagsmith | Unleash | custom | config-file (default: config-file for early stage)feature_flags.strategy— progressive-discovery | release-only | full (default: release-only foridea/mvp, full forgrowth/scale)- `featureflags.cleanups
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: vibbs
- Source: vibbs/company-os
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.