Dexter JP: an autonomous research agent for Japanese listed companies
日本株の自律型リサーチAIエージェント|AI agent for deep financial research on Japanese listed companies. Powered by EDINET DB + J-Quants.
At a glance
- What is it?
- Dexter JP forks a US-equity research agent and rebuilds it around EDINET DB and J-Quants. The result plans, calls tools and writes reports on its own, provided you accept that it is a research aid and not an investment adviser.
- Who is it for?
- Dexter JP fits engineers and analysts who already understand Japanese filings and want an agent that assembles the first draft of a company comparison, with an EDINET DB key and a Bun install as the only real prerequisites. It does not fit anyone who wants a trading signal, a guaranteed-number valuation, or a hosted service: the README states it is for education and information only, and the Claude Agent SDK mode explicitly says not to expose it as a multi-user service.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 12 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The gap Dexter JP fills between a screener and a research note
Most Japanese equity tooling stops at retrieval. You get a screening screen, a financial statement viewer, or a PDF of a 有報. The work of deciding which metrics matter for a given comparison, pulling them from several sources, and noticing when the numbers contradict the story stays with the analyst. Dexter JP is aimed squarely at that middle layer. The README frames the distinction directly: a typical tool says it can screen and show financial data, while this one takes a question such as which of Sony or Nintendo is the better investment target and returns a structured comparison with a conclusion. The intended user is someone who already knows what ROE, PBR and 自己資本比率 mean and wants the assembly work automated, not explained. It is a research accelerator for people who will read the output critically, and the disclaimer at the top of the README is unambiguous that it is not a substitute for a licensed adviser.
How the agent loop, meta-tools and skills fit together
The architecture is a LangChain agent loop: plan, select a tool, execute, verify, repeat. What makes it more than a thin wrapper is the layering underneath. `get_financials` is described as a meta-tool that holds its own LLM and acts as a routing agent. It receives a natural-language query, decides which sub-tools to call, runs several in parallel, and merges the results. The sub-tools listed are `get_financial_statements`, `get_company_info`, `get_key_ratios`, `get_analysis` and `get_earnings`. The README gives the example of comparing Sony's and Toyota's margins, where four API calls fire automatically from one request.
Alongside that sit `read_filings`, which exposes 有報 text blocks and 大量保有報告書 shareholder data, a `company_screener` covering more than 100 indicators, and `get_stock_price` over J-Quants V2. Multi-step workflows are packaged as skills defined in `SKILL.md`, with a DCF valuation skill built in that accounts for Japanese government bond yields in the WACC calculation, the Tokyo Stock Exchange sub-1x PBR context, and yen-denominated analysis. Two further mechanisms matter for long sessions. Context compression uses a fast LLM to summarise retrieved data rather than truncate it, on the stated grounds that keeping key numbers and conclusions preserves consistency across a session. Memory persists investment policy and prior analysis between sessions. The design choice worth noting is that the meta-tool hides a second LLM call inside a tool call, which makes cost and latency harder to reason about than a flat tool list would.
Installing Dexter JP and running a first question
The prerequisites are Bun, one LLM API key, and an EDINET DB key. J-Quants and the web search providers are optional, and the README notes each one activates a corresponding tool when set. Clone the repository, install dependencies, copy the environment template, and start the CLI:
git clone https://github.com/edinetdb/dexter-jp.git
cd dexter-jp
bun install
cp env.example .env
bun run startThe `bun install` step runs a `postinstall` script that installs Playwright's Chromium build, which is why the first install takes longer than a typical TypeScript project. Edit `.env` before starting. At minimum you need one of `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, `XAI_API_KEY` or `OPENROUTER_API_KEY`, plus `EDINETDB_API_KEY`. Adding `JQUANTS_API_KEY` is what enables the price tool:
EDINETDB_API_KEY=edb_...
OPENAI_API_KEY=sk-...
JQUANTS_API_KEY=...Once the CLI is up, ask a question in plain Japanese or English. The README's own examples include asking for a five-year financial trend for Toyota, screening for companies with ROE above 15% and an equity ratio above 50%, or reading Nintendo's risk factors from its annual report. A good first run is one of the simple questions rather than a full comparison, because it exercises a single tool path and shows you the report format before you spend tokens on a multi-source analysis. If you want the agent to follow your own method, create `.dexter/RULES.md` from the bundled example and type `/rules` in the CLI to confirm it loaded.
Where Dexter JP will disappoint you
The Claude Agent SDK mode carries the sharpest constraints. Authentication is delegated to the SDK, so Dexter JP implements no auth flow of its own; it works with a Claude Code login, `CLAUDE_CODE_OAUTH_TOKEN`, or `ANTHROPIC_API_KEY`, and the SDK decides which. The README states plainly that this mode is for personal credentials only and must not be offered as a multi-user service. It also declines to promise that the mode is free, noting that availability and pricing depend on Anthropic's own terms and linking to Anthropic's help page instead of asserting anything.
The billing guard is the other thing to understand before you run it. If a metered credential is present in the environment, such as `ANTHROPIC_API_KEY` or the Bedrock and Vertex flags, the program detects it at startup, prints the result, and stops rather than run on an unintended billing path. To proceed anyway you set `DEXTER_AGENT_SDK_ALLOW_METERED=1`, and to cap spend you set `DEXTER_AGENT_SDK_MAX_BUDGET_USD`, at which point the SDK's own estimate halts the run. A first-time user who exports an API key globally and then wonders why the agent refuses to start has hit this guard, not a bug.
There are quieter limits too. In SDK mode the financial tools return raw data and the main model interprets it, so no LLM is called inside the tools, and the SDK's built-in Bash, Write and WebSearch tools are not used. The README does not document rollback behaviour for a partially completed analysis, nor does it describe how context compression decides what to keep. And the underlying disclaimer is not decorative: outputs can contain errors, incomplete information, or stale data.
Dexter JP versus the original US-equity Dexter
The honest comparison is with the project it forked. virattt/dexter targets US equities; Dexter JP is described in the README as a full rework for the Japanese market. The difference is not a translation layer. The data sources change to EDINET DB and J-Quants, the filing reader works on 有報 text blocks and 大量保有報告書, and the built-in DCF skill encodes Japanese assumptions such as a government bond yield based WACC and the PBR-below-1 context on the Tokyo exchange. If your coverage is US-listed companies, the upstream project is the closer fit and this fork adds Japanese-market machinery you will not use. If your coverage is Japanese listed companies, the upstream agent would need exactly the data plumbing this fork already has. The trade-off is that Dexter JP tracks upstream releases, and its version history shows that: v1.0.0-jp, v2026.6.9-jp and v1.0.5-jp are all labelled as following the corresponding upstream version.
Messaging gateways and what they change about deployment
Dexter JP is not CLI-only. `bun run gateway` starts a messaging layer, and which channels come up depends on which environment variables are set, with multiple channels able to run at once. Slack uses Socket Mode and Discord uses the Gateway, so neither needs a public URL; LINE uses a webhook and does need one; WhatsApp runs over Baileys and logs in by QR code. The Slack setup in the README lists the exact scopes and events required, including `chat:write`, `im:history`, `im:read`, `app_mentions:read`, and the `message.im` and `app_mention` bot events, plus the App Home setting that allows messages from the messages tab. In a server the bot replies in threads; in DMs it replies directly.
The Dockerfile points at this path rather than the CLI, running `src/gateway/index.ts` as its command on a Node 22 slim base with git and Playwright's Chromium dependencies installed. That is a meaningful signal about intended deployment: the container is built for a long-running gateway process, not for interactive terminal use. Running a bot that answers financial questions in a shared Slack channel also widens the audience beyond the single analyst the CLI assumes, which sits awkwardly against the personal-credentials-only rule for the Claude Agent SDK mode.
Licence, maintenance and upgrade cost
The project is MIT licensed, and the repository carries a LICENSE file. MIT is permissive, so the practical implication is that you can use, modify and redistribute the code provided the copyright notice and permission notice are retained. The bundled data sources are a separate matter: EDINET DB, J-Quants, and the LLM providers each have their own terms, and the README's statement that the software is for education and information only is a project-level position rather than a legal analysis. Nothing here constitutes legal advice, and the disclaimer explicitly excludes warranties of accuracy, completeness or fitness for a particular purpose.
On maintenance, the last push was on 2026-09-04, and the most recent release, v1.0.5-jp, was tagged the same day. The release naming convention is a real upgrade cost to plan for: each JP release follows a specific upstream version, so upgrading means reading both the upstream changelog and the JP release notes to see what the fork had to re-apply. There is a RELEASE-NOTES-v1.0.5-jp.md file at the repository root for the current version. The dependency list is broad, spanning LangChain packages for five providers, four messaging SDKs, Playwright and better-sqlite3, so version drift across that surface is the likeliest source of upgrade friction.
Editorial conclusion
Dexter JP fits engineers and analysts who already understand Japanese filings and want an agent that assembles the first draft of a company comparison, with an EDINET DB key and a Bun install as the only real prerequisites. It does not fit anyone who wants a trading signal, a guaranteed-number valuation, or a hosted service: the README states it is for education and information only, and the Claude Agent SDK mode explicitly says not to expose it as a multi-user service. Before adopting it, verify your EDINET DB key works, confirm which LLM credentials are present in the shell you start it from, and read the fail-loud billing notice that appears when a metered credential is detected.
Frequently asked questions
How do I install Dexter JP?
Install Bun, clone the repository, run bun install, copy env.example to .env and set an LLM key plus EDINETDB_API_KEY, then run bun run start. The install step also downloads Playwright's Chromium build through a postinstall script.
How do I use Dexter JP?
Start the CLI and ask a question in Japanese or English, such as comparing Sony and Nintendo as investment targets or screening for companies with ROE above 15%. The agent plans the steps, calls the financial and filing tools, and returns a structured report. Typing /rules shows the current research rules, and /model switches the LLM provider.
Which data sources does Dexter JP need?
An EDINET DB API key is required and provides the financial and filing data; J-Quants is optional and, when set, enables the get_stock_price tool. Web search providers and an X bearer token are also optional and activate their respective tools when configured.
Why does Dexter JP stop at startup in Claude Agent SDK mode?
If a metered credential such as ANTHROPIC_API_KEY or the Bedrock or Vertex flags is present, the program detects it, displays the result and halts so it does not run on an unintended billing path. Set DEXTER_AGENT_SDK_ALLOW_METERED=1 to proceed on that path deliberately.
Community notes