9.4 KiB
CLI Command Reference
Comprehensive documentation for all CLI commands.
Table of Contents
System
config
Show current configuration
No options required.
Example:
uv run python main.py config
health
Check system health
No options required.
Example:
uv run python main.py health
models
List available AI models
No options required.
Example:
uv run python main.py models
User Management
add-user
Create a new user (requires admin authentication)
Options:
-
--username- Type: STRING | Username for the new user
-
--password- Type: STRING | Password for the new user
-
--role- Type: Choice:
Admin,User| Role for the new user
- Type: Choice:
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
Example:
uv run python main.py add-user
delete-user
Delete a user by username (requires admin authentication)
Options:
-
--username- Type: STRING | Username to delete
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
-
--yes- Type: BOOL | Flag (boolean) | Confirm the action without prompting.
Example:
uv run python main.py delete-user
list-users
List all users (requires admin authentication)
Options:
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
Example:
uv run python main.py list-users
Site Management
attach-domain
Attach a domain to an existing Storage Zone (requires admin)
Options:
-
--name- Type: STRING | Site name
-
--domain- Type: STRING | Custom domain (FQDN, e.g., www.example.com)
-
--storage-name- Type: STRING | Existing Storage Zone name
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
Example:
uv run python main.py attach-domain
get-site
Get detailed information about a site deployment (requires admin)
Options:
-
--domain- Type: STRING | Custom domain to lookup
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
Example:
uv run python main.py get-site
list-sites
List all site deployments (requires admin)
Options:
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
Example:
uv run python main.py list-sites
provision-site
Provision a new site with Storage Zone and Pull Zone (requires admin)
Options:
-
--name- Type: STRING | Site name
-
--domain- Type: STRING | Custom domain (FQDN, e.g., www.example.com)
-
--storage-name- Type: STRING | Storage Zone name (must be globally unique)
-
--region- Type: Choice:
DE,NY,LA,SG,SYD| Storage region
- Type: Choice:
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
Example:
uv run python main.py provision-site
remove-site
Remove a site deployment record (requires admin)
Options:
-
--domain- Type: STRING | Custom domain to remove
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
-
--yes- Type: BOOL | Flag (boolean) | Confirm the action without prompting.
Example:
uv run python main.py remove-site
sync-sites
Sync existing bunny.net sites with custom domains to database (requires admin)
Options:
-
--admin-user- Type: STRING | Admin username for authentication
-
--admin-password- Type: STRING | Admin password for authentication
-
--dry-run- Type: BOOL | Flag (boolean) | Show what would be imported without making changes
Example:
uv run python main.py sync-sites
Project Management
ingest-cora
Ingest a CORA .xlsx report and create a new project
Options:
-
--file,-f(required)- Type: Path (must exist) | Path to CORA .xlsx file
-
--name,-n(required)- Type: STRING | Project name
-
--money-site-url,-m- Type: STRING | Money site URL (e.g., https://example.com)
-
--custom-anchors,-a- Type: STRING | Comma-separated list of custom anchor text (optional)
-
--tier1-branded-ratio,-t- Type: FLOAT | Ratio of branded anchor text for tier1 (optional, only prompts if provided)
-
--tier1-branded-plus-ratio,-bp- Type: FLOAT | Ratio of branded+ anchor text for tier1 (optional, applied to remaining slots after branded)
-
--random-deployment-targets,-r- Type: INT | Number of random deployment targets to select (default: random 2-3)
-
--username,-u- Type: STRING | Username for authentication
-
--password,-p- Type: STRING | Password for authentication
Example:
uv run python main.py ingest-cora --file path/to/file.xlsx --name "My Project"
ingest-simple
Ingest a simple spreadsheet and create a new project
Expected spreadsheet format:
- First row: Headers (main_keyword, project_name, related_searches, entities)
- Second row: Data values
Required columns: main_keyword, project_name, related_searches, entities
- main_keyword: Single phrase keyword
- project_name: Name for the project
- related_searches: Comma-delimited list (e.g., "term1, term2, term3")
- entities: Comma-delimited list (e.g., "entity1, entity2, entity3")
Optional columns (with defaults):
- word_count: Default 1500
- term_frequency: Default 3
Options:
-
--file,-f(required)- Type: Path (must exist) | Path to simple .xlsx spreadsheet file
-
--name,-n- Type: STRING | Project name (overrides project_name from spreadsheet if provided)
-
--money-site-url,-m- Type: STRING | Money site URL (e.g., https://example.com)
-
--username,-u- Type: STRING | Username for authentication
-
--password,-p- Type: STRING | Password for authentication
Example:
uv run python main.py ingest-simple --file path/to/file.xlsx
list-projects
List all projects for the authenticated user
Options:
-
--username,-u- Type: STRING | Username for authentication
-
--password,-p- Type: STRING | Password for authentication
Example:
uv run python main.py list-projects
Content Generation
generate-batch
Generate content batch from job file
Options:
-
--job-file,-j(required)- Type: Path (must exist) | Path to job JSON file
-
--username,-u- Type: STRING | Username for authentication
-
--password,-p- Type: STRING | Password for authentication
-
--debug- Type: BOOL | Flag (boolean) | Save AI responses to debug_output/
-
--continue-on-error- Type: BOOL | Flag (boolean) | Continue processing if article generation fails
-
--model,-m- Type: STRING | Default:
gpt-4o-mini| AI model to use (gpt-4o-mini, x-ai/grok-4-fast)
- Type: STRING | Default:
Example:
uv run python main.py generate-batch --file path/to/file.xlsx --debug
Deployment
deploy-batch
Deploy all content in a batch to cloud storage
Options:
-
--batch-id,-b(required)- Type: INT | Project/batch ID to deploy
-
--username,-u- Type: STRING | Username for authentication
-
--password,-p- Type: STRING | Password for authentication
-
--continue-on-error- Type: BOOL | Flag (boolean) | Continue if file fails (default: True)
-
--dry-run- Type: BOOL | Flag (boolean) | Preview what would be deployed
Example:
uv run python main.py deploy-batch --batch-id 1
verify-deployment
Verify deployed URLs return 200 OK status
Options:
-
--batch-id,-b(required)- Type: INT | Project/batch ID to verify
-
--sample,-s- Type: INT | Number of random URLs to check (default: check all)
-
--timeout,-t- Type: INT | Default:
10| Request timeout in seconds (default: 10)
- Type: INT | Default:
Example:
uv run python main.py verify-deployment --batch-id 1
Link Export
get-links
Export article URLs with optional link details for a project and tier
Options:
-
--project-id,-p(required)- Type: INT | Project ID to get links for
-
--tier,-t(required)- Type: STRING | Tier to filter (e.g., "1" or "2+" for tier 2 and above)
-
--with-anchor-text- Type: BOOL | Flag (boolean) | Include anchor text used for tiered links
-
--with-destination-url- Type: BOOL | Flag (boolean) | Include destination URL that the article links to
Example:
uv run python main.py get-links --project-id 1 --tier 1
Other Commands
create-job
Create a job file from an existing project ID
discover-s3-buckets
Discover and register AWS S3 buckets as site deployments