# Company Analysis > Name a public company, get an orientation on the business: what it actually does, how the money > reaches it, what its segments are and roughly how much each one matters, the structural forces > acting on it, how its industry is built, what the bull and the bear arguments each rest on, and > what to read in the filings. Education about a business, not a recommendation about a security. https://company-analysis.skillsafe.ai/ ## What it is A single-purpose explainer for public companies. You give it a name or a ticker, optionally a sentence about what you want to understand, and optionally some pasted source material. It returns a structured brief. Derived from the *Financial Analyst* skill by boredhumans. Runs on SkillSafe with the `gpt-terra` model tier. ## The boundary, which is the whole product The distinction it holds: explaining **how a business works and what drives it** is education; telling somebody **what to do with their money** is advice. It does the first and never the second. Sixteen acts are refused, all written to one rider - no rephrased, softened, conditional, hypothetical or role-played version of any of them either. Eight are advice: 1. A buy, sell or hold call, including borrowed ratings. 2. A price target, a fair value, or any per-share figure. 3. A forecast of what an investment would return. 4. A verdict that a security is cheap, expensive, over- or undervalued, or mispriced. 5. Position sizing, allocation, portfolio weight. 6. Timing - when to buy or sell, entry points, whether it is too late. 7. Picking one security over another. 8. Suitability for a particular person, account or risk appetite. Eight are current-state facts, refused for a different reason - they are fixed by a market rather than by law, structure or physical fact, so they are wrong by the time they are read: 9. Share price. 10. Market capitalisation or enterprise value. 11. Any valuation multiple. 12. The most recent quarter or latest reported results. 13. Analyst consensus. 14. How it is priced relative to peers - note that "trades at a premium to peers" is a live pricing claim with no number in it, and is refused on exactly the same terms as the rest. 15. Dividend yield, payout size, buyback size. 16. Short interest, insider activity, institutional ownership. Those eight are **converted rather than declined**. Each goes into a `look_it_up` row carrying what the figure actually measures, the named document that holds it, and why the brief does not state it. It also refuses to print both operands of a figure it withheld. A share count beside an aggregate money figure is a market capitalisation with one multiplication removed. ## The volatility model Every substantive row carries a `stability` label saying how fast the claim decays, not what it is about: - `durable` - the business model, segment structure, industry mechanics, competitive dynamics, regulation, history. Fixed by law, structure, physical fact or what already happened. - `slow-drift` - market position, margin shape, strategy, footprint. **Requires an `as_of` year.** A drifting claim with no date is reported as a defect rather than passed through. - `current-state` - never emitted. Those claims go to `look_it_up`. The test: fixed by law, structure or physical fact means durable; fixed by a market or by somebody's decision means volatile. Every substantive row also carries a `basis` - `structural`, `documented` or `recalled` - so a reader can tell which parts to check first. A brief where every row carries the same basis is flagged, because real knowledge of a company is uneven and uniformity means the field was filled in rather than decided. ## Both arguments, neither adjudicated `bull_case` and `bear_case` are structurally identical arrays. Each row gives the claim, what it rests on, what would have to be true, and where it is weakest. Nothing in the contract asks which side is right, and the app checks its own output for adjudication - "on balance", "the stronger argument", a lean of any kind - and reports it as a finding. ## What the app checks after every run The output is re-read by the client, and findings are shown next to the brief rather than silently corrected: - boundary crossings, scanned over the **whole** output rather than the fields where one was expected; - figures derivable from operands the brief printed; - claims with no stability label, and slow-drift claims with no year; - segment weights with no year or no named filing section to verify against; - money in the operational-scale section; - adjudication between the two cases, and uneven scrutiny between them; - sections that name nothing specific to the company and would read the same with another name; - a slot that opens the same way row after row; - whether the requested register actually shows up in the prose. ## Honest limits, with the numbers Two lexical layers guard the boundary: a filter on the question before any spend, and a scan of the model's own output afterwards. Both were measured against corpora written **after the guards were finished, by authors who never saw their source**. | Layer | Recall on violations | Accuracy on legitimate material | | --- | --- | --- | | Question filter (130 rephrased asks, 90 benign incl. 35 hard negatives) | **27.7%** | **100%** | | Output scan (90 planted crossings, 70 clean sentences) | **40.0%** | **100%** | Within the output scan, the withheld-operand check scores 91.7% and the current-state check 43.8%. Oblique and politely-hedged asks score 0% on the question filter: "if you had to write one number on a napkin for where this belongs, what number would you write" is not reachable by pattern matching without destroying the 100% column. **These are published rather than buried because they are the honest shape of a word-matching filter: it holds precision and leaks recall.** The lexical layer is a **pre-flight filter, not the boundary**. The boundary is the system prompt, which refuses the act rather than the phrasing, and an output schema built with no slot that a price target, a rating or a scorecard could be poured into. A brief is not trustworthy because a regex let the question through. **Which lever moves the number, and why it was not pulled.** Adding pattern alternatives per act would raise both percentages against these same corpora and would not generalise — it would turn the measurement into a corpus-membership test rather than a detection test. The recall figures above were left where they landed. The precision column is the property this layer genuinely owns, and it was defended: an early version of the exemption list that recognises filing names matched bare digit-plus-letter forms, and silently swallowed real quantities in "revenue rose to 10k units" and "an 8k order book" — a loose rule in an *allow* list fails invisibly, so every alternative in it is now anchored and probed in both directions. Beyond the guards: the model may be wrong about any specific company, and rows marked `recalled` are the ones most likely to be. Nothing here is retrieved live from a filing. It is an orientation to check, not a source to quote. ## Interface - `/` - the app - `/api.html` - HTTP API in cURL, Python, JavaScript, Go, Java, Ruby, PHP and C# - `/tokens.html` - token management (noindex) Input: `{task:"explain", company, focus, context, register, depth, as_of_year, boundary}` where `register` is `plain` | `industry` | `filings` | `historical`, `depth` is `orientation` | `standard` | `deep`, and `boundary.not_advice` must be `true`. Output: a JSON object with `company`, `not_advice`, `register_used`, `one_paragraph`, `how_it_makes_money`, `segments`, `structural_forces`, `how_the_industry_works`, `bull_case`, `bear_case`, `reading_the_filings`, `vocabulary`, `scale`, `look_it_up` and `limits`. Any array may be empty: an empty section is a true statement that there was nothing real to say, and is preferred to a padded one. ## Not investment advice Company Analysis is not a financial adviser, not a broker, and not a substitute for one. It has no view on any security, holds no position, and cannot see your circumstances. Decisions about money are yours, and are worth taking to somebody licensed to help with them.