### Clone and Install Open Accountant CLI Source: https://github.com/openaccountant/wilson/blob/main/CONTRIBUTING.md Clone the repository, navigate to the directory, and install dependencies using Bun. This is the initial setup for development. ```bash git clone https://github.com/open-accountant/cli.git cd cli bun install ``` -------------------------------- ### Install and Run Open Accountant CLI Source: https://github.com/openaccountant/wilson/blob/main/README.md Follow these steps to clone the repository, install dependencies, configure environment variables, and start the application. ```bash git clone https://github.com/openaccountant/wilson.git cd open-accountant bun install cp env.example .env # edit with your API key(s) bun start ``` -------------------------------- ### Skills System Example Source: https://context7.com/openaccountant/wilson/llms.txt Illustrates the structure of a SKILL.md file for defining multi-step workflows. Skills can be invoked via CLI or programmatically. ```typescript // Skills are invoked via CLI: /skill subscription-audit // Or programmatically through the skill tool // Example SKILL.md structure (src/skills/subscription-audit/SKILL.md): // --- // name: subscription-audit // description: Analyzes recurring charges to find subscriptions... // --- // // # Subscription Audit // ## Workflow // 1. Use anomaly_detect with types ["unused_subscriptions"] // 2. Use transaction_search with query "all recurring transactions" // 3. Calculate monthly/annual costs // 4. Generate recommendations // Built-in skills include: // - subscription-audit: Find and analyze recurring charges // - tax-prep: Prepare tax deduction summary // - monthly-digest: Generate monthly financial summary // - cash-flow-forecast: Project future cash flow // - net-worth: Calculate and track net worth // - spending-review: Analyze spending patterns // - quarterly-taxes: Estimate quarterly tax payments // - debt-payoff: Create debt payoff strategies // - And 40+ more specialized financial workflows // Custom skills can be added to: // - ~/.openaccountant/skills/ (user-wide) // - .openaccountant/skills/ (project-specific) ``` -------------------------------- ### Initialize and Get Net Worth Summary Source: https://context7.com/openaccountant/wilson/llms.txt Initializes the net worth tool and retrieves the current net worth summary. Requires a database connection for initialization. ```typescript import { netWorthTool, initNetWorthTool } from './src/tools/net-worth/net-worth.js'; initNetWorthTool(db); // Get current net worth summary const summary = await netWorthTool.func({ action: 'summary' }); ``` -------------------------------- ### Get CLI Version Source: https://github.com/openaccountant/wilson/blob/main/CONTRIBUTING.md Command to retrieve the current version of the Open Accountant CLI. Useful for bug reporting. ```bash wilson --version ``` -------------------------------- ### Run Development Commands for Open Accountant CLI Source: https://github.com/openaccountant/wilson/blob/main/CONTRIBUTING.md Commands to run tests, perform type checking, and start the development server for the Open Accountant CLI project. ```bash bun test bun run typecheck bun run dev ``` -------------------------------- ### Conventional Commit Message Examples Source: https://github.com/openaccountant/wilson/blob/main/CONTRIBUTING.md Examples of commit messages following the conventional commit format, indicating the type of change (feat, fix, docs, refactor, test). ```git feat: add new bank parser for Wells Fargo fix: resolve CSV parsing edge case docs: update installation instructions refactor: simplify transaction matching test: add tests for OFX parser ``` -------------------------------- ### Get Full Balance Sheet Source: https://context7.com/openaccountant/wilson/llms.txt Generates a full balance sheet report using the net worth tool. ```typescript // Get full balance sheet const balanceSheet = await netWorthTool.func({ action: 'balance_sheet' }); ``` -------------------------------- ### Get Net Worth Trend Source: https://context7.com/openaccountant/wilson/llms.txt Retrieves the net worth trend over a specified number of months. This is a Pro feature. ```typescript // Get net worth trend (Pro feature) const trend = await netWorthTool.func({ action: 'trend', months: 12 }); ``` -------------------------------- ### Get Tax Deduction Summary Source: https://context7.com/openaccountant/wilson/llms.txt Retrieves a summary of tax-deductible transactions for a specified tax year, including category totals and a grand total. ```typescript // Get tax deduction summary const summary = await taxFlagTool.func({ action: 'summary', taxYear: 2024 }); ``` -------------------------------- ### Create and Run Agent Source: https://context7.com/openaccountant/wilson/llms.txt Instantiate an Agent with a configured model and run it with a query. The agent processes events like thinking, tool usage, and final results. ```typescript import { Agent } from './src/agent/agent.js'; // Create agent with configured model const agent = await Agent.create({ model: 'gpt-4o', // or 'claude-3-5-sonnet', 'ollama:llama3.2', etc. maxIterations: 10, signal: abortController.signal }); // Run the agent with a query for await (const event of agent.run('What did I spend on dining last month?')) { switch (event.type) { case 'thinking': console.log('Agent thinking:', event.message); break; case 'tool_start': console.log(`Calling ${event.tool}...`); break; case 'tool_result': console.log(`${event.tool} completed:`, event.result); break; case 'done': console.log('Final answer:', event.answer); console.log('Token usage:', event.tokenUsage); break; } } ``` -------------------------------- ### Initialize and Sync Plaid Bank Accounts Source: https://context7.com/openaccountant/wilson/llms.txt Initializes the Plaid sync tool and synchronizes all linked bank accounts. This process automatically creates accounts and updates balances. ```typescript import { plaidSyncTool, initPlaidSyncTool } from './src/tools/import/plaid-sync.js'; initPlaidSyncTool(db); // Sync all linked bank accounts const result = await plaidSyncTool.func({}); ``` -------------------------------- ### Configure MCP Servers Source: https://github.com/openaccountant/wilson/blob/main/README.md Add external tool servers by defining their commands and arguments in the MCP configuration file. This allows Open Accountant to integrate with custom tools. ```json { "servers": { "my-server": { "command": "npx", "args": ["-y", "my-mcp-server"], "env": {} } } } ``` -------------------------------- ### Open Accountant CLI Project Structure Source: https://github.com/openaccountant/wilson/blob/main/CONTRIBUTING.md Overview of the directory structure for the Open Accountant CLI project, highlighting key directories like agent, tools, and skills. ```tree src/ ├── agent/ # Agent loop and orchestration ├── tools/ # Tool registry and implementations │ ├── import/ # Bank parsers (Chase, Amex, etc.) │ └── ... ├── skills/ # Built-in skill definitions ├── providers.ts # LLM provider routing └── index.ts # CLI entry point ``` -------------------------------- ### Manage Monthly Budgets Source: https://context7.com/openaccountant/wilson/llms.txt Set spending limits per category and check current budget status using the budget_set and budget_check tools. ```typescript import { budgetSetTool, initBudgetSetTool } from './src/tools/budget/budget-set.js'; import { budgetCheckTool, initBudgetCheckTool } from './src/tools/budget/budget-check.js'; initBudgetSetTool(db); initBudgetCheckTool(db); // Set monthly budget limits await budgetSetTool.func({ category: 'Dining', monthlyLimit: 400 }); await budgetSetTool.func({ category: 'Groceries', monthlyLimit: 800 }); await budgetSetTool.func({ category: 'Shopping', monthlyLimit: 300 }); // Check budget status for current month const result = await budgetCheckTool.func({}); // Result: // { // month: '2024-01', // budgets: [ // { category: 'Dining', budget: 400, actual: 325.50, remaining: 74.50, percentUsed: 81.4, status: 'OK' }, // { category: 'Groceries', budget: 800, actual: 745.00, remaining: 55.00, percentUsed: 93.1, status: 'OK' }, // { category: 'Shopping', budget: 300, actual: 412.00, remaining: -112.00, percentUsed: 137.3, status: 'OVER' } // ] // } // Check specific category for specific month const diningCheck = await budgetCheckTool.func({ month: '2024-01', category: 'Dining' }); ``` -------------------------------- ### Generate Spending Summaries Source: https://context7.com/openaccountant/wilson/llms.txt The spendingSummaryTool generates spending breakdowns by category for a specified period, with an option to compare with the previous period. Initialize the tool with initSpendingSummaryTool(db) before use. ```typescript import { spendingSummaryTool, initSpendingSummaryTool } from './src/tools/query/spending-summary.js'; initSpendingSummaryTool(db); // Get monthly spending breakdown with comparison const result = await spendingSummaryTool.func({ period: 'month', compareWithPrevious: true }); // Result: // { // period: 'January 2024', // dateRange: { start: '2024-01-01', end: '2024-01-31' }, // totalSpending: -3425.67, // transactionCount: 156, // categories: [ // { category: 'Groceries', total: -845.32, count: 12 }, // { category: 'Dining', total: -523.45, count: 28 }, // { category: 'Shopping', total: -412.00, count: 15 }, // ... // ], // previousPeriod: { // label: 'December 2023', // totalSpending: -3102.45, // categories: [...] // }, // formatted: 'Spending Summary: January 2024\n\nCategory Amount Count Change\n...' // } // Quarterly summary without comparison const quarterlyResult = await spendingSummaryTool.func({ period: 'quarter', compareWithPrevious: false }); ``` -------------------------------- ### Initialize and Flag Transaction for Tax Deductions Source: https://context7.com/openaccountant/wilson/llms.txt Initializes the tax flag tool and flags a specific transaction as tax-deductible, assigning an IRS category and notes. Requires a database connection for initialization. ```typescript import { taxFlagTool, initTaxFlagTool } from './src/tools/tax/tax-flag.js'; initTaxFlagTool(db); // Flag a transaction as deductible await taxFlagTool.func({ action: 'flag', transactionId: 123, irsCategory: 'Office expenses', taxYear: 2024, notes: 'Desk for home office' }); ``` -------------------------------- ### Initialize and Import Monarch Money Transactions Source: https://context7.com/openaccountant/wilson/llms.txt Initializes the Monarch Money import tool and imports transactions within a specified date range. Requires environment variables for authentication. ```typescript import { monarchImportTool, initMonarchTool } from './src/tools/import/monarch.js'; initMonarchTool(db); // Import transactions from Monarch Money // Requires MONARCH_TOKEN or MONARCH_EMAIL + MONARCH_PASSWORD env vars const result = await monarchImportTool.func({ limit: 500, startDate: '2024-01-01', endDate: '2024-01-31' }); ``` -------------------------------- ### Call LLM with Tool Definitions Source: https://context7.com/openaccountant/wilson/llms.txt Integrate tool calling capabilities by providing tool definitions to the callLlm function. The response will include any tool calls made by the LLM. ```typescript import { callLlm } from './src/model/llm.js'; // With tool definitions const toolResult = await callLlm('Search for transactions over $100', { model: 'gpt-4o', tools: [transactionSearchTool.definition], systemPrompt: 'Use the available tools to help the user.' }); console.log(toolResult.response.toolCalls); // Array of tool calls ``` -------------------------------- ### Import Bank Transactions with csvImportTool Source: https://context7.com/openaccountant/wilson/llms.txt Use `csvImportTool` to import transactions from CSV, OFX, or QIF files. Supports auto-detection of bank and deduplication. Can import single files or entire directories. ```typescript import { csvImportTool, initImportTool } from './src/tools/import/csv-import.js'; import { Database } from 'better-sqlite3'; // Initialize database and tool const db = new Database('~/.openaccountant/data.db'); initImportTool(db); // Import a single Chase CSV file const result = await csvImportTool.func({ filePath: '~/Downloads/chase-transactions.csv', bank: 'auto' // Auto-detects Chase, Amex, BofA, or generic }); // Result: // { // success: true, // transactionsImported: 156, // transactionsSkipped: 0, // transactionsLinked: 42, // formatDetected: 'csv', // bankDetected: 'chase', // dateRange: { start: '2024-01-01', end: '2024-01-31' }, // message: 'Imported 156 transactions from chase CSV (2024-01-01 to 2024-01-31). 42 transactions auto-linked to accounts.' // } // Import entire directory of bank files const dirResult = await csvImportTool.func({ filePath: '~/Downloads/bank-statements/' }); // Result: // { // success: true, // directory: '~/Downloads/bank-statements/', // filesFound: 4, // filesImported: 3, // filesSkipped: 1, // totalTransactionsImported: 423, // totalTransactionsSkipped: 45, // message: 'Directory: ~/Downloads/bank-statements/. Files found: 4, imported: 3, skipped: 1. Transactions imported: 423, skipped: 45.' // } ``` -------------------------------- ### Skill Marketplace Card Layout Source: https://github.com/openaccountant/wilson/blob/main/BRAND.md Visual structure for a purchasable skill card using a slate background and money-green price badge. ```text ┌─────────────────────────────────┐ surface-2 │ Subscription Audit │ ledger, Space Grotesk 600 │ Find forgotten charges and │ ink, Inter 400 │ recurring fees you don't use. │ │ │ │ [$15/yr] [Activate] │ money green badge + CTA └─────────────────────────────────┘ carbon border ``` -------------------------------- ### POST /spending-summary Source: https://context7.com/openaccountant/wilson/llms.txt Generates spending breakdowns by category for a specified period with optional period-over-period comparison. ```APIDOC ## POST /spending-summary ### Description Generates spending breakdowns by category for a given period with optional comparison to the previous period. ### Method POST ### Request Body - **period** (string) - Required - The time period for the summary (e.g., 'month', 'quarter') - **compareWithPrevious** (boolean) - Optional - Whether to include comparison data with the previous period ### Response #### Success Response (200) - **period** (string) - The label for the period - **dateRange** (object) - Start and end dates - **totalSpending** (number) - Total amount spent - **transactionCount** (number) - Total number of transactions - **categories** (array) - Breakdown of spending by category - **previousPeriod** (object) - Optional comparison data ``` -------------------------------- ### Create a Feature Branch Source: https://github.com/openaccountant/wilson/blob/main/CONTRIBUTING.md Command to create a new Git branch for developing a feature, following the convention 'feature/your-feature-name'. ```bash git checkout -b feature/amazing-feature ``` -------------------------------- ### Perform Web Search using Exa Source: https://context7.com/openaccountant/wilson/llms.txt Performs a web search using the Exa tool. Requires the EXASEARCH_API_KEY environment variable to be set. ```typescript import { exaSearch } from './src/tools/search/exa.js'; // Requires EXASEARCH_API_KEY env var const result = await exaSearch.func({ query: 'is Costco membership worth it for single person' }); ``` -------------------------------- ### Manage Financial Accounts Source: https://context7.com/openaccountant/wilson/llms.txt Track various account types for net worth calculations using the account_manage tool. ```typescript import { accountManageTool, initAccountManageTool } from './src/tools/net-worth/account-manage.js'; initAccountManageTool(db); // Add accounts await accountManageTool.func({ action: 'add', name: 'Chase Checking', accountSubtype: 'checking', institution: 'Chase', accountNumberLast4: '4521', currentBalance: 5432.10 }); await accountManageTool.func({ action: 'add', name: 'Fidelity 401k', accountSubtype: 'retirement_401k', institution: 'Fidelity', currentBalance: 125000.00 }); await accountManageTool.func({ action: 'add', name: 'Chase Sapphire', accountSubtype: 'credit_card', institution: 'Chase', accountNumberLast4: '9876', currentBalance: 2345.67 // Always positive, stored as liability }); // List all accounts const accounts = await accountManageTool.func({ action: 'list' }); // Result: // { // count: 3, // accounts: [ // { id: 1, name: 'Chase Checking', type: 'asset', subtype: 'checking', institution: 'Chase', balance: 5432.10 }, // { id: 2, name: 'Fidelity 401k', type: 'asset', subtype: 'retirement_401k', institution: 'Fidelity', balance: 125000.00 }, // { id: 3, name: 'Chase Sapphire', type: 'liability', subtype: 'credit_card', institution: 'Chase', balance: 2345.67 } // ] // } ``` -------------------------------- ### Query Transactions with Natural Language Source: https://context7.com/openaccountant/wilson/llms.txt Use the transactionSearchTool to query transactions using natural language. It parses queries into filters for dates, categories, amounts, merchants, and recurring status. Ensure initTransactionSearchTool is called with the database instance before use. ```typescript import { transactionSearchTool, initTransactionSearchTool } from './src/tools/query/transaction-search.js'; initTransactionSearchTool(db); // Natural language queries const diningResult = await transactionSearchTool.func({ query: 'dining in January' }); // Parses to: { category: 'Dining', dateStart: '2024-01-01', dateEnd: '2024-01-31' } const expensiveResult = await transactionSearchTool.func({ query: 'Amazon purchases over $100 last month' }); // Parses to: { merchant: 'Amazon', maxAmount: -100, dateStart: '...', dateEnd: '...' } const recurringResult = await transactionSearchTool.func({ query: 'recurring subscriptions this year' }); // Parses to: { isRecurring: true, dateStart: '2024-01-01', dateEnd: '2024-12-31' } // Result structure: // { // query: 'dining in January', // filtersApplied: { category: 'Dining', dateStart: '2024-01-01', dateEnd: '2024-01-31' }, // count: 28, // formatted: 'Found 28 transactions:\n\nDate Amount Category Description\n...', // transactions: [ // { id: 1, date: '2024-01-15', description: 'CHIPOTLE', amount: -12.50, category: 'Dining' }, // ... // ] // } ``` -------------------------------- ### Detect Financial Anomalies Source: https://context7.com/openaccountant/wilson/llms.txt Use the anomalyDetectTool to identify financial anomalies such as duplicate charges, spending spikes, and unused subscriptions. Initialize the tool with initAnomalyDetectTool(db) before making calls. Specify anomaly types to detect, or use 'all' for comprehensive detection. ```typescript import { anomalyDetectTool, initAnomalyDetectTool } from './src/tools/query/anomaly-detect.js'; initAnomalyDetectTool(db); // Detect all anomaly types const result = await anomalyDetectTool.func({ types: ['all'] }); // Result: // { // anomalyCount: 7, // duplicates: 2, // spikes: 3, // unusedSubscriptions: 2, // anomalies: [ // { // type: 'duplicate', // transactions: [ // { id: 45, date: '2024-01-15', description: 'SPOTIFY', amount: -9.99 }, // { id: 46, date: '2024-01-15', description: 'SPOTIFY', amount: -9.99 } // ], // message: 'Possible duplicate: "SPOTIFY" for $9.99 on 2024-01-15 and 2024-01-15' // }, // { // type: 'spike', // transaction: { id: 78, date: '2024-01-20', description: 'AMAZON', amount: -456.78 }, // averageAmount: -45.50, // multiplier: 10.0, // message: 'Spending spike: "AMAZON" charged $456.78 on 2024-01-20 (10.0x the average of $45.50)' // }, // { // type: 'unused_subscription', // merchant: 'ADOBE CREATIVE', // lastCharge: { id: 92, date: '2024-01-01', amount: -54.99 }, // daysSinceNonRecurring: 180, // message: 'Potentially unused subscription: "ADOBE CREATIVE" ($54.99/charge). No related activity in 180 days.' // } // ], // formatted: 'Anomaly Detection Report\nFound 7 anomalies:\n\nPOTENTIAL DUPLICATES (2)\n...' // } // Detect only spending spikes const spikesOnly = await anomalyDetectTool.func({ types: ['spikes'] }); ``` -------------------------------- ### POST /anomaly-detect Source: https://context7.com/openaccountant/wilson/llms.txt Identifies financial anomalies such as duplicate charges, spending spikes, and potentially unused subscriptions. ```APIDOC ## POST /anomaly-detect ### Description Identifies financial anomalies including duplicate charges, spending spikes, and potentially unused subscriptions. ### Method POST ### Request Body - **types** (array) - Required - List of anomaly types to detect (e.g., ['all'], ['spikes']) ### Response #### Success Response (200) - **anomalyCount** (number) - Total number of anomalies found - **duplicates** (number) - Count of duplicate charges - **spikes** (number) - Count of spending spikes - **unusedSubscriptions** (number) - Count of potentially unused subscriptions - **anomalies** (array) - Detailed list of anomaly objects ``` -------------------------------- ### Categorize Transactions with AI using categorizeTool Source: https://context7.com/openaccountant/wilson/llms.txt Use `categorizeTool` to classify uncategorized transactions using AI. It assigns transactions to 18 spending categories and provides confidence scores. Can categorize all transactions or a limited set, optionally assigning to a specific entity. ```typescript import { categorizeTool, initCategorizeTool } from './src/tools/categorize/categorize.js'; initCategorizeTool(db); // Categorize all uncategorized transactions const result = await categorizeTool.func({}); // Result: // { // success: true, // totalUncategorized: 156, // categorized: 156, // ruleMatched: 23, // Pre-categorized by rules engine // llmCategorized: 133, // Categorized by AI // categoriesApplied: { // Dining: 28, // Groceries: 35, // Transport: 12, // Shopping: 45, // Subscriptions: 8, // Utilities: 6, // Other: 22 // }, // needingReview: 15, // Low confidence (<0.7) // message: 'Categorized 156 of 156 transactions (23 by rules, 133 by LLM). 15 need review (confidence < 0.7).' // } // Categorize with a limit for specific entity const limitedResult = await categorizeTool.func({ limit: 50, entityId: 2 // Assign to business entity }); ``` -------------------------------- ### Call LLM with Zod Schema for Structured Output Source: https://context7.com/openaccountant/wilson/llms.txt Call the LLM with a Zod schema to ensure structured JSON output. The response will be typed according to the provided schema. ```typescript import { callLlm } from './src/model/llm.js'; import { z } from 'zod'; // Structured output with Zod schema const categorySchema = z.object({ transactions: z.array(z.object({ id: z.number(), category: z.string(), confidence: z.number() })) }); const categorization = await callLlm( 'Categorize these transactions: [...]', { model: 'claude-3-5-sonnet', systemPrompt: 'Respond only with valid JSON.', outputSchema: categorySchema } ); console.log(categorization.response.structured); // Typed result ``` -------------------------------- ### Configure Categorization Rules Source: https://context7.com/openaccountant/wilson/llms.txt Define glob or regex patterns to auto-categorize transactions. Rules are managed via the rule_manage tool. ```typescript import { ruleManageTool, initRuleManageTool } from './src/tools/rules/rule-manage.js'; initRuleManageTool(db); // Add categorization rules (glob patterns by default) await ruleManageTool.func({ action: 'add', pattern: '*STARBUCKS*', category: 'Dining', priority: 10 }); await ruleManageTool.func({ action: 'add', pattern: '*NETFLIX*', category: 'Subscriptions', priority: 10 }); // Add regex-based rule await ruleManageTool.func({ action: 'add', pattern: '^UBER\\s+(TRIP|EATS)', category: 'Transport', priority: 5, is_regex: true }); // List all rules const rules = await ruleManageTool.func({ action: 'list' }); // Result: // { // rules: [ // { id: 1, pattern: '*STARBUCKS*', category: 'Dining', priority: 10, is_regex: false }, // { id: 2, pattern: '*NETFLIX*', category: 'Subscriptions', priority: 10, is_regex: false }, // { id: 3, pattern: '^UBER\\s+(TRIP|EATS)', category: 'Transport', priority: 5, is_regex: true } // ], // formatted: '#1 [pri:10] "*STARBUCKS*" → Dining\n#2 [pri:10] "*NETFLIX*" → Subscriptions\n#3 [pri:5] "^UBER\\s+(TRIP|EATS)" → Transport (regex)' // } ``` -------------------------------- ### POST /transaction-search Source: https://context7.com/openaccountant/wilson/llms.txt Parses natural language queries into structured filters to search and retrieve financial transactions. ```APIDOC ## POST /transaction-search ### Description Parses natural language queries into filters for date ranges, categories, amounts, merchants, and recurring status. ### Method POST ### Request Body - **query** (string) - Required - The natural language query string (e.g., 'dining in January') ### Response #### Success Response (200) - **query** (string) - The original query - **filtersApplied** (object) - The parsed filter criteria - **count** (number) - Number of transactions found - **formatted** (string) - Human-readable summary - **transactions** (array) - List of matching transaction objects ``` -------------------------------- ### Call LLM for Text Generation Source: https://context7.com/openaccountant/wilson/llms.txt Use the callLlm function for simple text generation with a specified model and system prompt. Ensure the model is correctly configured. ```typescript import { callLlm } from './src/model/llm.js'; // Simple text generation const result = await callLlm('Summarize my spending in one sentence', { model: 'gpt-4o', systemPrompt: 'You are a helpful financial assistant.' }); console.log(result.response.content); ``` -------------------------------- ### Export Transactions to Files Source: https://context7.com/openaccountant/wilson/llms.txt Use the export_transactions tool to save filtered transaction data to CSV or XLSX formats. Requires initialization with a database instance before use. ```typescript import { exportTransactionsTool, initExportTool } from './src/tools/export/export-transactions.js'; initExportTool(db); // Export all transactions to XLSX const result = await exportTransactionsTool.func({ format: 'xlsx', filePath: '~/Documents/transactions-2024.xlsx' }); // Export filtered transactions to CSV const filteredResult = await exportTransactionsTool.func({ format: 'csv', filePath: '~/Documents/dining-q1.csv', dateStart: '2024-01-01', dateEnd: '2024-03-31', category: 'Dining' }); // Result: // { // success: true, // transactionsExported: 84, // format: 'csv', // filePath: '/Users/name/Documents/dining-q1.csv', // message: 'Exported 84 transactions to /Users/name/Documents/dining-q1.csv (CSV).' // } ``` -------------------------------- ### List Tax Deductions in a Category Source: https://context7.com/openaccountant/wilson/llms.txt Lists all flagged tax deductions within a specific IRS category for a given tax year. ```typescript // List deductions in a category const officeDeductions = await taxFlagTool.func({ action: 'list', taxYear: 2024, irsCategory: 'Office expenses' }); ``` -------------------------------- ### Transaction Row Layout Source: https://github.com/openaccountant/wilson/blob/main/BRAND.md Tabular display format for financial transactions using monospaced fonts and color-coded amounts. ```text Mar 01 NETFLIX.COM Entertainment -$15.99 ink / mono Mar 01 WHOLE FOODS #123 Groceries -$87.42 ink / mono Feb 28 PAYROLL DEPOSIT Income +$3,200.00 money green / mono ``` -------------------------------- ### Payment Required State Layout Source: https://github.com/openaccountant/wilson/blob/main/BRAND.md Visual structure for a payment-gated skill, featuring a caution-amber header and money-green call-to-action. ```text ┌─────────────────────────────────┐ surface-2 │ ⚠ Payment Required │ caution amber │ │ │ Tax Prep Skill — $25/year │ ledger + money green │ Categorize deductions, flag │ │ write-offs, export for filing. │ ink │ │ │ [Pay with x402] [Details] │ money green CTA └─────────────────────────────────┘ ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.